mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-31 09:10:30 -04:00
Vscode merge (#4582)
* Merge from vscode 37cb23d3dd4f9433d56d4ba5ea3203580719a0bd * fix issues with merges * bump node version in azpipe * replace license headers * remove duplicate launch task * fix build errors * fix build errors * fix tslint issues * working through package and linux build issues * more work * wip * fix packaged builds * working through linux build errors * wip * wip * wip * fix mac and linux file limits * iterate linux pipeline * disable editor typing * revert series to parallel * remove optimize vscode from linux * fix linting issues * revert testing change * add work round for new node * readd packaging for extensions * fix issue with angular not resolving decorator dependencies
This commit is contained in:
137
src/vs/workbench/contrib/terminal/browser/terminalQuickOpen.ts
Normal file
137
src/vs/workbench/contrib/terminal/browser/terminalQuickOpen.ts
Normal file
@@ -0,0 +1,137 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as nls from 'vs/nls';
|
||||
import { Mode, IEntryRunContext, IAutoFocus, IQuickNavigateConfiguration, IModel } from 'vs/base/parts/quickopen/common/quickOpen';
|
||||
import { QuickOpenModel, QuickOpenEntry } from 'vs/base/parts/quickopen/browser/quickOpenModel';
|
||||
import { QuickOpenHandler } from 'vs/workbench/browser/quickopen';
|
||||
import { ITerminalService, ITerminalInstance } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { ContributableActionProvider } from 'vs/workbench/browser/actions';
|
||||
import { stripWildcards } from 'vs/base/common/strings';
|
||||
import { matchesFuzzy } from 'vs/base/common/filters';
|
||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
|
||||
export class TerminalEntry extends QuickOpenEntry {
|
||||
|
||||
constructor(
|
||||
public instance: ITerminalInstance,
|
||||
private label: string,
|
||||
private terminalService: ITerminalService
|
||||
) {
|
||||
super();
|
||||
}
|
||||
|
||||
public getLabel(): string {
|
||||
return this.label;
|
||||
}
|
||||
|
||||
public getAriaLabel(): string {
|
||||
return nls.localize('termEntryAriaLabel', "{0}, terminal picker", this.getLabel());
|
||||
}
|
||||
|
||||
public run(mode: Mode, context: IEntryRunContext): boolean {
|
||||
if (mode === Mode.OPEN) {
|
||||
setTimeout(() => {
|
||||
this.terminalService.setActiveInstance(this.instance);
|
||||
this.terminalService.showPanel(true);
|
||||
}, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.run(mode, context);
|
||||
}
|
||||
}
|
||||
|
||||
export class CreateTerminal extends QuickOpenEntry {
|
||||
|
||||
constructor(
|
||||
private label: string,
|
||||
private commandService: ICommandService
|
||||
) {
|
||||
super();
|
||||
}
|
||||
|
||||
public getLabel(): string {
|
||||
return this.label;
|
||||
}
|
||||
|
||||
public getAriaLabel(): string {
|
||||
return nls.localize('termCreateEntryAriaLabel', "{0}, create new terminal", this.getLabel());
|
||||
}
|
||||
|
||||
public run(mode: Mode, context: IEntryRunContext): boolean {
|
||||
if (mode === Mode.OPEN) {
|
||||
setTimeout(() => this.commandService.executeCommand('workbench.action.terminal.new'), 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.run(mode, context);
|
||||
}
|
||||
}
|
||||
|
||||
export class TerminalPickerHandler extends QuickOpenHandler {
|
||||
|
||||
public static readonly ID = 'workbench.picker.terminals';
|
||||
|
||||
constructor(
|
||||
@ITerminalService private readonly terminalService: ITerminalService,
|
||||
@ICommandService private readonly commandService: ICommandService,
|
||||
) {
|
||||
super();
|
||||
}
|
||||
|
||||
public getResults(searchValue: string, token: CancellationToken): Promise<QuickOpenModel> {
|
||||
searchValue = searchValue.trim();
|
||||
const normalizedSearchValueLowercase = stripWildcards(searchValue).toLowerCase();
|
||||
|
||||
const terminalEntries: QuickOpenEntry[] = this.getTerminals();
|
||||
terminalEntries.push(new CreateTerminal(nls.localize("workbench.action.terminal.newplus", "$(plus) Create New Integrated Terminal"), this.commandService));
|
||||
|
||||
const entries = terminalEntries.filter(e => {
|
||||
if (!searchValue) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const label = e.getLabel();
|
||||
if (!label) {
|
||||
return false;
|
||||
}
|
||||
const highlights = matchesFuzzy(normalizedSearchValueLowercase, label, true);
|
||||
if (!highlights) {
|
||||
return false;
|
||||
}
|
||||
|
||||
e.setHighlights(highlights);
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
return Promise.resolve(new QuickOpenModel(entries, new ContributableActionProvider()));
|
||||
}
|
||||
|
||||
private getTerminals(): TerminalEntry[] {
|
||||
return this.terminalService.terminalTabs.reduce((terminals, tab, tabIndex) => {
|
||||
const terminalsInTab = tab.terminalInstances.map((terminal, terminalIndex) => {
|
||||
const label = `${tabIndex + 1}.${terminalIndex + 1}: ${terminal.title}`;
|
||||
return new TerminalEntry(terminal, label, this.terminalService);
|
||||
});
|
||||
return [...terminals, ...terminalsInTab];
|
||||
}, []);
|
||||
}
|
||||
|
||||
public getAutoFocus(searchValue: string, context: { model: IModel<QuickOpenEntry>, quickNavigateConfiguration?: IQuickNavigateConfiguration }): IAutoFocus {
|
||||
return {
|
||||
autoFocusFirstEntry: !!searchValue || !!context.quickNavigateConfiguration
|
||||
};
|
||||
}
|
||||
|
||||
public getEmptyLabel(searchString: string): string {
|
||||
if (searchString.length > 0) {
|
||||
return nls.localize('noTerminalsMatching', "No terminals matching");
|
||||
}
|
||||
return nls.localize('noTerminalsFound', "No terminals open");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user