mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-22 04:40:30 -04:00
Merge from vscode 2cfc8172e533e50c90e6a3152f6bfb1f82f963f3 (#6516)
* Merge from vscode 2cfc8172e533e50c90e6a3152f6bfb1f82f963f3 * fix tests
This commit is contained in:
@@ -25,7 +25,7 @@ import { activeContrastBorder, scrollbarSliderActiveBackground, scrollbarSliderB
|
||||
import { ICssStyleCollector, ITheme, IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
|
||||
import { PANEL_BACKGROUND } from 'vs/workbench/common/theme';
|
||||
import { TerminalWidgetManager } from 'vs/workbench/contrib/terminal/browser/terminalWidgetManager';
|
||||
import { IShellLaunchConfig, ITerminalDimensions, ITerminalInstance, ITerminalProcessManager, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, NEVER_MEASURE_RENDER_TIME_STORAGE_KEY, ProcessState, TERMINAL_PANEL_ID, IWindowsShellHelper, SHELL_PATH_INVALID_EXIT_CODE, SHELL_PATH_DIRECTORY_EXIT_CODE, SHELL_CWD_INVALID_EXIT_CODE } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { IShellLaunchConfig, ITerminalDimensions, ITerminalInstance, ITerminalProcessManager, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, NEVER_MEASURE_RENDER_TIME_STORAGE_KEY, ProcessState, TERMINAL_PANEL_ID, IWindowsShellHelper, SHELL_PATH_INVALID_EXIT_CODE, SHELL_PATH_DIRECTORY_EXIT_CODE, SHELL_CWD_INVALID_EXIT_CODE, KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS, INavigationMode } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { ansiColorIdentifiers, TERMINAL_BACKGROUND_COLOR, TERMINAL_CURSOR_BACKGROUND_COLOR, TERMINAL_CURSOR_FOREGROUND_COLOR, TERMINAL_FOREGROUND_COLOR, TERMINAL_SELECTION_BACKGROUND_COLOR } from 'vs/workbench/contrib/terminal/common/terminalColorRegistry';
|
||||
import { TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminalCommands';
|
||||
import { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/terminalConfigHelper';
|
||||
@@ -35,8 +35,9 @@ import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
|
||||
import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
|
||||
import { ITerminalInstanceService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { TerminalProcessManager } from 'vs/workbench/contrib/terminal/browser/terminalProcessManager';
|
||||
import { Terminal as XTermTerminal, IBuffer } from 'xterm';
|
||||
import { Terminal as XTermTerminal, IBuffer, ITerminalAddon } from 'xterm';
|
||||
import { SearchAddon, ISearchOptions } from 'xterm-addon-search';
|
||||
import { NavigationModeAddon } from 'vs/workbench/contrib/terminal/browser/addons/navigationModeAddon';
|
||||
|
||||
// How long in milliseconds should an average frame take to render for a notification to appear
|
||||
// which suggests the fallback DOM-based renderer
|
||||
@@ -91,6 +92,9 @@ export const DEFAULT_COMMANDS_TO_SKIP_SHELL: string[] = [
|
||||
TERMINAL_COMMAND_ID.SPLIT_IN_ACTIVE_WORKSPACE,
|
||||
TERMINAL_COMMAND_ID.SPLIT,
|
||||
TERMINAL_COMMAND_ID.TOGGLE,
|
||||
TERMINAL_COMMAND_ID.NAVIGATION_MODE_EXIT,
|
||||
TERMINAL_COMMAND_ID.NAVIGATION_MODE_FOCUS_NEXT,
|
||||
TERMINAL_COMMAND_ID.NAVIGATION_MODE_FOCUS_PREVIOUS,
|
||||
'editor.action.toggleTabFocusMode',
|
||||
'workbench.action.quickOpen',
|
||||
'workbench.action.quickOpenPreviousEditor',
|
||||
@@ -183,6 +187,7 @@ export class TerminalInstance implements ITerminalInstance {
|
||||
private _xtermSearch: SearchAddon | undefined;
|
||||
private _xtermElement: HTMLDivElement;
|
||||
private _terminalHasTextContextKey: IContextKey<boolean>;
|
||||
private _terminalA11yTreeFocusContextKey: IContextKey<boolean>;
|
||||
private _cols: number;
|
||||
private _rows: number;
|
||||
private _dimensionsOverride: ITerminalDimensions | undefined;
|
||||
@@ -197,6 +202,7 @@ export class TerminalInstance implements ITerminalInstance {
|
||||
private _widgetManager: TerminalWidgetManager;
|
||||
private _linkHandler: TerminalLinkHandler;
|
||||
private _commandTracker: TerminalCommandTracker;
|
||||
private _navigationModeAddon: INavigationMode & ITerminalAddon | undefined;
|
||||
|
||||
public disableLayout: boolean;
|
||||
public get id(): number { return this._id; }
|
||||
@@ -224,6 +230,7 @@ export class TerminalInstance implements ITerminalInstance {
|
||||
public get isTitleSetByProcess(): boolean { return !!this._messageTitleDisposable; }
|
||||
public get shellLaunchConfig(): IShellLaunchConfig { return this._shellLaunchConfig; }
|
||||
public get commandTracker(): TerminalCommandTracker { return this._commandTracker; }
|
||||
public get navigationMode(): INavigationMode | undefined { return this._navigationModeAddon; }
|
||||
|
||||
private readonly _onExit = new Emitter<number>();
|
||||
public get onExit(): Event<number> { return this._onExit.event; }
|
||||
@@ -280,6 +287,7 @@ export class TerminalInstance implements ITerminalInstance {
|
||||
});
|
||||
|
||||
this._terminalHasTextContextKey = KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED.bindTo(this._contextKeyService);
|
||||
this._terminalA11yTreeFocusContextKey = KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS.bindTo(this._contextKeyService);
|
||||
this.disableLayout = false;
|
||||
|
||||
this._logService.trace(`terminalInstance#ctor (id: ${this.id})`, this._shellLaunchConfig);
|
||||
@@ -462,13 +470,13 @@ export class TerminalInstance implements ITerminalInstance {
|
||||
letterSpacing: font.letterSpacing,
|
||||
lineHeight: font.lineHeight,
|
||||
bellStyle: config.enableBell ? 'sound' : 'none',
|
||||
screenReaderMode: this._isScreenReaderOptimized(),
|
||||
macOptionIsMeta: config.macOptionIsMeta,
|
||||
macOptionClickForcesSelection: config.macOptionClickForcesSelection,
|
||||
rightClickSelectsWord: config.rightClickBehavior === 'selectWord',
|
||||
// TODO: Guess whether to use canvas or dom better
|
||||
rendererType: config.rendererType === 'auto' ? 'canvas' : config.rendererType
|
||||
});
|
||||
this.updateAccessibilitySupport();
|
||||
this._terminalInstanceService.getXtermSearchConstructor().then(Addon => {
|
||||
this._xtermSearch = new Addon();
|
||||
this._xterm.loadAddon(this._xtermSearch);
|
||||
@@ -861,9 +869,9 @@ export class TerminalInstance implements ITerminalInstance {
|
||||
return this._xtermReadyPromise.then(() => this.focus(force));
|
||||
}
|
||||
|
||||
public paste(): void {
|
||||
public async paste(): Promise<void> {
|
||||
this.focus();
|
||||
document.execCommand('paste');
|
||||
this._xterm._core._coreService.triggerDataEvent(await this._clipboardService.readText(), true);
|
||||
}
|
||||
|
||||
public write(text: string): void {
|
||||
@@ -958,7 +966,6 @@ export class TerminalInstance implements ITerminalInstance {
|
||||
private _refreshSelectionContextKey() {
|
||||
const activePanel = this._panelService.getActivePanel();
|
||||
const isActive = !!activePanel && activePanel.getId() === TERMINAL_PANEL_ID;
|
||||
|
||||
this._terminalHasTextContextKey.set(isActive && this.hasSelection());
|
||||
}
|
||||
|
||||
@@ -968,6 +975,7 @@ export class TerminalInstance implements ITerminalInstance {
|
||||
this._processManager.onProcessExit(exitCode => this._onProcessExit(exitCode));
|
||||
this._processManager.onProcessData(data => this._onData.fire(data));
|
||||
this._processManager.onProcessOverrideDimensions(e => this.setDimensions(e));
|
||||
this._processManager.onProcessResolvedShellLaunchConfig(e => this._setResolvedShellLaunchConfig(e));
|
||||
|
||||
if (this._shellLaunchConfig.name) {
|
||||
this.setTitle(this._shellLaunchConfig.name, false);
|
||||
@@ -1223,7 +1231,17 @@ export class TerminalInstance implements ITerminalInstance {
|
||||
}
|
||||
|
||||
public updateAccessibilitySupport(): void {
|
||||
this._xterm.setOption('screenReaderMode', this._isScreenReaderOptimized());
|
||||
const isEnabled = this._isScreenReaderOptimized();
|
||||
if (isEnabled) {
|
||||
this._navigationModeAddon = new NavigationModeAddon(this._terminalA11yTreeFocusContextKey);
|
||||
this._xterm.loadAddon(this._navigationModeAddon);
|
||||
} else {
|
||||
if (this._navigationModeAddon) {
|
||||
this._navigationModeAddon.dispose();
|
||||
this._navigationModeAddon = undefined;
|
||||
}
|
||||
}
|
||||
this._xterm.setOption('screenReaderMode', isEnabled);
|
||||
}
|
||||
|
||||
private _setCursorBlink(blink: boolean): void {
|
||||
@@ -1379,6 +1397,13 @@ export class TerminalInstance implements ITerminalInstance {
|
||||
this._resize();
|
||||
}
|
||||
|
||||
private _setResolvedShellLaunchConfig(shellLaunchConfig: IShellLaunchConfig): void {
|
||||
this._shellLaunchConfig.args = shellLaunchConfig.args;
|
||||
this._shellLaunchConfig.cwd = shellLaunchConfig.cwd;
|
||||
this._shellLaunchConfig.executable = shellLaunchConfig.executable;
|
||||
this._shellLaunchConfig.env = shellLaunchConfig.env;
|
||||
}
|
||||
|
||||
private _getXtermTheme(theme?: ITheme): any {
|
||||
if (!theme) {
|
||||
theme = this._themeService.getTheme();
|
||||
@@ -1420,8 +1445,7 @@ export class TerminalInstance implements ITerminalInstance {
|
||||
}
|
||||
|
||||
public toggleEscapeSequenceLogging(): void {
|
||||
this._xterm._core.debug = !this._xterm._core.debug;
|
||||
this._xterm.setOption('debug', this._xterm._core.debug);
|
||||
this._xterm.setOption('logLevel', 'debug');
|
||||
}
|
||||
|
||||
public getInitialCwd(): Promise<string> {
|
||||
|
||||
Reference in New Issue
Block a user