mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-31 01:00:29 -04:00
Merge from vscode c58aaab8a1cc22a7139b761166a0d4f37d41e998 (#7880)
* Merge from vscode c58aaab8a1cc22a7139b761166a0d4f37d41e998 * fix pipelines * fix strict-null-checks * add missing files
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, 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, TitleEventSource, TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { IShellLaunchConfig, ITerminalDimensions, 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, TitleEventSource, TERMINAL_COMMAND_ID, LEGACY_CONSOLE_MODE_EXIT_CODE } 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 { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/terminalConfigHelper';
|
||||
import { TerminalLinkHandler } from 'vs/workbench/contrib/terminal/browser/terminalLinkHandler';
|
||||
@@ -38,6 +38,7 @@ import { SearchAddon, ISearchOptions } from 'xterm-addon-search';
|
||||
import { CommandTrackerAddon } from 'vs/workbench/contrib/terminal/browser/addons/commandTrackerAddon';
|
||||
import { NavigationModeAddon } from 'vs/workbench/contrib/terminal/browser/addons/navigationModeAddon';
|
||||
import { XTermCore } from 'vs/workbench/contrib/terminal/browser/xterm-private';
|
||||
import { IEditorOptions } from 'vs/editor/common/config/editorOptions';
|
||||
|
||||
// How long in milliseconds should an average frame take to render for a notification to appear
|
||||
// which suggests the fallback DOM-based renderer
|
||||
@@ -232,8 +233,8 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
public get commandTracker(): CommandTrackerAddon | undefined { return this._commandTrackerAddon; }
|
||||
public get navigationMode(): INavigationMode | undefined { return this._navigationModeAddon; }
|
||||
|
||||
private readonly _onExit = new Emitter<number>();
|
||||
public get onExit(): Event<number> { return this._onExit.event; }
|
||||
private readonly _onExit = new Emitter<number | undefined>();
|
||||
public get onExit(): Event<number | undefined> { return this._onExit.event; }
|
||||
private readonly _onDisposed = new Emitter<ITerminalInstance>();
|
||||
public get onDisposed(): Event<ITerminalInstance> { return this._onDisposed.event; }
|
||||
private readonly _onFocused = new Emitter<ITerminalInstance>();
|
||||
@@ -258,7 +259,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
public constructor(
|
||||
private readonly _terminalFocusContextKey: IContextKey<boolean>,
|
||||
private readonly _configHelper: TerminalConfigHelper,
|
||||
private _container: HTMLElement,
|
||||
private _container: HTMLElement | undefined,
|
||||
private _shellLaunchConfig: IShellLaunchConfig,
|
||||
@ITerminalInstanceService private readonly _terminalInstanceService: ITerminalInstanceService,
|
||||
@IContextKeyService private readonly _contextKeyService: IContextKeyService,
|
||||
@@ -408,14 +409,6 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
// The panel is minimized
|
||||
if (!this._isVisible) {
|
||||
return TerminalInstance._lastKnownCanvasDimensions;
|
||||
} else {
|
||||
// Trigger scroll event manually so that the viewport's scroll area is synced. This
|
||||
// needs to happen otherwise its scrollTop value is invalid when the panel is toggled as
|
||||
// it gets removed and then added back to the DOM (resetting scrollTop to 0).
|
||||
// Upstream issue: https://github.com/sourcelair/xterm.js/issues/291
|
||||
if (this._xterm && this._xtermCore) {
|
||||
this._xtermCore._onScroll.fire(this._xterm.buffer.viewportY);
|
||||
}
|
||||
}
|
||||
|
||||
if (!this._wrapperElement) {
|
||||
@@ -455,6 +448,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
const Terminal = await this._getXtermConstructor();
|
||||
const font = this._configHelper.getFont(undefined, true);
|
||||
const config = this._configHelper.config;
|
||||
const fastScrollSensitivity = this._configurationService.getValue<IEditorOptions>('editor.fastScrollSensitivity').fastScrollSensitivity;
|
||||
const xterm = new Terminal({
|
||||
scrollback: config.scrollback,
|
||||
theme: this._getXtermTheme(),
|
||||
@@ -469,6 +463,8 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
macOptionIsMeta: config.macOptionIsMeta,
|
||||
macOptionClickForcesSelection: config.macOptionClickForcesSelection,
|
||||
rightClickSelectsWord: config.rightClickBehavior === 'selectWord',
|
||||
fastScrollModifier: 'alt',
|
||||
fastScrollSensitivity,
|
||||
// TODO: Guess whether to use canvas or dom better
|
||||
rendererType: config.rendererType === 'auto' ? 'canvas' : config.rendererType
|
||||
});
|
||||
@@ -507,7 +503,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
return false;
|
||||
});
|
||||
}
|
||||
this._linkHandler = this._instantiationService.createInstance(TerminalLinkHandler, this._xterm, this._processManager, this._configHelper);
|
||||
this._linkHandler = this._instantiationService.createInstance(TerminalLinkHandler, xterm, this._processManager, this._configHelper);
|
||||
});
|
||||
|
||||
this._commandTrackerAddon = new CommandTrackerAddon();
|
||||
@@ -548,7 +544,9 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
}
|
||||
|
||||
// The container changed, reattach
|
||||
this._container.removeChild(this._wrapperElement);
|
||||
if (this._container) {
|
||||
this._container.removeChild(this._wrapperElement);
|
||||
}
|
||||
this._container = container;
|
||||
this._container.appendChild(this._wrapperElement);
|
||||
}
|
||||
@@ -567,7 +565,14 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
// Attach the xterm object to the DOM, exposing it to the smoke tests
|
||||
this._wrapperElement.xterm = this._xterm;
|
||||
|
||||
this._wrapperElement.appendChild(this._xtermElement);
|
||||
this._container.appendChild(this._wrapperElement);
|
||||
xterm.open(this._xtermElement);
|
||||
|
||||
if (!xterm.element || !xterm.textarea) {
|
||||
throw new Error('xterm elements not set after open');
|
||||
}
|
||||
|
||||
xterm.textarea.addEventListener('focus', () => this._onFocus.fire(this));
|
||||
xterm.attachCustomKeyEventHandler((event: KeyboardEvent): boolean => {
|
||||
// Disable all input if the terminal is exiting
|
||||
@@ -579,7 +584,8 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
// within commandsToSkipShell
|
||||
const standardKeyboardEvent = new StandardKeyboardEvent(event);
|
||||
const resolveResult = this._keybindingService.softDispatch(standardKeyboardEvent, standardKeyboardEvent.target);
|
||||
if (resolveResult && this._skipTerminalCommands.some(k => k === resolveResult.commandId)) {
|
||||
const allowChords = resolveResult && resolveResult.enterChord && this._configHelper.config.allowChords;
|
||||
if (allowChords || resolveResult && this._skipTerminalCommands.some(k => k === resolveResult.commandId)) {
|
||||
event.preventDefault();
|
||||
return false;
|
||||
}
|
||||
@@ -644,9 +650,6 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
this._refreshSelectionContextKey();
|
||||
}));
|
||||
|
||||
this._wrapperElement.appendChild(this._xtermElement);
|
||||
this._container.appendChild(this._wrapperElement);
|
||||
|
||||
const widgetManager = new TerminalWidgetManager(this._wrapperElement);
|
||||
this._widgetManager = widgetManager;
|
||||
this._processManager.onProcessReady(() => {
|
||||
@@ -801,7 +804,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
if (this._wrapperElement.xterm) {
|
||||
this._wrapperElement.xterm = undefined;
|
||||
}
|
||||
if (this._wrapperElement.parentElement) {
|
||||
if (this._wrapperElement.parentElement && this._container) {
|
||||
this._container.removeChild(this._wrapperElement);
|
||||
}
|
||||
}
|
||||
@@ -900,6 +903,8 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
// necessary if the number of rows in the terminal has decreased while it was in the
|
||||
// background since scrollTop changes take no effect but the terminal's position does
|
||||
// change since the number of visible rows decreases.
|
||||
// This can likely be removed after https://github.com/xtermjs/xterm.js/issues/291 is
|
||||
// fixed upstream.
|
||||
this._xtermCore._onScroll.fire(this._xterm.buffer.viewportY);
|
||||
if (this._container && this._container.parentElement) {
|
||||
// Force a layout when the instance becomes invisible. This is particularly important
|
||||
@@ -1047,6 +1052,8 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
exitCodeMessage = nls.localize('terminal.integrated.exitedWithInvalidPathDirectory', 'The terminal shell path "{0}" is a directory', this._shellLaunchConfig.executable);
|
||||
} else if (exitCode === SHELL_CWD_INVALID_EXIT_CODE && this._shellLaunchConfig.cwd) {
|
||||
exitCodeMessage = nls.localize('terminal.integrated.exitedWithInvalidCWD', 'The terminal shell CWD "{0}" does not exist', this._shellLaunchConfig.cwd.toString());
|
||||
} else if (exitCode === LEGACY_CONSOLE_MODE_EXIT_CODE) {
|
||||
exitCodeMessage = nls.localize('terminal.integrated.legacyConsoleModeError', 'The terminal failed to launch properly because your system has legacy console mode enabled, uncheck "Use legacy console" cmd.exe\'s properties to fix this.');
|
||||
} else if (this._processManager.processState === ProcessState.KILLED_DURING_LAUNCH) {
|
||||
let args = '';
|
||||
if (typeof this._shellLaunchConfig.args === 'string') {
|
||||
@@ -1105,11 +1112,11 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
}
|
||||
}
|
||||
|
||||
this._onExit.fire(exitCode || 0);
|
||||
this._onExit.fire(exitCode);
|
||||
}
|
||||
|
||||
private _attachPressAnyKeyToCloseListener(xterm: XTermTerminal) {
|
||||
if (!this._pressAnyKeyToCloseListener) {
|
||||
if (xterm.textarea && !this._pressAnyKeyToCloseListener) {
|
||||
this._pressAnyKeyToCloseListener = dom.addDisposableListener(xterm.textarea, 'keypress', (event: KeyboardEvent) => {
|
||||
if (this._pressAnyKeyToCloseListener) {
|
||||
this._pressAnyKeyToCloseListener.dispose();
|
||||
@@ -1240,6 +1247,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
this._safeSetOption('macOptionClickForcesSelection', config.macOptionClickForcesSelection);
|
||||
this._safeSetOption('rightClickSelectsWord', config.rightClickBehavior === 'selectWord');
|
||||
this._safeSetOption('rendererType', config.rendererType === 'auto' ? 'canvas' : config.rendererType);
|
||||
this._safeSetOption('fastScrollSensitivity', this._configurationService.getValue<IEditorOptions>('editor.fastScrollSensitivity').fastScrollSensitivity);
|
||||
}
|
||||
|
||||
public updateAccessibilitySupport(): void {
|
||||
@@ -1312,7 +1320,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._xterm) {
|
||||
if (this._xterm && this._xterm.element) {
|
||||
this._xterm.element.style.width = terminalWidth + 'px';
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user