mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-30 16:50:30 -04:00
Merge from vscode 7eaf220cafb9d9e901370ffce02229171cbf3ea6
This commit is contained in:
committed by
Anthony Dresser
parent
39d9eed585
commit
a63578e6f7
@@ -3,7 +3,7 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Terminal, IMarker, ITerminalAddon } from 'xterm';
|
||||
import type { Terminal, IMarker, ITerminalAddon } from 'xterm';
|
||||
import { ICommandTracker } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { Terminal, ITerminalAddon } from 'xterm';
|
||||
import type { Terminal, ITerminalAddon } from 'xterm';
|
||||
import { addDisposableListener } from 'vs/base/browser/dom';
|
||||
import { INavigationMode } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { ILinkProvider, ILink } from 'xterm';
|
||||
import type { ILinkProvider, ILink } from 'xterm';
|
||||
import { TerminalLink } from 'vs/workbench/contrib/terminal/browser/links/terminalLink';
|
||||
|
||||
export abstract class TerminalBaseLinkProvider implements ILinkProvider {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Terminal, IViewportRange, IBufferLine } from 'xterm';
|
||||
import type { Terminal, IViewportRange, IBufferLine } from 'xterm';
|
||||
import { getXtermLineContent, convertLinkRangeToBuffer } from 'vs/workbench/contrib/terminal/browser/links/terminalLinkHelpers';
|
||||
import { TerminalLink } from 'vs/workbench/contrib/terminal/browser/links/terminalLink';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IViewportRange, IBufferRange, ILink, ILinkDecorations } from 'xterm';
|
||||
import type { IViewportRange, IBufferRange, ILink, ILinkDecorations } from 'xterm';
|
||||
import { DisposableStore } from 'vs/base/common/lifecycle';
|
||||
import * as dom from 'vs/base/browser/dom';
|
||||
import { RunOnceScheduler } from 'vs/base/common/async';
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IViewportRange, IBufferRange, IBufferLine, IBuffer, IBufferCellPosition } from 'xterm';
|
||||
import type { IViewportRange, IBufferRange, IBufferLine, IBuffer, IBufferCellPosition } from 'xterm';
|
||||
import { IRange } from 'vs/editor/common/core/range';
|
||||
|
||||
export function convertLinkRangeToBuffer(lines: IBufferLine[], bufferWidth: number, range: IRange, startLine: number) {
|
||||
@@ -54,6 +54,12 @@ export function convertLinkRangeToBuffer(lines: IBufferLine[], bufferWidth: numb
|
||||
const startLineOffset = (y === startWrappedLineCount - 1 ? startOffset : 0);
|
||||
let lineOffset = 0;
|
||||
const line = lines[y];
|
||||
// Sanity check for line, apparently this can happen but it's not clear under what
|
||||
// circumstances this happens. Continue on, skipping the remainder of start offset if this
|
||||
// happens to minimize impact.
|
||||
if (!line) {
|
||||
break;
|
||||
}
|
||||
for (let x = start; x < Math.min(bufferWidth, lineLength + lineOffset + startLineOffset); x++) {
|
||||
const cell = line.getCell(x)!;
|
||||
const width = cell.getWidth();
|
||||
|
||||
@@ -13,7 +13,7 @@ import { ITerminalProcessManager, ITerminalConfiguration, TERMINAL_CONFIG_SECTIO
|
||||
import { ITextEditorSelection } from 'vs/platform/editor/common/editor';
|
||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { IFileService } from 'vs/platform/files/common/files';
|
||||
import { Terminal, IViewportRange, ILinkProvider } from 'xterm';
|
||||
import type { Terminal, IViewportRange, ILinkProvider } from 'xterm';
|
||||
import { REMOTE_HOST_SCHEME } from 'vs/platform/remote/common/remoteHosts';
|
||||
import { posix, win32 } from 'vs/base/common/path';
|
||||
import { ITerminalExternalLinkProvider, ITerminalInstance } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Terminal, IViewportRange, IBufferLine } from 'xterm';
|
||||
import type { Terminal, IViewportRange, IBufferLine } from 'xterm';
|
||||
import { ILinkComputerTarget, LinkComputer } from 'vs/editor/common/modes/linkComputer';
|
||||
import { getXtermLineContent, convertLinkRangeToBuffer } from 'vs/workbench/contrib/terminal/browser/links/terminalLinkHelpers';
|
||||
import { TerminalLink, OPEN_FILE_LABEL } from 'vs/workbench/contrib/terminal/browser/links/terminalLink';
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Terminal, IViewportRange, IBufferLine } from 'xterm';
|
||||
import type { Terminal, IViewportRange, IBufferLine } from 'xterm';
|
||||
import { getXtermLineContent, convertLinkRangeToBuffer } from 'vs/workbench/contrib/terminal/browser/links/terminalLinkHelpers';
|
||||
import { OperatingSystem } from 'vs/base/common/platform';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Terminal, IViewportRange } from 'xterm';
|
||||
import type { Terminal, IViewportRange } from 'xterm';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { ITerminalConfiguration, TERMINAL_CONFIG_SECTION } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { TerminalLink } from 'vs/workbench/contrib/terminal/browser/links/terminalLink';
|
||||
|
||||
@@ -196,3 +196,7 @@
|
||||
padding: 0 22px 0 6px;
|
||||
}
|
||||
|
||||
/* HACK: Can remove when fixed upstream https://github.com/xtermjs/xterm.js/issues/3058 */
|
||||
.xterm-helper-textarea {
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ import { Extensions as ActionExtensions, IWorkbenchActionRegistry } from 'vs/wor
|
||||
import { Extensions as ViewContainerExtensions, IViewContainersRegistry, ViewContainerLocation, IViewsRegistry } from 'vs/workbench/common/views';
|
||||
import { registerTerminalActions, ClearTerminalAction, CopyTerminalSelectionAction, CreateNewTerminalAction, KillTerminalAction, SelectAllTerminalAction, SelectDefaultShellWindowsTerminalAction, SplitInActiveWorkspaceTerminalAction, SplitTerminalAction, TerminalPasteAction, ToggleTerminalAction, terminalSendSequenceCommand } from 'vs/workbench/contrib/terminal/browser/terminalActions';
|
||||
import { TerminalViewPane } from 'vs/workbench/contrib/terminal/browser/terminalView';
|
||||
import { KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE_KEY, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, TERMINAL_VIEW_ID, TERMINAL_ACTION_CATEGORY, TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE_KEY, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, TERMINAL_VIEW_ID, TERMINAL_ACTION_CATEGORY, TERMINAL_COMMAND_ID, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { registerColors } from 'vs/workbench/contrib/terminal/common/terminalColorRegistry';
|
||||
import { setupTerminalCommands } from 'vs/workbench/contrib/terminal/browser/terminalCommands';
|
||||
import { setupTerminalMenu } from 'vs/workbench/contrib/terminal/common/terminalMenu';
|
||||
@@ -84,7 +84,7 @@ Registry.as<IViewsRegistry>(ViewContainerExtensions.ViewsRegistry).registerViews
|
||||
const actionRegistry = Registry.as<IWorkbenchActionRegistry>(ActionExtensions.WorkbenchActions);
|
||||
registerTerminalActions();
|
||||
const category = TERMINAL_ACTION_CATEGORY;
|
||||
actionRegistry.registerWorkbenchAction(SyncActionDescriptor.from(KillTerminalAction), 'Terminal: Kill the Active Terminal Instance', category);
|
||||
actionRegistry.registerWorkbenchAction(SyncActionDescriptor.from(KillTerminalAction), 'Terminal: Kill the Active Terminal Instance', category, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED);
|
||||
actionRegistry.registerWorkbenchAction(SyncActionDescriptor.from(CreateNewTerminalAction, {
|
||||
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_BACKTICK,
|
||||
mac: { primary: KeyMod.WinCtrl | KeyMod.Shift | KeyCode.US_BACKTICK }
|
||||
@@ -97,7 +97,7 @@ actionRegistry.registerWorkbenchAction(SyncActionDescriptor.from(SelectAllTermin
|
||||
// behavior anyway when handed to xterm.js, having this handled by VS Code
|
||||
// makes it easier for users to see how it works though.
|
||||
mac: { primary: KeyMod.CtrlCmd | KeyCode.KEY_A }
|
||||
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Select All', category);
|
||||
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Select All', category, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED);
|
||||
actionRegistry.registerWorkbenchAction(SyncActionDescriptor.from(ToggleTerminalAction, {
|
||||
primary: KeyMod.CtrlCmd | KeyCode.US_BACKTICK,
|
||||
mac: { primary: KeyMod.WinCtrl | KeyCode.US_BACKTICK }
|
||||
@@ -107,16 +107,16 @@ actionRegistry.registerWorkbenchAction(SyncActionDescriptor.from(ToggleTerminalA
|
||||
actionRegistry.registerWorkbenchAction(SyncActionDescriptor.from(ClearTerminalAction, {
|
||||
primary: 0,
|
||||
mac: { primary: KeyMod.CtrlCmd | KeyCode.KEY_K }
|
||||
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KeybindingWeight.WorkbenchContrib + 1), 'Terminal: Clear', category);
|
||||
actionRegistry.registerWorkbenchAction(SyncActionDescriptor.from(SelectDefaultShellWindowsTerminalAction), 'Terminal: Select Default Shell', category);
|
||||
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KeybindingWeight.WorkbenchContrib + 1), 'Terminal: Clear', category, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED);
|
||||
actionRegistry.registerWorkbenchAction(SyncActionDescriptor.from(SelectDefaultShellWindowsTerminalAction), 'Terminal: Select Default Shell', category, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED);
|
||||
actionRegistry.registerWorkbenchAction(SyncActionDescriptor.from(SplitTerminalAction, {
|
||||
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_5,
|
||||
mac: {
|
||||
primary: KeyMod.CtrlCmd | KeyCode.US_BACKSLASH,
|
||||
secondary: [KeyMod.WinCtrl | KeyMod.Shift | KeyCode.KEY_5]
|
||||
}
|
||||
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Split Terminal', category);
|
||||
actionRegistry.registerWorkbenchAction(SyncActionDescriptor.from(SplitInActiveWorkspaceTerminalAction), 'Terminal: Split Terminal (In Active Workspace)', category);
|
||||
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Split Terminal', category, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED);
|
||||
actionRegistry.registerWorkbenchAction(SyncActionDescriptor.from(SplitInActiveWorkspaceTerminalAction), 'Terminal: Split Terminal (In Active Workspace)', category, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED);
|
||||
|
||||
// Commands might be affected by Web restrictons
|
||||
if (BrowserFeatures.clipboard.writeText) {
|
||||
@@ -124,7 +124,7 @@ if (BrowserFeatures.clipboard.writeText) {
|
||||
primary: KeyMod.CtrlCmd | KeyCode.KEY_C,
|
||||
win: { primary: KeyMod.CtrlCmd | KeyCode.KEY_C, secondary: [KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_C] },
|
||||
linux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_C }
|
||||
}, ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, KEYBINDING_CONTEXT_TERMINAL_FOCUS)), 'Terminal: Copy Selection', category);
|
||||
}, ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, KEYBINDING_CONTEXT_TERMINAL_FOCUS)), 'Terminal: Copy Selection', category, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED);
|
||||
}
|
||||
|
||||
function registerSendSequenceKeybinding(text: string, rule: { when?: ContextKeyExpression } & IKeybindings): void {
|
||||
@@ -149,7 +149,7 @@ if (BrowserFeatures.clipboard.readText) {
|
||||
primary: KeyMod.CtrlCmd | KeyCode.KEY_V,
|
||||
win: { primary: KeyMod.CtrlCmd | KeyCode.KEY_V, secondary: [KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_V] },
|
||||
linux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_V }
|
||||
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Paste into Active Terminal', category);
|
||||
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Paste into Active Terminal', category, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED);
|
||||
// An extra Windows-only ctrl+v keybinding is used for pwsh that sends ctrl+v directly to the
|
||||
// shell, this gets handled by PSReadLine which properly handles multi-line pastes. This is
|
||||
// disabled in accessibility mode as PowerShell does not run PSReadLine when it detects a screen
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Terminal as XTermTerminal } from 'xterm';
|
||||
import { SearchAddon as XTermSearchAddon } from 'xterm-addon-search';
|
||||
import { Unicode11Addon as XTermUnicode11Addon } from 'xterm-addon-unicode11';
|
||||
import { WebglAddon as XTermWebglAddon } from 'xterm-addon-webgl';
|
||||
import type { Terminal as XTermTerminal } from 'xterm';
|
||||
import type { SearchAddon as XTermSearchAddon } from 'xterm-addon-search';
|
||||
import type { Unicode11Addon as XTermUnicode11Addon } from 'xterm-addon-unicode11';
|
||||
import type { WebglAddon as XTermWebglAddon } from 'xterm-addon-webgl';
|
||||
import { IWindowsShellHelper, ITerminalConfigHelper, ITerminalChildProcess, IShellLaunchConfig, IDefaultShellAndArgsRequest, ISpawnExtHostProcessRequest, IStartExtensionTerminalRequest, IAvailableShellsRequest, ITerminalProcessExtHostProxy, ICommandTracker, INavigationMode, TitleEventSource, ITerminalDimensions, ITerminalLaunchError, ITerminalNativeWindowsDelegate, LinuxDistro } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IProcessEnvironment, Platform } from 'vs/base/common/platform';
|
||||
@@ -76,6 +76,7 @@ export interface ITerminalService {
|
||||
configHelper: ITerminalConfigHelper;
|
||||
terminalInstances: ITerminalInstance[];
|
||||
terminalTabs: ITerminalTab[];
|
||||
isProcessSupportRegistered: boolean;
|
||||
|
||||
onActiveTabChanged: Event<void>;
|
||||
onTabDisposed: Event<ITerminalTab>;
|
||||
@@ -90,6 +91,7 @@ export interface ITerminalService {
|
||||
onInstanceTitleChanged: Event<ITerminalInstance>;
|
||||
onActiveInstanceChanged: Event<ITerminalInstance | undefined>;
|
||||
onRequestAvailableShells: Event<IAvailableShellsRequest>;
|
||||
onDidRegisterProcessSupport: Event<void>;
|
||||
|
||||
/**
|
||||
* Creates a terminal.
|
||||
@@ -136,6 +138,7 @@ export interface ITerminalService {
|
||||
findNext(): void;
|
||||
findPrevious(): void;
|
||||
|
||||
registerProcessSupport(isSupported: boolean): void;
|
||||
/**
|
||||
* Registers a link provider that enables integrators to add links to the terminal.
|
||||
* @param linkProvider When registered, the link provider is asked whenever a cell is hovered
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import { Action, IAction } from 'vs/base/common/actions';
|
||||
import { EndOfLinePreference } from 'vs/editor/common/model';
|
||||
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
|
||||
import { TERMINAL_VIEW_ID, ITerminalConfigHelper, TitleEventSource, TERMINAL_COMMAND_ID, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED, TERMINAL_ACTION_CATEGORY, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, KEYBINDING_CONTEXT_TERMINAL_FIND_NOT_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { TERMINAL_VIEW_ID, ITerminalConfigHelper, TitleEventSource, TERMINAL_COMMAND_ID, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED, TERMINAL_ACTION_CATEGORY, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, KEYBINDING_CONTEXT_TERMINAL_FIND_NOT_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
|
||||
import { attachSelectBoxStyler, attachStylerCallback } from 'vs/platform/theme/common/styler';
|
||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
@@ -84,7 +84,7 @@ export class ToggleTerminalAction extends ToggleViewAction {
|
||||
}
|
||||
|
||||
async run() {
|
||||
if (this.terminalService.terminalInstances.length === 0) {
|
||||
if (this.terminalService.isProcessSupportRegistered && this.terminalService.terminalInstances.length === 0) {
|
||||
// If there is not yet an instance attempt to create it here so that we can suggest a
|
||||
// new shell on Windows (and not do so when the panel is restored on reload).
|
||||
const newTerminalInstance = this.terminalService.createTerminal(undefined);
|
||||
@@ -201,23 +201,25 @@ export class CreateNewTerminalAction extends Action {
|
||||
}
|
||||
}
|
||||
|
||||
let instance: ITerminalInstance | undefined;
|
||||
if (folders.length <= 1) {
|
||||
// Allow terminal service to handle the path when there is only a
|
||||
// single root
|
||||
instance = this._terminalService.createTerminal(undefined);
|
||||
} else {
|
||||
const options: IPickOptions<IQuickPickItem> = {
|
||||
placeHolder: localize('workbench.action.terminal.newWorkspacePlaceholder', "Select current working directory for new terminal")
|
||||
};
|
||||
const workspace = await this._commandService.executeCommand(PICK_WORKSPACE_FOLDER_COMMAND_ID, [options]);
|
||||
if (!workspace) {
|
||||
// Don't create the instance if the workspace picker was canceled
|
||||
return;
|
||||
if (this._terminalService.isProcessSupportRegistered) {
|
||||
let instance: ITerminalInstance | undefined;
|
||||
if (folders.length <= 1) {
|
||||
// Allow terminal service to handle the path when there is only a
|
||||
// single root
|
||||
instance = this._terminalService.createTerminal(undefined);
|
||||
} else {
|
||||
const options: IPickOptions<IQuickPickItem> = {
|
||||
placeHolder: localize('workbench.action.terminal.newWorkspacePlaceholder', "Select current working directory for new terminal")
|
||||
};
|
||||
const workspace = await this._commandService.executeCommand(PICK_WORKSPACE_FOLDER_COMMAND_ID, [options]);
|
||||
if (!workspace) {
|
||||
// Don't create the instance if the workspace picker was canceled
|
||||
return;
|
||||
}
|
||||
instance = this._terminalService.createTerminal({ cwd: workspace.uri });
|
||||
}
|
||||
instance = this._terminalService.createTerminal({ cwd: workspace.uri });
|
||||
this._terminalService.setActiveInstance(instance);
|
||||
}
|
||||
this._terminalService.setActiveInstance(instance);
|
||||
await this._terminalService.showPanel(true);
|
||||
}
|
||||
}
|
||||
@@ -367,7 +369,7 @@ export class SwitchTerminalActionViewItem extends SelectActionViewItem {
|
||||
this._register(_terminalService.onActiveTabChanged(this._updateItems, this));
|
||||
this._register(_terminalService.onInstanceTitleChanged(this._updateItems, this));
|
||||
this._register(_terminalService.onTabDisposed(this._updateItems, this));
|
||||
this._register(attachSelectBoxStyler(this.selectBox, _themeService));
|
||||
this._register(attachSelectBoxStyler(this.selectBox, this._themeService));
|
||||
}
|
||||
|
||||
render(container: HTMLElement): void {
|
||||
@@ -442,11 +444,13 @@ export function registerTerminalActions() {
|
||||
}
|
||||
async run(accessor: ServicesAccessor) {
|
||||
const terminalService = accessor.get(ITerminalService);
|
||||
const instance = terminalService.createTerminal(undefined);
|
||||
if (!instance) {
|
||||
return;
|
||||
if (terminalService.isProcessSupportRegistered) {
|
||||
const instance = terminalService.createTerminal(undefined);
|
||||
if (!instance) {
|
||||
return;
|
||||
}
|
||||
terminalService.setActiveInstance(instance);
|
||||
}
|
||||
terminalService.setActiveInstance(instance);
|
||||
await terminalService.showPanel(true);
|
||||
}
|
||||
});
|
||||
@@ -466,7 +470,8 @@ export function registerTerminalActions() {
|
||||
},
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
async run(accessor: ServicesAccessor) {
|
||||
@@ -491,7 +496,8 @@ export function registerTerminalActions() {
|
||||
},
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
async run(accessor: ServicesAccessor) {
|
||||
@@ -512,7 +518,8 @@ export function registerTerminalActions() {
|
||||
mac: { primary: KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.LeftArrow },
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
async run(accessor: ServicesAccessor) {
|
||||
@@ -531,7 +538,8 @@ export function registerTerminalActions() {
|
||||
mac: { primary: KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.RightArrow },
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
async run(accessor: ServicesAccessor) {
|
||||
@@ -549,7 +557,8 @@ export function registerTerminalActions() {
|
||||
mac: { primary: KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.UpArrow },
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
async run(accessor: ServicesAccessor) {
|
||||
@@ -567,7 +576,8 @@ export function registerTerminalActions() {
|
||||
mac: { primary: KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.DownArrow },
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
async run(accessor: ServicesAccessor) {
|
||||
@@ -580,7 +590,8 @@ export function registerTerminalActions() {
|
||||
id: TERMINAL_COMMAND_ID.FOCUS,
|
||||
title: { value: localize('workbench.action.terminal.focus', "Focus Terminal"), original: 'Focus Terminal' },
|
||||
f1: true,
|
||||
category
|
||||
category,
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
async run(accessor: ServicesAccessor) {
|
||||
@@ -599,7 +610,8 @@ export function registerTerminalActions() {
|
||||
id: TERMINAL_COMMAND_ID.FOCUS_NEXT,
|
||||
title: { value: localize('workbench.action.terminal.focusNext', "Focus Next Terminal"), original: 'Focus Next Terminal' },
|
||||
f1: true,
|
||||
category
|
||||
category,
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
async run(accessor: ServicesAccessor) {
|
||||
@@ -614,7 +626,8 @@ export function registerTerminalActions() {
|
||||
id: TERMINAL_COMMAND_ID.FOCUS_PREVIOUS,
|
||||
title: { value: localize('workbench.action.terminal.focusPrevious', "Focus Previous Terminal"), original: 'Focus Previous Terminal' },
|
||||
f1: true,
|
||||
category
|
||||
category,
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
async run(accessor: ServicesAccessor) {
|
||||
@@ -629,7 +642,8 @@ export function registerTerminalActions() {
|
||||
id: TERMINAL_COMMAND_ID.RUN_SELECTED_TEXT,
|
||||
title: { value: localize('workbench.action.terminal.runSelectedText', "Run Selected Text In Active Terminal"), original: 'Run Selected Text In Active Terminal' },
|
||||
f1: true,
|
||||
category
|
||||
category,
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
async run(accessor: ServicesAccessor) {
|
||||
@@ -659,7 +673,8 @@ export function registerTerminalActions() {
|
||||
id: TERMINAL_COMMAND_ID.RUN_ACTIVE_FILE,
|
||||
title: { value: localize('workbench.action.terminal.runActiveFile', "Run Active File In Active Terminal"), original: 'Run Active File In Active Terminal' },
|
||||
f1: true,
|
||||
category
|
||||
category,
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
async run(accessor: ServicesAccessor) {
|
||||
@@ -699,7 +714,8 @@ export function registerTerminalActions() {
|
||||
linux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.DownArrow },
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -718,7 +734,8 @@ export function registerTerminalActions() {
|
||||
mac: { primary: KeyCode.PageDown },
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -737,7 +754,8 @@ export function registerTerminalActions() {
|
||||
linux: { primary: KeyMod.Shift | KeyCode.End },
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -756,7 +774,8 @@ export function registerTerminalActions() {
|
||||
linux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.UpArrow },
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -775,7 +794,8 @@ export function registerTerminalActions() {
|
||||
mac: { primary: KeyCode.PageUp },
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -794,7 +814,8 @@ export function registerTerminalActions() {
|
||||
linux: { primary: KeyMod.Shift | KeyCode.Home },
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -812,7 +833,8 @@ export function registerTerminalActions() {
|
||||
primary: KeyCode.Escape,
|
||||
when: ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS, CONTEXT_ACCESSIBILITY_MODE_ENABLED),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -833,7 +855,8 @@ export function registerTerminalActions() {
|
||||
ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_FOCUS, CONTEXT_ACCESSIBILITY_MODE_ENABLED)
|
||||
),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -854,7 +877,8 @@ export function registerTerminalActions() {
|
||||
ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_FOCUS, CONTEXT_ACCESSIBILITY_MODE_ENABLED)
|
||||
),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -872,7 +896,8 @@ export function registerTerminalActions() {
|
||||
primary: KeyCode.Escape,
|
||||
when: ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, KEYBINDING_CONTEXT_TERMINAL_FIND_NOT_VISIBLE),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -888,7 +913,8 @@ export function registerTerminalActions() {
|
||||
id: TERMINAL_COMMAND_ID.MANAGE_WORKSPACE_SHELL_PERMISSIONS,
|
||||
title: { value: localize('workbench.action.terminal.manageWorkspaceShellPermissions', "Manage Workspace Shell Permissions"), original: 'Manage Workspace Shell Permissions' },
|
||||
f1: true,
|
||||
category
|
||||
category,
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -901,7 +927,8 @@ export function registerTerminalActions() {
|
||||
id: TERMINAL_COMMAND_ID.RENAME,
|
||||
title: { value: localize('workbench.action.terminal.rename', "Rename"), original: 'Rename' },
|
||||
f1: true,
|
||||
category
|
||||
category,
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
async run(accessor: ServicesAccessor) {
|
||||
@@ -927,7 +954,8 @@ export function registerTerminalActions() {
|
||||
primary: KeyMod.CtrlCmd | KeyCode.KEY_F,
|
||||
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED, KEYBINDING_CONTEXT_TERMINAL_FOCUS),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -946,7 +974,8 @@ export function registerTerminalActions() {
|
||||
secondary: [KeyMod.Shift | KeyCode.Escape],
|
||||
when: ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -959,7 +988,8 @@ export function registerTerminalActions() {
|
||||
id: TERMINAL_COMMAND_ID.QUICK_OPEN_TERM,
|
||||
title: { value: localize('quickAccessTerminal', "Switch Active Terminal"), original: 'Switch Active Terminal' },
|
||||
f1: true,
|
||||
category
|
||||
category,
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -977,7 +1007,8 @@ export function registerTerminalActions() {
|
||||
mac: { primary: KeyMod.CtrlCmd | KeyCode.UpArrow },
|
||||
when: ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_FOCUS, CONTEXT_ACCESSIBILITY_MODE_ENABLED.negate()),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -998,7 +1029,8 @@ export function registerTerminalActions() {
|
||||
mac: { primary: KeyMod.CtrlCmd | KeyCode.DownArrow },
|
||||
when: ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_FOCUS, CONTEXT_ACCESSIBILITY_MODE_ENABLED.negate()),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -1019,7 +1051,8 @@ export function registerTerminalActions() {
|
||||
mac: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.UpArrow },
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -1040,7 +1073,8 @@ export function registerTerminalActions() {
|
||||
mac: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.DownArrow },
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -1056,7 +1090,8 @@ export function registerTerminalActions() {
|
||||
id: TERMINAL_COMMAND_ID.SELECT_TO_PREVIOUS_LINE,
|
||||
title: { value: localize('workbench.action.terminal.selectToPreviousLine', "Select To Previous Line"), original: 'Select To Previous Line' },
|
||||
f1: true,
|
||||
category
|
||||
category,
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -1072,7 +1107,8 @@ export function registerTerminalActions() {
|
||||
id: TERMINAL_COMMAND_ID.SELECT_TO_NEXT_LINE,
|
||||
title: { value: localize('workbench.action.terminal.selectToNextLine', "Select To Next Line"), original: 'Select To Next Line' },
|
||||
f1: true,
|
||||
category
|
||||
category,
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -1088,7 +1124,8 @@ export function registerTerminalActions() {
|
||||
id: TERMINAL_COMMAND_ID.TOGGLE_ESCAPE_SEQUENCE_LOGGING,
|
||||
title: { value: localize('workbench.action.terminal.toggleEscapeSequenceLogging', "Toggle Escape Sequence Logging"), original: 'Toggle Escape Sequence Logging' },
|
||||
f1: true,
|
||||
category
|
||||
category,
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -1114,7 +1151,8 @@ export function registerTerminalActions() {
|
||||
},
|
||||
}
|
||||
}]
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor, args?: { text?: string }) {
|
||||
@@ -1143,16 +1181,19 @@ export function registerTerminalActions() {
|
||||
},
|
||||
}
|
||||
}]
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
async run(accessor: ServicesAccessor, args?: { cwd?: string }) {
|
||||
const terminalService = accessor.get(ITerminalService);
|
||||
const instance = terminalService.createTerminal({ cwd: args?.cwd });
|
||||
if (!instance) {
|
||||
return;
|
||||
if (terminalService.isProcessSupportRegistered) {
|
||||
const instance = terminalService.createTerminal({ cwd: args?.cwd });
|
||||
if (!instance) {
|
||||
return;
|
||||
}
|
||||
terminalService.setActiveInstance(instance);
|
||||
}
|
||||
terminalService.setActiveInstance(instance);
|
||||
return terminalService.showPanel(true);
|
||||
}
|
||||
});
|
||||
@@ -1179,7 +1220,8 @@ export function registerTerminalActions() {
|
||||
}
|
||||
}
|
||||
}]
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor, args?: { name?: string }) {
|
||||
@@ -1203,7 +1245,8 @@ export function registerTerminalActions() {
|
||||
mac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_R },
|
||||
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -1224,6 +1267,7 @@ export function registerTerminalActions() {
|
||||
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -1243,7 +1287,8 @@ export function registerTerminalActions() {
|
||||
mac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_C },
|
||||
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
},
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -1270,7 +1315,8 @@ export function registerTerminalActions() {
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
]
|
||||
],
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -1296,7 +1342,8 @@ export function registerTerminalActions() {
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED,
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
}
|
||||
]
|
||||
],
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -1309,7 +1356,8 @@ export function registerTerminalActions() {
|
||||
id: TERMINAL_COMMAND_ID.RELAUNCH,
|
||||
title: { value: localize('workbench.action.terminal.relaunch', "Relaunch Active Terminal"), original: 'Relaunch Active Terminal' },
|
||||
f1: true,
|
||||
category
|
||||
category,
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
@@ -1322,7 +1370,8 @@ export function registerTerminalActions() {
|
||||
id: TERMINAL_COMMAND_ID.SHOW_ENVIRONMENT_INFORMATION,
|
||||
title: { value: localize('workbench.action.terminal.showEnvironmentInformation', "Show Environment Information"), original: 'Show Environment Information' },
|
||||
f1: true,
|
||||
category
|
||||
category,
|
||||
precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
run(accessor: ServicesAccessor) {
|
||||
|
||||
@@ -32,9 +32,9 @@ import { TerminalLinkManager } from 'vs/workbench/contrib/terminal/browser/links
|
||||
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
|
||||
import { ITerminalInstanceService, ITerminalInstance, TerminalShellType, WindowsShellType, ITerminalExternalLinkProvider } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { TerminalProcessManager } from 'vs/workbench/contrib/terminal/browser/terminalProcessManager';
|
||||
import { Terminal as XTermTerminal, IBuffer, ITerminalAddon } from 'xterm';
|
||||
import { SearchAddon, ISearchOptions } from 'xterm-addon-search';
|
||||
import { Unicode11Addon } from 'xterm-addon-unicode11';
|
||||
import type { Terminal as XTermTerminal, IBuffer, ITerminalAddon } from 'xterm';
|
||||
import type { SearchAddon, ISearchOptions } from 'xterm-addon-search';
|
||||
import type { Unicode11Addon } from 'xterm-addon-unicode11';
|
||||
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';
|
||||
@@ -1128,9 +1128,9 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
|
||||
if (!reset) {
|
||||
// HACK: Force initialText to be non-falsy for reused terminals such that the
|
||||
// conptyInheritCursor flag is passed to the node-pty, this flag can cause a Window to hang
|
||||
// in Windows 10 1903 so we only want to use it when something is definitely written to the
|
||||
// terminal.
|
||||
// conptyInheritCursor flag is passed to the node-pty, this flag can cause a Window to stop
|
||||
// responding in Windows 10 1903 so we only want to use it when something is definitely written
|
||||
// to the terminal.
|
||||
shell.initialText = ' ';
|
||||
}
|
||||
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
|
||||
import { ITerminalInstanceService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { IWindowsShellHelper, ITerminalChildProcess, IDefaultShellAndArgsRequest } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { Terminal as XTermTerminal } from 'xterm';
|
||||
import { SearchAddon as XTermSearchAddon } from 'xterm-addon-search';
|
||||
import { Unicode11Addon as XTermUnicode11Addon } from 'xterm-addon-unicode11';
|
||||
import { WebglAddon as XTermWebglAddon } from 'xterm-addon-webgl';
|
||||
import type { Terminal as XTermTerminal } from 'xterm';
|
||||
import type { SearchAddon as XTermSearchAddon } from 'xterm-addon-search';
|
||||
import type { Unicode11Addon as XTermUnicode11Addon } from 'xterm-addon-unicode11';
|
||||
import type { WebglAddon as XTermWebglAddon } from 'xterm-addon-webgl';
|
||||
import { IProcessEnvironment } from 'vs/base/common/platform';
|
||||
import { Emitter, Event } from 'vs/base/common/event';
|
||||
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as nls from 'vs/nls';
|
||||
import { TERMINAL_VIEW_ID, IShellLaunchConfig, ITerminalConfigHelper, ISpawnExtHostProcessRequest, IStartExtensionTerminalRequest, IAvailableShellsRequest, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, ITerminalProcessExtHostProxy, IShellDefinition, LinuxDistro, KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE, ITerminalLaunchError, ITerminalNativeWindowsDelegate } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { TERMINAL_VIEW_ID, IShellLaunchConfig, ITerminalConfigHelper, ISpawnExtHostProcessRequest, IStartExtensionTerminalRequest, IAvailableShellsRequest, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, ITerminalProcessExtHostProxy, IShellDefinition, LinuxDistro, KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE, ITerminalLaunchError, ITerminalNativeWindowsDelegate } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
|
||||
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
|
||||
@@ -23,12 +23,13 @@ import { Event, Emitter } from 'vs/base/common/event';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { FindReplaceState } from 'vs/editor/contrib/find/findState';
|
||||
import { escapeNonWindowsPath } from 'vs/workbench/contrib/terminal/common/terminalEnvironment';
|
||||
import { isWindows, isMacintosh, OperatingSystem } from 'vs/base/common/platform';
|
||||
import { isWindows, isMacintosh, OperatingSystem, isWeb } from 'vs/base/common/platform';
|
||||
import { basename } from 'vs/base/common/path';
|
||||
import { find } from 'vs/base/common/arrays';
|
||||
import { timeout } from 'vs/base/common/async';
|
||||
import { IViewsService, ViewContainerLocation, IViewDescriptorService } from 'vs/workbench/common/views';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
|
||||
|
||||
interface IExtHostReadyEntry {
|
||||
promise: Promise<void>;
|
||||
@@ -52,10 +53,12 @@ export class TerminalService implements ITerminalService {
|
||||
private _activeTabIndex: number;
|
||||
private _linkProviders: Set<ITerminalExternalLinkProvider> = new Set();
|
||||
private _linkProviderDisposables: Map<ITerminalExternalLinkProvider, IDisposable[]> = new Map();
|
||||
private _processSupportContextKey: IContextKey<boolean>;
|
||||
|
||||
public get activeTabIndex(): number { return this._activeTabIndex; }
|
||||
public get terminalInstances(): ITerminalInstance[] { return this._terminalInstances; }
|
||||
public get terminalTabs(): ITerminalTab[] { return this._terminalTabs; }
|
||||
public get isProcessSupportRegistered(): boolean { return !!this._processSupportContextKey.get(); }
|
||||
|
||||
private _configHelper: TerminalConfigHelper;
|
||||
private _terminalContainer: HTMLElement | undefined;
|
||||
@@ -91,6 +94,8 @@ export class TerminalService implements ITerminalService {
|
||||
public get onTabDisposed(): Event<ITerminalTab> { return this._onTabDisposed.event; }
|
||||
private readonly _onRequestAvailableShells = new Emitter<IAvailableShellsRequest>();
|
||||
public get onRequestAvailableShells(): Event<IAvailableShellsRequest> { return this._onRequestAvailableShells.event; }
|
||||
private readonly _onDidRegisterProcessSupport = new Emitter<void>();
|
||||
public get onDidRegisterProcessSupport(): Event<void> { return this._onDidRegisterProcessSupport.event; }
|
||||
|
||||
constructor(
|
||||
@IContextKeyService private _contextKeyService: IContextKeyService,
|
||||
@@ -103,7 +108,8 @@ export class TerminalService implements ITerminalService {
|
||||
@IQuickInputService private _quickInputService: IQuickInputService,
|
||||
@IConfigurationService private _configurationService: IConfigurationService,
|
||||
@IViewsService private _viewsService: IViewsService,
|
||||
@IViewDescriptorService private readonly _viewDescriptorService: IViewDescriptorService
|
||||
@IViewDescriptorService private readonly _viewDescriptorService: IViewDescriptorService,
|
||||
@IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService
|
||||
) {
|
||||
this._activeTabIndex = 0;
|
||||
this._isShuttingDown = false;
|
||||
@@ -121,7 +127,9 @@ export class TerminalService implements ITerminalService {
|
||||
});
|
||||
this.onInstanceLinksReady(instance => this._setInstanceLinkProviders(instance));
|
||||
|
||||
this._handleContextKeys();
|
||||
this._handleInstanceContextKeys();
|
||||
this._processSupportContextKey = KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED.bindTo(this._contextKeyService);
|
||||
this._processSupportContextKey.set(!isWeb || this._remoteAgentService.getConnection() !== null);
|
||||
}
|
||||
|
||||
public setNativeWindowsDelegate(delegate: ITerminalNativeWindowsDelegate): void {
|
||||
@@ -132,13 +140,11 @@ export class TerminalService implements ITerminalService {
|
||||
this._configHelper.setLinuxDistro(linuxDistro);
|
||||
}
|
||||
|
||||
private _handleContextKeys(): void {
|
||||
private _handleInstanceContextKeys(): void {
|
||||
const terminalIsOpenContext = KEYBINDING_CONTEXT_TERMINAL_IS_OPEN.bindTo(this._contextKeyService);
|
||||
|
||||
const updateTerminalContextKeys = () => {
|
||||
terminalIsOpenContext.set(this.terminalInstances.length > 0);
|
||||
};
|
||||
|
||||
this.onInstancesChanged(() => updateTerminalContextKeys());
|
||||
}
|
||||
|
||||
@@ -411,6 +417,14 @@ export class TerminalService implements ITerminalService {
|
||||
instance.addDisposable(instance.onFocus(this._onActiveInstanceChanged.fire, this._onActiveInstanceChanged));
|
||||
}
|
||||
|
||||
public registerProcessSupport(isSupported: boolean): void {
|
||||
if (!isSupported) {
|
||||
return;
|
||||
}
|
||||
this._processSupportContextKey.set(isSupported);
|
||||
this._onDidRegisterProcessSupport.fire();
|
||||
}
|
||||
|
||||
public registerLinkProvider(linkProvider: ITerminalExternalLinkProvider): IDisposable {
|
||||
const disposables: IDisposable[] = [];
|
||||
this._linkProviders.add(linkProvider);
|
||||
@@ -593,6 +607,9 @@ export class TerminalService implements ITerminalService {
|
||||
}
|
||||
|
||||
public createTerminal(shell: IShellLaunchConfig = {}): ITerminalInstance {
|
||||
if (!this.isProcessSupportRegistered) {
|
||||
throw new Error('Could not create terminal when process support is not registered');
|
||||
}
|
||||
if (shell.hideFromUser) {
|
||||
const instance = this.createInstance(undefined, shell);
|
||||
this._backgroundedTerminalInstances.push(instance);
|
||||
|
||||
@@ -19,7 +19,6 @@ import { URI } from 'vs/base/common/uri';
|
||||
import { TERMINAL_BACKGROUND_COLOR, TERMINAL_BORDER_COLOR } from 'vs/workbench/contrib/terminal/common/terminalColorRegistry';
|
||||
import { DataTransfers } from 'vs/base/browser/dnd';
|
||||
import { INotificationService, IPromptChoice, Severity } from 'vs/platform/notification/common/notification';
|
||||
import { IStorageService } from 'vs/platform/storage/common/storage';
|
||||
import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { BrowserFeatures } from 'vs/base/browser/canIUse';
|
||||
import { ViewPane, IViewPaneOptions } from 'vs/workbench/browser/parts/views/viewPaneContainer';
|
||||
@@ -56,14 +55,25 @@ export class TerminalViewPane extends ViewPane {
|
||||
@IThemeService protected readonly themeService: IThemeService,
|
||||
@ITelemetryService telemetryService: ITelemetryService,
|
||||
@INotificationService private readonly _notificationService: INotificationService,
|
||||
@IStorageService storageService: IStorageService,
|
||||
@IOpenerService openerService: IOpenerService,
|
||||
) {
|
||||
super(options, keybindingService, _contextMenuService, configurationService, contextKeyService, viewDescriptorService, _instantiationService, openerService, themeService, telemetryService);
|
||||
this._terminalService.onDidRegisterProcessSupport(() => {
|
||||
if (this._actions) {
|
||||
for (const action of this._actions) {
|
||||
action.enabled = true;
|
||||
}
|
||||
}
|
||||
this._onDidChangeViewWelcomeState.fire();
|
||||
});
|
||||
}
|
||||
|
||||
protected renderBody(container: HTMLElement): void {
|
||||
super.renderBody(container);
|
||||
if (this.shouldShowWelcome()) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._parentDomElement = container;
|
||||
dom.addClass(this._parentDomElement, 'integrated-terminal');
|
||||
this._fontStyleElement = document.createElement('style');
|
||||
@@ -120,6 +130,10 @@ export class TerminalViewPane extends ViewPane {
|
||||
|
||||
protected layoutBody(height: number, width: number): void {
|
||||
super.layoutBody(height, width);
|
||||
if (this.shouldShowWelcome()) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._bodyDimensions.width = width;
|
||||
this._bodyDimensions.height = height;
|
||||
this._terminalService.terminalTabs.forEach(t => t.layout(width, height));
|
||||
@@ -138,9 +152,12 @@ export class TerminalViewPane extends ViewPane {
|
||||
this._splitTerminalAction,
|
||||
this._instantiationService.createInstance(KillTerminalAction, KillTerminalAction.ID, KillTerminalAction.PANEL_LABEL)
|
||||
];
|
||||
this._actions.forEach(a => {
|
||||
this._register(a);
|
||||
});
|
||||
for (const action of this._actions) {
|
||||
if (!this._terminalService.isProcessSupportRegistered) {
|
||||
action.enabled = false;
|
||||
}
|
||||
this._register(action);
|
||||
}
|
||||
}
|
||||
return this._actions;
|
||||
}
|
||||
@@ -188,10 +205,7 @@ export class TerminalViewPane extends ViewPane {
|
||||
}
|
||||
|
||||
public focus(): void {
|
||||
const activeInstance = this._terminalService.getActiveInstance();
|
||||
if (activeInstance) {
|
||||
activeInstance.focusWhenReady(true);
|
||||
}
|
||||
this._terminalService.getActiveInstance()?.focusWhenReady(true);
|
||||
}
|
||||
|
||||
public focusFindWidget() {
|
||||
@@ -331,9 +345,11 @@ export class TerminalViewPane extends ViewPane {
|
||||
theme = this.themeService.getColorTheme();
|
||||
}
|
||||
|
||||
if (this._findWidget) {
|
||||
this._findWidget.updateTheme(theme);
|
||||
}
|
||||
this._findWidget?.updateTheme(theme);
|
||||
}
|
||||
|
||||
shouldShowWelcome(): boolean {
|
||||
return !this._terminalService.isProcessSupportRegistered;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import { IMarkdownString } from 'vs/base/common/htmlContent';
|
||||
import { Widget } from 'vs/base/browser/ui/widget';
|
||||
import { ITerminalWidget } from 'vs/workbench/contrib/terminal/browser/widgets/widgets';
|
||||
import * as dom from 'vs/base/browser/dom';
|
||||
import { IViewportRange } from 'xterm';
|
||||
import type { IViewportRange } from 'xterm';
|
||||
import { IHoverTarget, IHoverService } from 'vs/workbench/services/hover/browser/hover';
|
||||
import { registerThemingParticipant } from 'vs/platform/theme/common/themeService';
|
||||
import { editorHoverHighlight } from 'vs/platform/theme/common/colorRegistry';
|
||||
|
||||
@@ -12,7 +12,7 @@ import { OperatingSystem } from 'vs/base/common/platform';
|
||||
import { IEnvironmentVariableInfo } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { IExtensionPointDescriptor } from 'vs/workbench/services/extensions/common/extensionsRegistry';
|
||||
|
||||
export const TERMINAL_VIEW_ID = 'workbench.panel.terminal';
|
||||
export const TERMINAL_VIEW_ID = 'terminal';
|
||||
|
||||
/** A context key that is set when there is at least one opened integrated terminal. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_IS_OPEN = new RawContextKey<boolean>('terminalIsOpen', false);
|
||||
@@ -46,6 +46,8 @@ export const KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED = new RawContextKey<boolea
|
||||
/** A context key that is set when the find widget find input in integrated terminal is not focused. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_FIND_INPUT_NOT_FOCUSED = KEYBINDING_CONTEXT_TERMINAL_FIND_INPUT_FOCUSED.toNegated();
|
||||
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED = new RawContextKey<boolean>('terminalProcessSupported', false);
|
||||
|
||||
export const IS_WORKSPACE_SHELL_ALLOWED_STORAGE_KEY = 'terminal.integrated.isWorkspaceShellAllowed';
|
||||
export const NEVER_MEASURE_RENDER_TIME_STORAGE_KEY = 'terminal.integrated.neverMeasureRenderTime';
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ export function shouldSetLangEnvVariable(env: platform.IProcessEnvironment, dete
|
||||
return true;
|
||||
}
|
||||
if (detectLocale === 'auto') {
|
||||
return !env['LANG'] || env['LANG'].search(/\.UTF\-8$/) === -1;
|
||||
return !env['LANG'] || (env['LANG'].search(/\.UTF\-8$/) === -1 && env['LANG'].search(/\.utf8$/) === -1);
|
||||
}
|
||||
return false; // 'off'
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import * as nls from 'vs/nls';
|
||||
import { MenuRegistry, MenuId } from 'vs/platform/actions/common/actions';
|
||||
import { TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
|
||||
|
||||
export function setupTerminalMenu() {
|
||||
@@ -38,7 +38,8 @@ export function setupTerminalMenu() {
|
||||
title: nls.localize({ key: 'miSplitTerminal', comment: ['&& denotes a mnemonic'] }, "&&Split Terminal"),
|
||||
precondition: ContextKeyExpr.has('terminalIsOpen')
|
||||
},
|
||||
order: 2
|
||||
order: 2,
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
|
||||
// Run
|
||||
@@ -49,7 +50,8 @@ export function setupTerminalMenu() {
|
||||
id: TERMINAL_COMMAND_ID.RUN_ACTIVE_FILE,
|
||||
title: nls.localize({ key: 'miRunActiveFile', comment: ['&& denotes a mnemonic'] }, "Run &&Active File")
|
||||
},
|
||||
order: 3
|
||||
order: 3,
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
MenuRegistry.appendMenuItem(MenuId.MenubarTerminalMenu, {
|
||||
group: runGroup,
|
||||
@@ -57,6 +59,7 @@ export function setupTerminalMenu() {
|
||||
id: TERMINAL_COMMAND_ID.RUN_SELECTED_TEXT,
|
||||
title: nls.localize({ key: 'miRunSelectedText', comment: ['&& denotes a mnemonic'] }, "Run &&Selected Text")
|
||||
},
|
||||
order: 4
|
||||
order: 4,
|
||||
when: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED
|
||||
});
|
||||
}
|
||||
@@ -10,10 +10,10 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
|
||||
import { IProcessEnvironment, platform, Platform } from 'vs/base/common/platform';
|
||||
import { TerminalProcess } from 'vs/workbench/contrib/terminal/node/terminalProcess';
|
||||
import { getSystemShell } from 'vs/workbench/contrib/terminal/node/terminal';
|
||||
import { Terminal as XTermTerminal } from 'xterm';
|
||||
import { SearchAddon as XTermSearchAddon } from 'xterm-addon-search';
|
||||
import { Unicode11Addon as XTermUnicode11Addon } from 'xterm-addon-unicode11';
|
||||
import { WebglAddon as XTermWebglAddon } from 'xterm-addon-webgl';
|
||||
import type { Terminal as XTermTerminal } from 'xterm';
|
||||
import type { SearchAddon as XTermSearchAddon } from 'xterm-addon-search';
|
||||
import type { Unicode11Addon as XTermUnicode11Addon } from 'xterm-addon-unicode11';
|
||||
import type { WebglAddon as XTermWebglAddon } from 'xterm-addon-webgl';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { getDefaultShell, getDefaultShellArgs } from 'vs/workbench/contrib/terminal/common/terminalEnvironment';
|
||||
import { StorageScope, IStorageService } from 'vs/platform/storage/common/storage';
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { ipcRenderer } from 'vs/base/parts/sandbox/electron-sandbox/globals';
|
||||
import { IOpenFileRequest } from 'vs/platform/windows/common/windows';
|
||||
import { INativeOpenFileRequest } from 'vs/platform/windows/common/windows';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { IFileService } from 'vs/platform/files/common/files';
|
||||
import { getWindowsBuildNumber, linuxDistro } from 'vs/workbench/contrib/terminal/node/terminal';
|
||||
@@ -15,7 +15,6 @@ import { registerRemoteContributions } from 'vs/workbench/contrib/terminal/elect
|
||||
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||
import { IElectronService } from 'vs/platform/electron/electron-sandbox/electron';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { INativeOpenFileRequest } from 'vs/platform/windows/node/window';
|
||||
import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
|
||||
|
||||
@@ -31,7 +30,7 @@ export class TerminalNativeContribution extends Disposable implements IWorkbench
|
||||
) {
|
||||
super();
|
||||
|
||||
ipcRenderer.on('vscode:openFiles', (_: unknown, request: IOpenFileRequest) => this._onOpenFileRequest(request));
|
||||
ipcRenderer.on('vscode:openFiles', (_: unknown, request: INativeOpenFileRequest) => this._onOpenFileRequest(request));
|
||||
this._register(electronService.onOSResume(() => this._onOsResume()));
|
||||
|
||||
this._terminalService.setLinuxDistro(linuxDistro);
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
import * as platform from 'vs/base/common/platform';
|
||||
import { Emitter, Event } from 'vs/base/common/event';
|
||||
import { IWindowsShellHelper } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { Terminal as XTermTerminal } from 'xterm';
|
||||
import * as WindowsProcessTreeType from 'windows-process-tree';
|
||||
import type { Terminal as XTermTerminal } from 'xterm';
|
||||
import type * as WindowsProcessTreeType from 'windows-process-tree';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { timeout } from 'vs/base/common/async';
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import * as path from 'vs/base/common/path';
|
||||
import * as platform from 'vs/base/common/platform';
|
||||
import * as pty from 'node-pty';
|
||||
import type * as pty from 'node-pty';
|
||||
import * as fs from 'fs';
|
||||
import { Event, Emitter } from 'vs/base/common/event';
|
||||
import { getWindowsBuildNumber } from 'vs/workbench/contrib/terminal/node/terminal';
|
||||
@@ -90,7 +90,7 @@ export class TerminalProcess extends Disposable implements ITerminalChildProcess
|
||||
}
|
||||
|
||||
try {
|
||||
this.setupPtyProcess(this._shellLaunchConfig, this._ptyOptions);
|
||||
await this.setupPtyProcess(this._shellLaunchConfig, this._ptyOptions);
|
||||
return undefined;
|
||||
} catch (err) {
|
||||
this._logService.trace('IPty#spawn native exception', err);
|
||||
@@ -136,10 +136,10 @@ export class TerminalProcess extends Disposable implements ITerminalChildProcess
|
||||
return undefined;
|
||||
}
|
||||
|
||||
private setupPtyProcess(shellLaunchConfig: IShellLaunchConfig, options: pty.IPtyForkOptions): void {
|
||||
private async setupPtyProcess(shellLaunchConfig: IShellLaunchConfig, options: pty.IPtyForkOptions): Promise<void> {
|
||||
const args = shellLaunchConfig.args || [];
|
||||
this._logService.trace('IPty#spawn', shellLaunchConfig.executable, args, options);
|
||||
const ptyProcess = pty.spawn(shellLaunchConfig.executable!, args, options);
|
||||
const ptyProcess = (await import('node-pty')).spawn(shellLaunchConfig.executable!, args, options);
|
||||
this._ptyProcess = ptyProcess;
|
||||
this._processStartupComplete = new Promise<void>(c => {
|
||||
this.onProcessReady(() => c());
|
||||
|
||||
@@ -45,16 +45,22 @@ suite('Workbench - TerminalEnvironment', () => {
|
||||
test('auto', () => {
|
||||
assert.equal(shouldSetLangEnvVariable({}, 'auto'), true);
|
||||
assert.equal(shouldSetLangEnvVariable({ LANG: 'en-US' }, 'auto'), true);
|
||||
assert.equal(shouldSetLangEnvVariable({ LANG: 'en-US.utf' }, 'auto'), true);
|
||||
assert.equal(shouldSetLangEnvVariable({ LANG: 'en-US.utf8' }, 'auto'), false);
|
||||
assert.equal(shouldSetLangEnvVariable({ LANG: 'en-US.UTF-8' }, 'auto'), false);
|
||||
});
|
||||
test('off', () => {
|
||||
assert.equal(shouldSetLangEnvVariable({}, 'off'), false);
|
||||
assert.equal(shouldSetLangEnvVariable({ LANG: 'en-US' }, 'off'), false);
|
||||
assert.equal(shouldSetLangEnvVariable({ LANG: 'en-US.utf' }, 'off'), false);
|
||||
assert.equal(shouldSetLangEnvVariable({ LANG: 'en-US.utf8' }, 'off'), false);
|
||||
assert.equal(shouldSetLangEnvVariable({ LANG: 'en-US.UTF-8' }, 'off'), false);
|
||||
});
|
||||
test('on', () => {
|
||||
assert.equal(shouldSetLangEnvVariable({}, 'on'), true);
|
||||
assert.equal(shouldSetLangEnvVariable({ LANG: 'en-US' }, 'on'), true);
|
||||
assert.equal(shouldSetLangEnvVariable({ LANG: 'en-US.utf' }, 'on'), true);
|
||||
assert.equal(shouldSetLangEnvVariable({ LANG: 'en-US.utf8' }, 'on'), true);
|
||||
assert.equal(shouldSetLangEnvVariable({ LANG: 'en-US.UTF-8' }, 'on'), true);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user