mirror of
https://github.com/microsoft/vscode.git
synced 2026-07-15 16:34:50 +01:00
create PersistentTerminalProcess and move terminal and environmentVariable files from workbench -> platform
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Barrier } from 'vs/base/common/async';
|
||||
|
||||
export class AutoOpenBarrier extends Barrier {
|
||||
|
||||
private readonly _timeout: any;
|
||||
|
||||
constructor(autoOpenTimeMs: number) {
|
||||
super();
|
||||
this._timeout = setTimeout(() => this.open(), autoOpenTimeMs);
|
||||
}
|
||||
|
||||
open(): void {
|
||||
clearTimeout(this._timeout);
|
||||
super.open();
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,566 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as nls from 'vs/nls';
|
||||
import { Event } from 'vs/base/common/event';
|
||||
import { IProcessEnvironment } from 'vs/base/common/platform';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { RawContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { IProcessEnvironment, OperatingSystem } from 'vs/base/common/platform';
|
||||
import { IEnvironmentVariableInfo } from 'vs/platform/terminal/common/environmentVariable';
|
||||
|
||||
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);
|
||||
|
||||
/** A context key that is set when the integrated terminal has focus. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_FOCUS = new RawContextKey<boolean>('terminalFocus', false);
|
||||
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE_KEY = 'terminalShellType';
|
||||
/** A context key that is set to the detected shell for the most recently active terminal, this is set to the last known value when no terminals exist. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE = new RawContextKey<string>(KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE_KEY, undefined);
|
||||
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE = new RawContextKey<boolean>('terminalAltBufferActive', false);
|
||||
|
||||
/** A context key that is set when the integrated terminal does not have focus. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_NOT_FOCUSED = KEYBINDING_CONTEXT_TERMINAL_FOCUS.toNegated();
|
||||
|
||||
/** A context key that is set when the user is navigating the accessibility tree */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS = new RawContextKey<boolean>('terminalA11yTreeFocus', false);
|
||||
|
||||
/** A keybinding context key that is set when the integrated terminal has text selected. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED = new RawContextKey<boolean>('terminalTextSelected', false);
|
||||
/** A keybinding context key that is set when the integrated terminal does not have text selected. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_TEXT_NOT_SELECTED = KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED.toNegated();
|
||||
|
||||
/** A context key that is set when the find widget in integrated terminal is visible. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE = new RawContextKey<boolean>('terminalFindVisible', false);
|
||||
/** A context key that is set when the find widget in integrated terminal is not visible. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_FIND_NOT_VISIBLE = KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE.toNegated();
|
||||
/** A context key that is set when the find widget find input in integrated terminal is focused. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_FIND_INPUT_FOCUSED = new RawContextKey<boolean>('terminalFindInputFocused', false);
|
||||
/** A context key that is set when the find widget in integrated terminal is focused. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED = new RawContextKey<boolean>('terminalFindFocused', false);
|
||||
/** 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';
|
||||
|
||||
export const TERMINAL_CREATION_COMMANDS = ['workbench.action.terminal.toggleTerminal', 'workbench.action.terminal.new', 'workbench.action.togglePanel', 'workbench.action.terminal.focus'];
|
||||
|
||||
export const TerminalCursorStyle = {
|
||||
BLOCK: 'block',
|
||||
LINE: 'line',
|
||||
UNDERLINE: 'underline'
|
||||
};
|
||||
|
||||
export const TERMINAL_CONFIG_SECTION = 'terminal.integrated';
|
||||
|
||||
export const TERMINAL_ACTION_CATEGORY = nls.localize('terminalCategory', "Terminal");
|
||||
|
||||
export const DEFAULT_LETTER_SPACING = 0;
|
||||
export const MINIMUM_LETTER_SPACING = -5;
|
||||
export const DEFAULT_LINE_HEIGHT = 1;
|
||||
|
||||
export const MINIMUM_FONT_WEIGHT = 1;
|
||||
export const MAXIMUM_FONT_WEIGHT = 1000;
|
||||
export const DEFAULT_FONT_WEIGHT = 'normal';
|
||||
export const DEFAULT_BOLD_FONT_WEIGHT = 'bold';
|
||||
export const SUGGESTIONS_FONT_WEIGHT = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];
|
||||
|
||||
export type FontWeight = 'normal' | 'bold' | number;
|
||||
|
||||
export interface ITerminalConfiguration {
|
||||
shell: {
|
||||
linux: string | null;
|
||||
osx: string | null;
|
||||
windows: string | null;
|
||||
};
|
||||
automationShell: {
|
||||
linux: string | null;
|
||||
osx: string | null;
|
||||
windows: string | null;
|
||||
};
|
||||
shellArgs: {
|
||||
linux: string[];
|
||||
osx: string[];
|
||||
windows: string[];
|
||||
};
|
||||
altClickMovesCursor: boolean;
|
||||
macOptionIsMeta: boolean;
|
||||
macOptionClickForcesSelection: boolean;
|
||||
rendererType: 'auto' | 'canvas' | 'dom' | 'experimentalWebgl';
|
||||
rightClickBehavior: 'default' | 'copyPaste' | 'paste' | 'selectWord';
|
||||
cursorBlinking: boolean;
|
||||
cursorStyle: string;
|
||||
cursorWidth: number;
|
||||
drawBoldTextInBrightColors: boolean;
|
||||
fastScrollSensitivity: number;
|
||||
fontFamily: string;
|
||||
fontWeight: FontWeight;
|
||||
fontWeightBold: FontWeight;
|
||||
minimumContrastRatio: number;
|
||||
mouseWheelScrollSensitivity: number;
|
||||
sendKeybindingsToShell: boolean;
|
||||
// fontLigatures: boolean;
|
||||
fontSize: number;
|
||||
letterSpacing: number;
|
||||
lineHeight: number;
|
||||
detectLocale: 'auto' | 'off' | 'on';
|
||||
scrollback: number;
|
||||
commandsToSkipShell: string[];
|
||||
allowChords: boolean;
|
||||
allowMnemonics: boolean;
|
||||
cwd: string;
|
||||
confirmOnExit: boolean;
|
||||
enableBell: boolean;
|
||||
inheritEnv: boolean;
|
||||
env: {
|
||||
linux: { [key: string]: string };
|
||||
osx: { [key: string]: string };
|
||||
windows: { [key: string]: string };
|
||||
};
|
||||
environmentChangesIndicator: 'off' | 'on' | 'warnonly';
|
||||
showExitAlert: boolean;
|
||||
splitCwd: 'workspaceRoot' | 'initial' | 'inherited';
|
||||
windowsEnableConpty: boolean;
|
||||
wordSeparators: string;
|
||||
experimentalUseTitleEvent: boolean;
|
||||
enableFileLinks: boolean;
|
||||
unicodeVersion: '6' | '11';
|
||||
experimentalLinkProvider: boolean;
|
||||
localEchoLatencyThreshold: number;
|
||||
localEchoExcludePrograms: ReadonlyArray<string>;
|
||||
localEchoStyle: 'bold' | 'dim' | 'italic' | 'underlined' | 'inverted' | string;
|
||||
serverSpawn: boolean;
|
||||
mainSpawn: boolean;
|
||||
enablePersistentSessions: boolean;
|
||||
flowControl: boolean;
|
||||
}
|
||||
|
||||
export const DEFAULT_LOCAL_ECHO_EXCLUDE: ReadonlyArray<string> = ['vim', 'vi', 'nano', 'tmux'];
|
||||
|
||||
export interface ITerminalConfigHelper {
|
||||
config: ITerminalConfiguration;
|
||||
|
||||
onWorkspacePermissionsChanged: Event<boolean>;
|
||||
|
||||
configFontIsMonospace(): boolean;
|
||||
getFont(): ITerminalFont;
|
||||
/** Sets whether a workspace shell configuration is allowed or not */
|
||||
setWorkspaceShellAllowed(isAllowed: boolean): void;
|
||||
checkWorkspaceShellPermissions(osOverride?: OperatingSystem): boolean;
|
||||
showRecommendations(shellLaunchConfig: IShellLaunchConfig): void;
|
||||
}
|
||||
|
||||
export interface ITerminalFont {
|
||||
fontFamily: string;
|
||||
fontSize: number;
|
||||
letterSpacing: number;
|
||||
lineHeight: number;
|
||||
charWidth?: number;
|
||||
charHeight?: number;
|
||||
}
|
||||
|
||||
export interface IRemoteTerminalAttachTarget {
|
||||
id: number;
|
||||
pid: number;
|
||||
title: string;
|
||||
cwd: string;
|
||||
workspaceId: string;
|
||||
workspaceName: string;
|
||||
isOrphan: boolean;
|
||||
}
|
||||
|
||||
export interface IRawTerminalInstanceLayoutInfo<T> {
|
||||
relativeSize: number;
|
||||
terminal: T;
|
||||
}
|
||||
|
||||
export type ITerminalInstanceLayoutInfoById = IRawTerminalInstanceLayoutInfo<number>;
|
||||
export type ITerminalInstanceLayoutInfo = IRawTerminalInstanceLayoutInfo<IRemoteTerminalAttachTarget>;
|
||||
|
||||
export interface IRawTerminalTabLayoutInfo<T> {
|
||||
isActive: boolean;
|
||||
activeTerminalProcessId: number;
|
||||
terminals: IRawTerminalInstanceLayoutInfo<T>[];
|
||||
}
|
||||
|
||||
export type ITerminalTabLayoutInfoById = IRawTerminalTabLayoutInfo<number>;
|
||||
export type ITerminalTabLayoutInfo = IRawTerminalTabLayoutInfo<IRemoteTerminalAttachTarget | null>;
|
||||
|
||||
export interface IRawTerminalsLayoutInfo<T> {
|
||||
tabs: IRawTerminalTabLayoutInfo<T>[];
|
||||
}
|
||||
|
||||
export type ITerminalsLayoutInfo = IRawTerminalsLayoutInfo<IRemoteTerminalAttachTarget | null>;
|
||||
export type ITerminalsLayoutInfoById = IRawTerminalsLayoutInfo<number>;
|
||||
|
||||
/**
|
||||
* Provides access to native Windows calls that can be injected into non-native layers.
|
||||
*/
|
||||
export interface ITerminalNativeWindowsDelegate {
|
||||
/**
|
||||
* Gets the Windows build number, eg. this would be `19041` for Windows 10 version 2004
|
||||
*/
|
||||
getWindowsBuildNumber(): number;
|
||||
/**
|
||||
* Converts a regular Windows path into the WSL path equivalent, eg. `C:\` -> `/mnt/c`
|
||||
* @param path The Windows path.
|
||||
*/
|
||||
getWslPath(path: string): Promise<string>;
|
||||
}
|
||||
|
||||
export interface IShellDefinition {
|
||||
label: string;
|
||||
path: string;
|
||||
}
|
||||
|
||||
export interface ICommandTracker {
|
||||
scrollToPreviousCommand(): void;
|
||||
scrollToNextCommand(): void;
|
||||
selectToPreviousCommand(): void;
|
||||
selectToNextCommand(): void;
|
||||
selectToPreviousLine(): void;
|
||||
selectToNextLine(): void;
|
||||
}
|
||||
|
||||
export interface INavigationMode {
|
||||
exitNavigationMode(): void;
|
||||
focusPreviousLine(): void;
|
||||
focusNextLine(): void;
|
||||
}
|
||||
|
||||
export interface IBeforeProcessDataEvent {
|
||||
/**
|
||||
* The data of the event, this can be modified by the event listener to change what gets sent
|
||||
* to the terminal.
|
||||
*/
|
||||
data: string;
|
||||
}
|
||||
|
||||
export interface ITerminalProcessManager extends IDisposable {
|
||||
readonly processState: ProcessState;
|
||||
readonly ptyProcessReady: Promise<void>;
|
||||
readonly shellProcessId: number | undefined;
|
||||
readonly remoteAuthority: string | undefined;
|
||||
readonly os: OperatingSystem | undefined;
|
||||
readonly userHome: string | undefined;
|
||||
readonly environmentVariableInfo: IEnvironmentVariableInfo | undefined;
|
||||
readonly remoteTerminalId: number | undefined;
|
||||
/** Whether the process has had data written to it yet. */
|
||||
readonly hasWrittenData: boolean;
|
||||
|
||||
readonly onProcessReady: Event<void>;
|
||||
readonly onBeforeProcessData: Event<IBeforeProcessDataEvent>;
|
||||
readonly onProcessData: Event<IProcessDataEvent>;
|
||||
readonly onProcessTitle: Event<string>;
|
||||
readonly onProcessExit: Event<number | undefined>;
|
||||
readonly onProcessOverrideDimensions: Event<ITerminalDimensionsOverride | undefined>;
|
||||
readonly onProcessResolvedShellLaunchConfig: Event<IShellLaunchConfig>;
|
||||
readonly onEnvironmentVariableInfoChanged: Event<IEnvironmentVariableInfo>;
|
||||
|
||||
dispose(immediate?: boolean): void;
|
||||
createProcess(shellLaunchConfig: IShellLaunchConfig, cols: number, rows: number, isScreenReaderModeEnabled: boolean): Promise<ITerminalLaunchError | undefined>;
|
||||
write(data: string): void;
|
||||
setDimensions(cols: number, rows: number): void;
|
||||
acknowledgeDataEvent(charCount: number): void;
|
||||
|
||||
getInitialCwd(): Promise<string>;
|
||||
getCwd(): Promise<string>;
|
||||
getLatency(): Promise<number>;
|
||||
}
|
||||
|
||||
export const enum ProcessState {
|
||||
// The process has not been initialized yet.
|
||||
UNINITIALIZED,
|
||||
// The process is currently launching, the process is marked as launching
|
||||
// for a short duration after being created and is helpful to indicate
|
||||
// whether the process died as a result of bad shell and args.
|
||||
LAUNCHING,
|
||||
// The process is running normally.
|
||||
RUNNING,
|
||||
// The process was killed during launch, likely as a result of bad shell and
|
||||
// args.
|
||||
KILLED_DURING_LAUNCH,
|
||||
// The process was killed by the user (the event originated from VS Code).
|
||||
KILLED_BY_USER,
|
||||
// The process was killed by itself, for example the shell crashed or `exit`
|
||||
// was run.
|
||||
KILLED_BY_PROCESS
|
||||
}
|
||||
|
||||
export interface ITerminalProcessExtHostProxy extends IDisposable {
|
||||
readonly terminalId: number;
|
||||
|
||||
emitData(data: string): void;
|
||||
emitTitle(title: string): void;
|
||||
emitReady(pid: number, cwd: string): void;
|
||||
emitExit(exitCode: number | undefined): void;
|
||||
emitOverrideDimensions(dimensions: ITerminalDimensions | undefined): void;
|
||||
emitResolvedShellLaunchConfig(shellLaunchConfig: IShellLaunchConfig): void;
|
||||
emitInitialCwd(initialCwd: string): void;
|
||||
emitCwd(cwd: string): void;
|
||||
emitLatency(latency: number): void;
|
||||
|
||||
onInput: Event<string>;
|
||||
onResize: Event<{ cols: number, rows: number }>;
|
||||
onAcknowledgeDataEvent: Event<number>;
|
||||
onShutdown: Event<boolean>;
|
||||
onRequestInitialCwd: Event<void>;
|
||||
onRequestCwd: Event<void>;
|
||||
onRequestLatency: Event<void>;
|
||||
}
|
||||
|
||||
export interface ISpawnExtHostProcessRequest {
|
||||
proxy: ITerminalProcessExtHostProxy;
|
||||
shellLaunchConfig: IShellLaunchConfig;
|
||||
activeWorkspaceRootUri: URI | undefined;
|
||||
cols: number;
|
||||
rows: number;
|
||||
isWorkspaceShellAllowed: boolean;
|
||||
callback: (error: ITerminalLaunchError | undefined) => void;
|
||||
}
|
||||
|
||||
export interface IStartExtensionTerminalRequest {
|
||||
proxy: ITerminalProcessExtHostProxy;
|
||||
cols: number;
|
||||
rows: number;
|
||||
callback: (error: ITerminalLaunchError | undefined) => void;
|
||||
}
|
||||
|
||||
export interface IAvailableShellsRequest {
|
||||
callback: (shells: IShellDefinition[]) => void;
|
||||
}
|
||||
|
||||
export interface IDefaultShellAndArgsRequest {
|
||||
useAutomationShell: boolean;
|
||||
callback: (shell: string, args: string[] | string | undefined) => void;
|
||||
}
|
||||
|
||||
export enum LinuxDistro {
|
||||
Fedora,
|
||||
Ubuntu,
|
||||
Unknown
|
||||
}
|
||||
|
||||
export enum TitleEventSource {
|
||||
/** From the API or the rename command that overrides any other type */
|
||||
Api,
|
||||
/** From the process name property*/
|
||||
Process,
|
||||
/** From the VT sequence */
|
||||
Sequence
|
||||
}
|
||||
|
||||
export interface IWindowsShellHelper extends IDisposable {
|
||||
readonly onShellNameChange: Event<string>;
|
||||
|
||||
getShellName(): Promise<string>;
|
||||
}
|
||||
|
||||
export const enum TERMINAL_COMMAND_ID {
|
||||
FIND_NEXT = 'workbench.action.terminal.findNext',
|
||||
FIND_PREVIOUS = 'workbench.action.terminal.findPrevious',
|
||||
TOGGLE = 'workbench.action.terminal.toggleTerminal',
|
||||
KILL = 'workbench.action.terminal.kill',
|
||||
QUICK_KILL = 'workbench.action.terminal.quickKill',
|
||||
CONFIGURE_TERMINAL_SETTINGS = 'workbench.action.terminal.openSettings',
|
||||
COPY_SELECTION = 'workbench.action.terminal.copySelection',
|
||||
SELECT_ALL = 'workbench.action.terminal.selectAll',
|
||||
DELETE_WORD_LEFT = 'workbench.action.terminal.deleteWordLeft',
|
||||
DELETE_WORD_RIGHT = 'workbench.action.terminal.deleteWordRight',
|
||||
DELETE_TO_LINE_START = 'workbench.action.terminal.deleteToLineStart',
|
||||
MOVE_TO_LINE_START = 'workbench.action.terminal.moveToLineStart',
|
||||
MOVE_TO_LINE_END = 'workbench.action.terminal.moveToLineEnd',
|
||||
NEW = 'workbench.action.terminal.new',
|
||||
NEW_WITH_CWD = 'workbench.action.terminal.newWithCwd',
|
||||
NEW_LOCAL = 'workbench.action.terminal.newLocal',
|
||||
NEW_IN_ACTIVE_WORKSPACE = 'workbench.action.terminal.newInActiveWorkspace',
|
||||
SPLIT = 'workbench.action.terminal.split',
|
||||
SPLIT_IN_ACTIVE_WORKSPACE = 'workbench.action.terminal.splitInActiveWorkspace',
|
||||
RELAUNCH = 'workbench.action.terminal.relaunch',
|
||||
FOCUS_PREVIOUS_PANE = 'workbench.action.terminal.focusPreviousPane',
|
||||
FOCUS_NEXT_PANE = 'workbench.action.terminal.focusNextPane',
|
||||
RESIZE_PANE_LEFT = 'workbench.action.terminal.resizePaneLeft',
|
||||
RESIZE_PANE_RIGHT = 'workbench.action.terminal.resizePaneRight',
|
||||
RESIZE_PANE_UP = 'workbench.action.terminal.resizePaneUp',
|
||||
RESIZE_PANE_DOWN = 'workbench.action.terminal.resizePaneDown',
|
||||
FOCUS = 'workbench.action.terminal.focus',
|
||||
FOCUS_NEXT = 'workbench.action.terminal.focusNext',
|
||||
FOCUS_PREVIOUS = 'workbench.action.terminal.focusPrevious',
|
||||
PASTE = 'workbench.action.terminal.paste',
|
||||
SELECT_DEFAULT_SHELL = 'workbench.action.terminal.selectDefaultShell',
|
||||
RUN_SELECTED_TEXT = 'workbench.action.terminal.runSelectedText',
|
||||
RUN_ACTIVE_FILE = 'workbench.action.terminal.runActiveFile',
|
||||
SWITCH_TERMINAL = 'workbench.action.terminal.switchTerminal',
|
||||
SCROLL_DOWN_LINE = 'workbench.action.terminal.scrollDown',
|
||||
SCROLL_DOWN_PAGE = 'workbench.action.terminal.scrollDownPage',
|
||||
SCROLL_TO_BOTTOM = 'workbench.action.terminal.scrollToBottom',
|
||||
SCROLL_UP_LINE = 'workbench.action.terminal.scrollUp',
|
||||
SCROLL_UP_PAGE = 'workbench.action.terminal.scrollUpPage',
|
||||
SCROLL_TO_TOP = 'workbench.action.terminal.scrollToTop',
|
||||
CLEAR = 'workbench.action.terminal.clear',
|
||||
CLEAR_SELECTION = 'workbench.action.terminal.clearSelection',
|
||||
MANAGE_WORKSPACE_SHELL_PERMISSIONS = 'workbench.action.terminal.manageWorkspaceShellPermissions',
|
||||
RENAME = 'workbench.action.terminal.rename',
|
||||
RENAME_WITH_ARG = 'workbench.action.terminal.renameWithArg',
|
||||
FIND_FOCUS = 'workbench.action.terminal.focusFind',
|
||||
FIND_HIDE = 'workbench.action.terminal.hideFind',
|
||||
QUICK_OPEN_TERM = 'workbench.action.quickOpenTerm',
|
||||
SCROLL_TO_PREVIOUS_COMMAND = 'workbench.action.terminal.scrollToPreviousCommand',
|
||||
SCROLL_TO_NEXT_COMMAND = 'workbench.action.terminal.scrollToNextCommand',
|
||||
SELECT_TO_PREVIOUS_COMMAND = 'workbench.action.terminal.selectToPreviousCommand',
|
||||
SELECT_TO_NEXT_COMMAND = 'workbench.action.terminal.selectToNextCommand',
|
||||
SELECT_TO_PREVIOUS_LINE = 'workbench.action.terminal.selectToPreviousLine',
|
||||
SELECT_TO_NEXT_LINE = 'workbench.action.terminal.selectToNextLine',
|
||||
TOGGLE_ESCAPE_SEQUENCE_LOGGING = 'toggleEscapeSequenceLogging',
|
||||
SEND_SEQUENCE = 'workbench.action.terminal.sendSequence',
|
||||
TOGGLE_FIND_REGEX = 'workbench.action.terminal.toggleFindRegex',
|
||||
TOGGLE_FIND_WHOLE_WORD = 'workbench.action.terminal.toggleFindWholeWord',
|
||||
TOGGLE_FIND_CASE_SENSITIVE = 'workbench.action.terminal.toggleFindCaseSensitive',
|
||||
NAVIGATION_MODE_EXIT = 'workbench.action.terminal.navigationModeExit',
|
||||
NAVIGATION_MODE_FOCUS_NEXT = 'workbench.action.terminal.navigationModeFocusNext',
|
||||
NAVIGATION_MODE_FOCUS_PREVIOUS = 'workbench.action.terminal.navigationModeFocusPrevious',
|
||||
SHOW_ENVIRONMENT_INFORMATION = 'workbench.action.terminal.showEnvironmentInformation',
|
||||
SEARCH_WORKSPACE = 'workbench.action.terminal.searchWorkspace',
|
||||
ATTACH_TO_REMOTE_TERMINAL = 'workbench.action.terminal.attachToSession'
|
||||
}
|
||||
|
||||
export const DEFAULT_COMMANDS_TO_SKIP_SHELL: string[] = [
|
||||
TERMINAL_COMMAND_ID.CLEAR_SELECTION,
|
||||
TERMINAL_COMMAND_ID.CLEAR,
|
||||
TERMINAL_COMMAND_ID.COPY_SELECTION,
|
||||
TERMINAL_COMMAND_ID.DELETE_TO_LINE_START,
|
||||
TERMINAL_COMMAND_ID.DELETE_WORD_LEFT,
|
||||
TERMINAL_COMMAND_ID.DELETE_WORD_RIGHT,
|
||||
TERMINAL_COMMAND_ID.FIND_FOCUS,
|
||||
TERMINAL_COMMAND_ID.FIND_HIDE,
|
||||
TERMINAL_COMMAND_ID.FIND_NEXT,
|
||||
TERMINAL_COMMAND_ID.FIND_PREVIOUS,
|
||||
TERMINAL_COMMAND_ID.TOGGLE_FIND_REGEX,
|
||||
TERMINAL_COMMAND_ID.TOGGLE_FIND_WHOLE_WORD,
|
||||
TERMINAL_COMMAND_ID.TOGGLE_FIND_CASE_SENSITIVE,
|
||||
TERMINAL_COMMAND_ID.FOCUS_NEXT_PANE,
|
||||
TERMINAL_COMMAND_ID.FOCUS_NEXT,
|
||||
TERMINAL_COMMAND_ID.FOCUS_PREVIOUS_PANE,
|
||||
TERMINAL_COMMAND_ID.FOCUS_PREVIOUS,
|
||||
TERMINAL_COMMAND_ID.FOCUS,
|
||||
TERMINAL_COMMAND_ID.KILL,
|
||||
TERMINAL_COMMAND_ID.MOVE_TO_LINE_END,
|
||||
TERMINAL_COMMAND_ID.MOVE_TO_LINE_START,
|
||||
TERMINAL_COMMAND_ID.NEW_IN_ACTIVE_WORKSPACE,
|
||||
TERMINAL_COMMAND_ID.NEW,
|
||||
TERMINAL_COMMAND_ID.PASTE,
|
||||
TERMINAL_COMMAND_ID.RESIZE_PANE_DOWN,
|
||||
TERMINAL_COMMAND_ID.RESIZE_PANE_LEFT,
|
||||
TERMINAL_COMMAND_ID.RESIZE_PANE_RIGHT,
|
||||
TERMINAL_COMMAND_ID.RESIZE_PANE_UP,
|
||||
TERMINAL_COMMAND_ID.RUN_ACTIVE_FILE,
|
||||
TERMINAL_COMMAND_ID.RUN_SELECTED_TEXT,
|
||||
TERMINAL_COMMAND_ID.SCROLL_DOWN_LINE,
|
||||
TERMINAL_COMMAND_ID.SCROLL_DOWN_PAGE,
|
||||
TERMINAL_COMMAND_ID.SCROLL_TO_BOTTOM,
|
||||
TERMINAL_COMMAND_ID.SCROLL_TO_NEXT_COMMAND,
|
||||
TERMINAL_COMMAND_ID.SCROLL_TO_PREVIOUS_COMMAND,
|
||||
TERMINAL_COMMAND_ID.SCROLL_TO_TOP,
|
||||
TERMINAL_COMMAND_ID.SCROLL_UP_LINE,
|
||||
TERMINAL_COMMAND_ID.SCROLL_UP_PAGE,
|
||||
TERMINAL_COMMAND_ID.SEND_SEQUENCE,
|
||||
TERMINAL_COMMAND_ID.SELECT_ALL,
|
||||
TERMINAL_COMMAND_ID.SELECT_TO_NEXT_COMMAND,
|
||||
TERMINAL_COMMAND_ID.SELECT_TO_NEXT_LINE,
|
||||
TERMINAL_COMMAND_ID.SELECT_TO_PREVIOUS_COMMAND,
|
||||
TERMINAL_COMMAND_ID.SELECT_TO_PREVIOUS_LINE,
|
||||
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',
|
||||
'workbench.action.showCommands',
|
||||
'workbench.action.tasks.build',
|
||||
'workbench.action.tasks.restartTask',
|
||||
'workbench.action.tasks.runTask',
|
||||
'workbench.action.tasks.reRunTask',
|
||||
'workbench.action.tasks.showLog',
|
||||
'workbench.action.tasks.showTasks',
|
||||
'workbench.action.tasks.terminate',
|
||||
'workbench.action.tasks.test',
|
||||
'workbench.action.toggleFullScreen',
|
||||
'workbench.action.terminal.focusAtIndex1',
|
||||
'workbench.action.terminal.focusAtIndex2',
|
||||
'workbench.action.terminal.focusAtIndex3',
|
||||
'workbench.action.terminal.focusAtIndex4',
|
||||
'workbench.action.terminal.focusAtIndex5',
|
||||
'workbench.action.terminal.focusAtIndex6',
|
||||
'workbench.action.terminal.focusAtIndex7',
|
||||
'workbench.action.terminal.focusAtIndex8',
|
||||
'workbench.action.terminal.focusAtIndex9',
|
||||
'workbench.action.focusSecondEditorGroup',
|
||||
'workbench.action.focusThirdEditorGroup',
|
||||
'workbench.action.focusFourthEditorGroup',
|
||||
'workbench.action.focusFifthEditorGroup',
|
||||
'workbench.action.focusSixthEditorGroup',
|
||||
'workbench.action.focusSeventhEditorGroup',
|
||||
'workbench.action.focusEighthEditorGroup',
|
||||
'workbench.action.focusNextPart',
|
||||
'workbench.action.focusPreviousPart',
|
||||
'workbench.action.nextPanelView',
|
||||
'workbench.action.previousPanelView',
|
||||
'workbench.action.nextSideBarView',
|
||||
'workbench.action.previousSideBarView',
|
||||
'workbench.action.debug.start',
|
||||
'workbench.action.debug.stop',
|
||||
'workbench.action.debug.run',
|
||||
'workbench.action.debug.restart',
|
||||
'workbench.action.debug.continue',
|
||||
'workbench.action.debug.pause',
|
||||
'workbench.action.debug.stepInto',
|
||||
'workbench.action.debug.stepOut',
|
||||
'workbench.action.debug.stepOver',
|
||||
'workbench.action.nextEditor',
|
||||
'workbench.action.previousEditor',
|
||||
'workbench.action.nextEditorInGroup',
|
||||
'workbench.action.previousEditorInGroup',
|
||||
'workbench.action.openNextRecentlyUsedEditor',
|
||||
'workbench.action.openPreviousRecentlyUsedEditor',
|
||||
'workbench.action.openNextRecentlyUsedEditorInGroup',
|
||||
'workbench.action.openPreviousRecentlyUsedEditorInGroup',
|
||||
'workbench.action.quickOpenPreviousRecentlyUsedEditor',
|
||||
'workbench.action.quickOpenLeastRecentlyUsedEditor',
|
||||
'workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup',
|
||||
'workbench.action.quickOpenLeastRecentlyUsedEditorInGroup',
|
||||
'workbench.action.focusActiveEditorGroup',
|
||||
'workbench.action.focusFirstEditorGroup',
|
||||
'workbench.action.focusLastEditorGroup',
|
||||
'workbench.action.firstEditorInGroup',
|
||||
'workbench.action.lastEditorInGroup',
|
||||
'workbench.action.navigateUp',
|
||||
'workbench.action.navigateDown',
|
||||
'workbench.action.navigateRight',
|
||||
'workbench.action.navigateLeft',
|
||||
'workbench.action.togglePanel',
|
||||
'workbench.action.quickOpenView',
|
||||
'workbench.action.toggleMaximizedPanel'
|
||||
];
|
||||
|
||||
export interface ITerminalContributions {
|
||||
types?: ITerminalTypeContribution[];
|
||||
}
|
||||
|
||||
export interface ITerminalTypeContribution {
|
||||
title: string;
|
||||
command: string;
|
||||
}
|
||||
|
||||
|
||||
export interface ICommonLocalPtyService {
|
||||
readonly _serviceBrand: undefined;
|
||||
@@ -235,3 +792,27 @@ export interface ITerminalDimensionsOverride extends ITerminalDimensions {
|
||||
*/
|
||||
forceExactSize?: boolean;
|
||||
}
|
||||
|
||||
export function printTime(ms: number): string {
|
||||
let h = 0;
|
||||
let m = 0;
|
||||
let s = 0;
|
||||
if (ms >= 1000) {
|
||||
s = Math.floor(ms / 1000);
|
||||
ms -= s * 1000;
|
||||
}
|
||||
if (s >= 60) {
|
||||
m = Math.floor(s / 60);
|
||||
s -= m * 60;
|
||||
}
|
||||
if (m >= 60) {
|
||||
h = Math.floor(m / 60);
|
||||
m -= h * 60;
|
||||
}
|
||||
const _h = h ? `${h}h` : ``;
|
||||
const _m = m ? `${m}m` : ``;
|
||||
const _s = s ? `${s}s` : ``;
|
||||
const _ms = ms ? `${ms}ms` : ``;
|
||||
return `${_h}${_m}${_s}${_ms}`;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Event } from 'vs/base/common/event';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { IProcessDataEvent } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
interface TerminalDataBuffer extends IDisposable {
|
||||
data: string[];
|
||||
timeoutId: any;
|
||||
}
|
||||
|
||||
export class TerminalDataBufferer implements IDisposable {
|
||||
private readonly _terminalBufferMap = new Map<number, TerminalDataBuffer>();
|
||||
|
||||
constructor(private readonly _callback: (id: number, data: string) => void) {
|
||||
}
|
||||
|
||||
dispose() {
|
||||
for (const buffer of this._terminalBufferMap.values()) {
|
||||
buffer.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
startBuffering(id: number, event: Event<string | IProcessDataEvent>, throttleBy: number = 5): IDisposable {
|
||||
let disposable: IDisposable;
|
||||
disposable = event((e: string | IProcessDataEvent) => {
|
||||
const data = (typeof e === 'string' ? e : e.data);
|
||||
let buffer = this._terminalBufferMap.get(id);
|
||||
if (buffer) {
|
||||
buffer.data.push(data);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const timeoutId = setTimeout(() => this._flushBuffer(id), throttleBy);
|
||||
buffer = {
|
||||
data: [data],
|
||||
timeoutId: timeoutId,
|
||||
dispose: () => {
|
||||
clearTimeout(timeoutId);
|
||||
this._flushBuffer(id);
|
||||
disposable.dispose();
|
||||
}
|
||||
};
|
||||
this._terminalBufferMap.set(id, buffer);
|
||||
});
|
||||
return disposable;
|
||||
}
|
||||
|
||||
stopBuffering(id: number) {
|
||||
const buffer = this._terminalBufferMap.get(id);
|
||||
if (buffer) {
|
||||
buffer.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private _flushBuffer(id: number): void {
|
||||
const buffer = this._terminalBufferMap.get(id);
|
||||
if (buffer) {
|
||||
this._terminalBufferMap.delete(id);
|
||||
this._callback(id, buffer.data.join(''));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { UriComponents } from 'vs/base/common/uri';
|
||||
import { IRawTerminalTabLayoutInfo, ITerminalEnvironment, ITerminalTabLayoutInfoById } from 'vs/platform/terminal/common/terminal';
|
||||
import { ISerializableEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariable';
|
||||
|
||||
export const REMOTE_TERMINAL_CHANNEL_NAME = 'remoteterminal';
|
||||
|
||||
export interface IShellLaunchConfigDto {
|
||||
name?: string;
|
||||
executable?: string;
|
||||
args?: string[] | string;
|
||||
cwd?: string | UriComponents;
|
||||
env?: { [key: string]: string | null; };
|
||||
hideFromUser?: boolean;
|
||||
}
|
||||
|
||||
export interface ISingleTerminalConfiguration<T> {
|
||||
userValue: T | undefined;
|
||||
value: T | undefined;
|
||||
defaultValue: T | undefined;
|
||||
}
|
||||
|
||||
export interface ICompleteTerminalConfiguration {
|
||||
'terminal.integrated.automationShell.windows': ISingleTerminalConfiguration<string | string[]>;
|
||||
'terminal.integrated.automationShell.osx': ISingleTerminalConfiguration<string | string[]>;
|
||||
'terminal.integrated.automationShell.linux': ISingleTerminalConfiguration<string | string[]>;
|
||||
'terminal.integrated.shell.windows': ISingleTerminalConfiguration<string | string[]>;
|
||||
'terminal.integrated.shell.osx': ISingleTerminalConfiguration<string | string[]>;
|
||||
'terminal.integrated.shell.linux': ISingleTerminalConfiguration<string | string[]>;
|
||||
'terminal.integrated.shellArgs.windows': ISingleTerminalConfiguration<string | string[]>;
|
||||
'terminal.integrated.shellArgs.osx': ISingleTerminalConfiguration<string | string[]>;
|
||||
'terminal.integrated.shellArgs.linux': ISingleTerminalConfiguration<string | string[]>;
|
||||
'terminal.integrated.env.windows': ISingleTerminalConfiguration<ITerminalEnvironment>;
|
||||
'terminal.integrated.env.osx': ISingleTerminalConfiguration<ITerminalEnvironment>;
|
||||
'terminal.integrated.env.linux': ISingleTerminalConfiguration<ITerminalEnvironment>;
|
||||
'terminal.integrated.inheritEnv': boolean;
|
||||
'terminal.integrated.cwd': string;
|
||||
'terminal.integrated.detectLocale': 'auto' | 'off' | 'on';
|
||||
'terminal.flowControl': boolean;
|
||||
}
|
||||
|
||||
export type ITerminalEnvironmentVariableCollections = [string, ISerializableEnvironmentVariableCollection][];
|
||||
|
||||
export interface IWorkspaceFolderData {
|
||||
uri: UriComponents;
|
||||
name: string;
|
||||
index: number;
|
||||
}
|
||||
|
||||
export interface ICreateTerminalProcessArguments {
|
||||
configuration: ICompleteTerminalConfiguration;
|
||||
resolvedVariables: { [name: string]: string; };
|
||||
envVariableCollections: ITerminalEnvironmentVariableCollections;
|
||||
shellLaunchConfig: IShellLaunchConfigDto;
|
||||
workspaceId: string;
|
||||
workspaceName: string;
|
||||
workspaceFolders: IWorkspaceFolderData[];
|
||||
activeWorkspaceFolder: IWorkspaceFolderData | null;
|
||||
activeFileResource: UriComponents | undefined;
|
||||
shouldPersistTerminal: boolean;
|
||||
cols: number;
|
||||
rows: number;
|
||||
isWorkspaceShellAllowed: boolean;
|
||||
resolverEnv: { [key: string]: string | null; } | undefined
|
||||
}
|
||||
|
||||
export interface ICreateTerminalProcessResult {
|
||||
terminalId: number;
|
||||
resolvedShellLaunchConfig: IShellLaunchConfigDto;
|
||||
}
|
||||
|
||||
export interface IStartTerminalProcessArguments {
|
||||
id: number;
|
||||
}
|
||||
|
||||
export interface ISendInputToTerminalProcessArguments {
|
||||
id: number;
|
||||
data: string;
|
||||
}
|
||||
|
||||
export interface IShutdownTerminalProcessArguments {
|
||||
id: number;
|
||||
immediate: boolean;
|
||||
}
|
||||
|
||||
export interface IResizeTerminalProcessArguments {
|
||||
id: number;
|
||||
cols: number;
|
||||
rows: number;
|
||||
}
|
||||
|
||||
export interface IGetTerminalInitialCwdArguments {
|
||||
id: number;
|
||||
}
|
||||
|
||||
export interface IGetTerminalCwdArguments {
|
||||
id: number;
|
||||
}
|
||||
|
||||
export interface ISendCommandResultToTerminalProcessArguments {
|
||||
id: number;
|
||||
reqId: number;
|
||||
isError: boolean;
|
||||
payload: any;
|
||||
}
|
||||
|
||||
export interface IOrphanQuestionReplyArgs {
|
||||
id: number;
|
||||
}
|
||||
|
||||
export interface IListTerminalsArgs {
|
||||
isInitialization: boolean;
|
||||
}
|
||||
|
||||
export interface ISetTerminalLayoutInfoArgs {
|
||||
workspaceId: string;
|
||||
tabs: ITerminalTabLayoutInfoById[];
|
||||
}
|
||||
|
||||
export interface IGetTerminalLayoutInfoArgs {
|
||||
workspaceId: string;
|
||||
}
|
||||
|
||||
export interface IRemoteTerminalDescriptionDto {
|
||||
id: number;
|
||||
pid: number;
|
||||
title: string;
|
||||
cwd: string;
|
||||
workspaceId: string;
|
||||
workspaceName: string;
|
||||
isOrphan: boolean;
|
||||
}
|
||||
|
||||
export type ITerminalTabLayoutInfoDto = IRawTerminalTabLayoutInfo<IRemoteTerminalDescriptionDto>;
|
||||
|
||||
export interface ITriggerTerminalDataReplayArguments {
|
||||
id: number;
|
||||
}
|
||||
|
||||
export interface ISendCharCountToTerminalProcessArguments {
|
||||
id: number;
|
||||
charCount: number;
|
||||
}
|
||||
|
||||
export interface IRemoteTerminalProcessReadyEvent {
|
||||
type: 'ready';
|
||||
pid: number;
|
||||
cwd: string;
|
||||
}
|
||||
export interface IRemoteTerminalProcessTitleChangedEvent {
|
||||
type: 'titleChanged';
|
||||
title: string;
|
||||
}
|
||||
export interface IRemoteTerminalProcessDataEvent {
|
||||
type: 'data';
|
||||
data: string;
|
||||
}
|
||||
export interface ReplayEntry { cols: number; rows: number; data: string; }
|
||||
export interface IRemoteTerminalProcessReplayEvent {
|
||||
type: 'replay';
|
||||
events: ReplayEntry[];
|
||||
}
|
||||
export interface IRemoteTerminalProcessExitEvent {
|
||||
type: 'exit';
|
||||
exitCode: number | undefined;
|
||||
}
|
||||
export interface IRemoteTerminalProcessExecCommandEvent {
|
||||
type: 'execCommand';
|
||||
reqId: number;
|
||||
commandId: string;
|
||||
commandArgs?: any[];
|
||||
}
|
||||
export interface IRemoteTerminalProcessOrphanQuestionEvent {
|
||||
type: 'orphan?';
|
||||
}
|
||||
export type IRemoteTerminalProcessEvent = (
|
||||
IRemoteTerminalProcessReadyEvent
|
||||
| IRemoteTerminalProcessTitleChangedEvent
|
||||
| IRemoteTerminalProcessDataEvent
|
||||
| IRemoteTerminalProcessReplayEvent
|
||||
| IRemoteTerminalProcessExitEvent
|
||||
| IRemoteTerminalProcessExecCommandEvent
|
||||
| IRemoteTerminalProcessOrphanQuestionEvent
|
||||
);
|
||||
|
||||
export interface IOnTerminalProcessEventArguments {
|
||||
id: number;
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
const MAX_RECORDER_DATA_SIZE = 1024 * 1024; // 1MB
|
||||
|
||||
interface RecorderEntry {
|
||||
cols: number;
|
||||
rows: number;
|
||||
data: string[];
|
||||
}
|
||||
|
||||
export interface ReplayEntry { cols: number; rows: number; data: string; }
|
||||
|
||||
export interface IRemoteTerminalProcessReplayEvent {
|
||||
type: 'replay';
|
||||
events: ReplayEntry[];
|
||||
}
|
||||
|
||||
export class TerminalRecorder {
|
||||
|
||||
private _entries: RecorderEntry[];
|
||||
private _totalDataLength: number;
|
||||
|
||||
constructor(cols: number, rows: number) {
|
||||
this._entries = [{ cols, rows, data: [] }];
|
||||
this._totalDataLength = 0;
|
||||
}
|
||||
|
||||
public recordResize(cols: number, rows: number): void {
|
||||
if (this._entries.length > 0) {
|
||||
const lastEntry = this._entries[this._entries.length - 1];
|
||||
if (lastEntry.data.length === 0) {
|
||||
// last entry is just a resize, so just remove it
|
||||
this._entries.pop();
|
||||
}
|
||||
}
|
||||
|
||||
if (this._entries.length > 0) {
|
||||
const lastEntry = this._entries[this._entries.length - 1];
|
||||
if (lastEntry.cols === cols && lastEntry.rows === rows) {
|
||||
// nothing changed
|
||||
return;
|
||||
}
|
||||
if (lastEntry.cols === 0 && lastEntry.rows === 0) {
|
||||
// we finally received a good size!
|
||||
lastEntry.cols = cols;
|
||||
lastEntry.rows = rows;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
this._entries.push({ cols, rows, data: [] });
|
||||
}
|
||||
|
||||
public recordData(data: string): void {
|
||||
const lastEntry = this._entries[this._entries.length - 1];
|
||||
lastEntry.data.push(data);
|
||||
|
||||
this._totalDataLength += data.length;
|
||||
while (this._totalDataLength > MAX_RECORDER_DATA_SIZE) {
|
||||
const firstEntry = this._entries[0];
|
||||
const remainingToDelete = this._totalDataLength - MAX_RECORDER_DATA_SIZE;
|
||||
if (remainingToDelete >= firstEntry.data[0].length) {
|
||||
// the first data piece must be deleted
|
||||
this._totalDataLength -= firstEntry.data[0].length;
|
||||
firstEntry.data.shift();
|
||||
if (firstEntry.data.length === 0) {
|
||||
// the first entry must be deleted
|
||||
this._entries.shift();
|
||||
}
|
||||
} else {
|
||||
// the first data piece must be partially deleted
|
||||
firstEntry.data[0] = firstEntry.data[0].substr(remainingToDelete);
|
||||
this._totalDataLength -= remainingToDelete;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public generateReplayEvent(): IRemoteTerminalProcessReplayEvent {
|
||||
// normalize entries to one element per data array
|
||||
this._entries.forEach((entry) => {
|
||||
if (entry.data.length > 0) {
|
||||
entry.data = [entry.data.join('')];
|
||||
}
|
||||
});
|
||||
return {
|
||||
type: 'replay',
|
||||
events: this._entries.map(entry => ({ cols: entry.cols, rows: entry.rows, data: entry.data[0] ?? '' }))
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -3,12 +3,18 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Emitter } from 'vs/base/common/event';
|
||||
import { Queue, RunOnceScheduler } from 'vs/base/common/async';
|
||||
import { Event, Emitter } from 'vs/base/common/event';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { IProcessEnvironment } from 'vs/base/common/platform';
|
||||
import { ProtocolConstants } from 'vs/base/parts/ipc/common/ipc.net';
|
||||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { ICommonLocalPtyService, IProcessDataEvent, IShellLaunchConfig, ITerminalChildProcess, ITerminalDimensionsOverride, ITerminalLaunchError } from 'vs/platform/terminal/common/terminal';
|
||||
import { AutoOpenBarrier } from 'vs/platform/terminal/common/autoOpenBarrier';
|
||||
import { IRemoteTerminalProcessDataEvent, IRemoteTerminalProcessEvent, IRemoteTerminalProcessExitEvent, IRemoteTerminalProcessOrphanQuestionEvent, IRemoteTerminalProcessReadyEvent, IRemoteTerminalProcessTitleChangedEvent } from 'vs/platform/terminal/common/terminalProcess';
|
||||
import { ICommonLocalPtyService, IProcessDataEvent, IShellLaunchConfig, ITerminalDimensionsOverride, ITerminalLaunchError, printTime } from 'vs/platform/terminal/common/terminal';
|
||||
import { TerminalDataBufferer } from 'vs/platform/terminal/common/terminalDataBuffering';
|
||||
import { TerminalRecorder } from 'vs/platform/terminal/common/terminalRecorder';
|
||||
import { TerminalProcess } from 'vs/platform/terminal/node/terminalProcess';
|
||||
|
||||
export const ILocalPtyMainService = createDecorator<ILocalPtyMainService>('localPtyMainService');
|
||||
@@ -20,7 +26,7 @@ let currentLocalPtyId = 0;
|
||||
export class LocalPtyMainService extends Disposable implements ICommonLocalPtyService {
|
||||
declare readonly _serviceBrand: undefined;
|
||||
|
||||
private readonly _localPtys: Map<number, ITerminalChildProcess> = new Map();
|
||||
private readonly _localPtys: Map<number, PersistentTerminalProcess> = new Map();
|
||||
|
||||
private readonly _onProcessData = this._register(new Emitter<{ id: number, event: IProcessDataEvent | string }>());
|
||||
readonly onProcessData = this._onProcessData.event;
|
||||
@@ -41,6 +47,13 @@ export class LocalPtyMainService extends Disposable implements ICommonLocalPtySe
|
||||
super();
|
||||
}
|
||||
|
||||
acknowledgeDataEvent(id: number, charCount: number): Promise<void> {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
getLatency(id: number): Promise<number> {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
|
||||
async createProcess(shellLaunchConfig: IShellLaunchConfig, cwd: string, cols: number, rows: number, env: IProcessEnvironment, executableEnv: IProcessEnvironment, windowsEnableConpty: boolean): Promise<number> {
|
||||
const id = ++currentLocalPtyId;
|
||||
const process = new TerminalProcess(shellLaunchConfig, cwd, cols, rows, env, executableEnv, windowsEnableConpty, this._logService);
|
||||
@@ -54,7 +67,11 @@ export class LocalPtyMainService extends Disposable implements ICommonLocalPtySe
|
||||
if (process.onProcessResolvedShellLaunchConfig) {
|
||||
process.onProcessResolvedShellLaunchConfig(event => this._onProcessResolvedShellLaunchConfig.fire({ id, event }));
|
||||
}
|
||||
this._localPtys.set(id, process);
|
||||
const persistentTerminalProcess = new PersistentTerminalProcess(id, process, '', '', true, cols, rows, '', this._logService, () => {
|
||||
persistentTerminalProcess.dispose();
|
||||
this._localPtys.delete(id);
|
||||
});
|
||||
this._localPtys.set(id, persistentTerminalProcess);
|
||||
return id;
|
||||
}
|
||||
|
||||
@@ -74,10 +91,6 @@ export class LocalPtyMainService extends Disposable implements ICommonLocalPtySe
|
||||
return this._throwIfNoPty(id).resize(cols, rows);
|
||||
}
|
||||
|
||||
async acknowledgeDataEvent(id: number, charCount: number): Promise<void> {
|
||||
return this._throwIfNoPty(id).acknowledgeDataEvent(charCount);
|
||||
}
|
||||
|
||||
async getInitialCwd(id: number): Promise<string> {
|
||||
return this._throwIfNoPty(id).getInitialCwd();
|
||||
}
|
||||
@@ -86,11 +99,7 @@ export class LocalPtyMainService extends Disposable implements ICommonLocalPtySe
|
||||
return this._throwIfNoPty(id).getCwd();
|
||||
}
|
||||
|
||||
async getLatency(id: number): Promise<number> {
|
||||
return this._throwIfNoPty(id).getLatency();
|
||||
}
|
||||
|
||||
private _throwIfNoPty(id: number): ITerminalChildProcess {
|
||||
private _throwIfNoPty(id: number): PersistentTerminalProcess {
|
||||
const pty = this._localPtys.get(id);
|
||||
if (!pty) {
|
||||
throw new Error(`Could not find pty with id "${id}"`);
|
||||
@@ -98,3 +107,218 @@ export class LocalPtyMainService extends Disposable implements ICommonLocalPtySe
|
||||
return pty;
|
||||
}
|
||||
}
|
||||
|
||||
export class PersistentTerminalProcess extends Disposable {
|
||||
|
||||
private readonly _events: Emitter<IRemoteTerminalProcessEvent>;
|
||||
public readonly events: Event<IRemoteTerminalProcessEvent>;
|
||||
|
||||
private readonly _bufferer: TerminalDataBufferer;
|
||||
|
||||
private readonly _pendingCommands = new Map<number, { resolve: (data: any) => void; reject: (err: any) => void; }>();
|
||||
|
||||
private readonly _recorder: TerminalRecorder;
|
||||
private _seenFirstListener: boolean;
|
||||
|
||||
private _orphanQuestionBarrier: AutoOpenBarrier | null;
|
||||
private _orphanQuestionReplyTime: number;
|
||||
private _orphanRequestQueue = new Queue<boolean>();
|
||||
private _disconnectRunner1: RunOnceScheduler;
|
||||
private _disconnectRunner2: RunOnceScheduler;
|
||||
|
||||
private _title = '';
|
||||
private _pid = -1;
|
||||
|
||||
public get pid(): number {
|
||||
return this._pid;
|
||||
}
|
||||
|
||||
public get title(): string {
|
||||
return this._title;
|
||||
}
|
||||
|
||||
constructor(
|
||||
private readonly _id: number,
|
||||
private readonly _terminalProcess: TerminalProcess,
|
||||
public readonly workspaceId: string,
|
||||
public readonly workspaceName: string,
|
||||
public readonly shouldPersistTerminal: boolean,
|
||||
cols: number, rows: number,
|
||||
ipcHandlePath: string,
|
||||
private readonly _logService: ILogService,
|
||||
private readonly _onExit: () => void,
|
||||
) {
|
||||
super();
|
||||
|
||||
this._recorder = new TerminalRecorder(cols, rows);
|
||||
this._seenFirstListener = false;
|
||||
|
||||
this._orphanQuestionBarrier = null;
|
||||
this._orphanQuestionReplyTime = 0;
|
||||
this._disconnectRunner1 = this._register(new RunOnceScheduler(() => {
|
||||
this._logService.info(`The reconnection grace time of ${printTime(ProtocolConstants.ReconnectionGraceTime)} has expired, so the terminal process with pid ${this._pid} will be shutdown.`);
|
||||
this.shutdown(true);
|
||||
}, ProtocolConstants.ReconnectionGraceTime));
|
||||
this._disconnectRunner2 = this._register(new RunOnceScheduler(() => {
|
||||
this._logService.info(`The short reconnection grace time of ${printTime(ProtocolConstants.ReconnectionShortGraceTime)} has expired, so the terminal process with pid ${this._pid} will be shutdown.`);
|
||||
this.shutdown(true);
|
||||
}, ProtocolConstants.ReconnectionShortGraceTime));
|
||||
|
||||
this._events = this._register(new Emitter<IRemoteTerminalProcessEvent>({
|
||||
onListenerDidAdd: () => {
|
||||
this._disconnectRunner1.cancel();
|
||||
this._disconnectRunner2.cancel();
|
||||
if (this._seenFirstListener) {
|
||||
// only replay events to subsequent (reconnected) listeners
|
||||
this._triggerReplay();
|
||||
}
|
||||
this._seenFirstListener = true;
|
||||
},
|
||||
onLastListenerRemove: () => {
|
||||
if (this.shouldPersistTerminal) {
|
||||
this._disconnectRunner1.schedule();
|
||||
} else {
|
||||
this.shutdown(true);
|
||||
}
|
||||
}
|
||||
}));
|
||||
this.events = this._events.event;
|
||||
|
||||
this._bufferer = new TerminalDataBufferer((id, data) => {
|
||||
const ev: IRemoteTerminalProcessDataEvent = {
|
||||
type: 'data',
|
||||
data: data
|
||||
};
|
||||
this._events.fire(ev);
|
||||
});
|
||||
|
||||
this._register(this._terminalProcess.onProcessReady((e: { pid: number, cwd: string; }) => {
|
||||
this._pid = e.pid;
|
||||
const ev: IRemoteTerminalProcessReadyEvent = {
|
||||
type: 'ready',
|
||||
pid: e.pid,
|
||||
cwd: e.cwd
|
||||
};
|
||||
this._events.fire(ev);
|
||||
}));
|
||||
|
||||
this._register(this._terminalProcess.onProcessTitleChanged((title) => {
|
||||
this._title = title;
|
||||
const ev: IRemoteTerminalProcessTitleChangedEvent = {
|
||||
type: 'titleChanged',
|
||||
title: title
|
||||
};
|
||||
this._events.fire(ev);
|
||||
}));
|
||||
|
||||
// Buffer data events to reduce the amount of messages going to the renderer
|
||||
this._register(this._bufferer.startBuffering(this._id, this._terminalProcess.onProcessData));
|
||||
this._register(this._terminalProcess.onProcessData(e => {
|
||||
this._recorder.recordData(e);
|
||||
}));
|
||||
this._register(this._terminalProcess.onProcessExit(exitCode => {
|
||||
this._bufferer.stopBuffering(this._id);
|
||||
|
||||
const ev: IRemoteTerminalProcessExitEvent = {
|
||||
type: 'exit',
|
||||
exitCode: exitCode
|
||||
};
|
||||
this._events.fire(ev);
|
||||
|
||||
// Remove process reference
|
||||
this._onExit();
|
||||
}));
|
||||
}
|
||||
|
||||
public start(): Promise<ITerminalLaunchError | undefined> {
|
||||
return this._terminalProcess.start();
|
||||
}
|
||||
|
||||
public shutdown(immediate: boolean): void {
|
||||
return this._terminalProcess.shutdown(immediate);
|
||||
}
|
||||
|
||||
public input(data: string): void {
|
||||
return this._terminalProcess.input(data);
|
||||
}
|
||||
|
||||
public acknowledgeCharCount(charCount: number): void {
|
||||
return this._terminalProcess.acknowledgeDataEvent(charCount);
|
||||
}
|
||||
|
||||
public resize(cols: number, rows: number): void {
|
||||
this._recorder.recordResize(cols, rows);
|
||||
return this._terminalProcess.resize(cols, rows);
|
||||
}
|
||||
|
||||
public getInitialCwd(): Promise<string> {
|
||||
return this._terminalProcess.getInitialCwd();
|
||||
}
|
||||
|
||||
public getCwd(): Promise<string> {
|
||||
return this._terminalProcess.getCwd();
|
||||
}
|
||||
|
||||
private _triggerReplay(): void {
|
||||
const ev = this._recorder.generateReplayEvent();
|
||||
let dataLength = 0;
|
||||
for (const e of ev.events) {
|
||||
dataLength += e.data.length;
|
||||
}
|
||||
|
||||
this._logService.info(`Replaying ${dataLength} chars and ${ev.events.length} size events.`);
|
||||
this._events.fire(ev);
|
||||
this._terminalProcess.clearUnacknowledgedChars();
|
||||
}
|
||||
|
||||
public sendCommandResult(reqId: number, isError: boolean, serializedPayload: any): void {
|
||||
const data = this._pendingCommands.get(reqId);
|
||||
if (!data) {
|
||||
return;
|
||||
}
|
||||
this._pendingCommands.delete(reqId);
|
||||
}
|
||||
|
||||
public async orphanQuestionReply(): Promise<void> {
|
||||
this._orphanQuestionReplyTime = Date.now();
|
||||
if (this._orphanQuestionBarrier) {
|
||||
const barrier = this._orphanQuestionBarrier;
|
||||
this._orphanQuestionBarrier = null;
|
||||
barrier.open();
|
||||
}
|
||||
}
|
||||
|
||||
public reduceGraceTime(): void {
|
||||
if (this._disconnectRunner2.isScheduled()) {
|
||||
// we are disconnected and already running the short reconnection timer
|
||||
return;
|
||||
}
|
||||
if (this._disconnectRunner1.isScheduled()) {
|
||||
// we are disconnected and running the long reconnection timer
|
||||
this._disconnectRunner2.schedule();
|
||||
}
|
||||
}
|
||||
|
||||
public async isOrphaned(): Promise<boolean> {
|
||||
return await this._orphanRequestQueue.queue(async () => this._isOrphaned());
|
||||
}
|
||||
|
||||
private async _isOrphaned(): Promise<boolean> {
|
||||
if (this._disconnectRunner1.isScheduled() || this._disconnectRunner2.isScheduled()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!this._orphanQuestionBarrier) {
|
||||
// the barrier opens after 4 seconds with or without a reply
|
||||
this._orphanQuestionBarrier = new AutoOpenBarrier(4000);
|
||||
this._orphanQuestionReplyTime = 0;
|
||||
const ev: IRemoteTerminalProcessOrphanQuestionEvent = {
|
||||
type: 'orphan?'
|
||||
};
|
||||
this._events.fire(ev);
|
||||
}
|
||||
|
||||
await this._orphanQuestionBarrier.wait();
|
||||
return (Date.now() - this._orphanQuestionReplyTime > 500);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { DisposableStore, Disposable, IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { ITerminalProcessExtHostProxy, ISpawnExtHostProcessRequest, IAvailableShellsRequest, IDefaultShellAndArgsRequest, IStartExtensionTerminalRequest, ITerminalConfiguration, TERMINAL_CONFIG_SECTION } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { ITerminalProcessExtHostProxy, ISpawnExtHostProcessRequest, IAvailableShellsRequest, IDefaultShellAndArgsRequest, IStartExtensionTerminalRequest, ITerminalConfiguration, TERMINAL_CONFIG_SECTION, IShellLaunchConfig, ITerminalDimensions } from 'vs/platform/terminal/common/terminal';
|
||||
import { ExtHostContext, ExtHostTerminalServiceShape, MainThreadTerminalServiceShape, MainContext, IExtHostContext, IShellLaunchConfigDto, TerminalLaunchConfig, ITerminalDimensionsDto, TerminalIdentifier } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
@@ -12,12 +12,11 @@ import { StopWatch } from 'vs/base/common/stopwatch';
|
||||
import { ITerminalInstanceService, ITerminalService, ITerminalInstance, ITerminalExternalLinkProvider, ITerminalLink } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { TerminalDataBufferer } from 'vs/workbench/contrib/terminal/common/terminalDataBuffering';
|
||||
import { IEnvironmentVariableService, ISerializableEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { TerminalDataBufferer } from 'vs/platform/terminal/common/terminalDataBuffering';
|
||||
import { IEnvironmentVariableService, ISerializableEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariable';
|
||||
import { deserializeEnvironmentVariableCollection, serializeEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariableShared';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { IShellLaunchConfig, ITerminalDimensions } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
@extHostNamedCustomer(MainContext.MainThreadTerminalService)
|
||||
export class MainThreadTerminalService implements MainThreadTerminalServiceShape {
|
||||
|
||||
@@ -53,7 +53,7 @@ import { revive } from 'vs/base/common/marshalling';
|
||||
import { IProcessedOutput, INotebookDisplayOrder, NotebookCellMetadata, NotebookDocumentMetadata, ICellEditOperation, NotebookCellsChangedEventDto, NotebookDataDto, IMainCellDto, INotebookDocumentFilter, INotebookKernelInfoDto2, TransientMetadata, INotebookCellStatusBarEntry, ICellRange, INotebookDecorationRenderOptions, INotebookExclusiveDocumentFilter } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { CallHierarchyItem } from 'vs/workbench/contrib/callHierarchy/common/callHierarchy';
|
||||
import { Dto } from 'vs/base/common/types';
|
||||
import { ISerializableEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { ISerializableEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariable';
|
||||
import { DebugConfigurationProviderTriggerKind, WorkspaceTrustState } from 'vs/workbench/api/common/extHostTypes';
|
||||
import { IAccessibilityInformation } from 'vs/platform/accessibility/common/accessibility';
|
||||
import { IExtensionIdWithVersion } from 'vs/platform/userDataSync/common/extensionsStorageSync';
|
||||
|
||||
@@ -15,7 +15,7 @@ import { TerminalDataBufferer } from 'vs/workbench/contrib/terminal/common/termi
|
||||
import { IDisposable, DisposableStore, Disposable } from 'vs/base/common/lifecycle';
|
||||
import { Disposable as VSCodeDisposable, EnvironmentVariableMutatorType } from './extHostTypes';
|
||||
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
|
||||
import { ISerializableEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { ISerializableEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariable';
|
||||
import { localize } from 'vs/nls';
|
||||
import { NotSupportedError } from 'vs/base/common/errors';
|
||||
import { serializeEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariableShared';
|
||||
|
||||
@@ -11,11 +11,11 @@ import { ExtensionActivationTimesBuilder } from 'vs/workbench/api/common/extHost
|
||||
import { connectProxyResolver } from 'vs/workbench/services/extensions/node/proxyResolver';
|
||||
import { AbstractExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService';
|
||||
import { ExtHostDownloadService } from 'vs/workbench/api/node/extHostDownloadService';
|
||||
import { CLIServer } from 'vs/workbench/api/node/extHostCLIServer';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { Schemas } from 'vs/base/common/network';
|
||||
import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions';
|
||||
import { ExtensionRuntime } from 'vs/workbench/api/common/extHostTypes';
|
||||
import { CLIServer } from 'vs/workbench/api/node/extHostCLIServer';
|
||||
|
||||
class NodeModuleRequireInterceptor extends RequireInterceptor {
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import * as paths from 'vs/base/common/path';
|
||||
import { IExternalTerminalService } from 'vs/workbench/contrib/externalTerminal/common/externalTerminal';
|
||||
import { MenuId, MenuRegistry } from 'vs/platform/actions/common/actions';
|
||||
import { KeyMod, KeyCode } from 'vs/base/common/keyCodes';
|
||||
import { KEYBINDING_CONTEXT_TERMINAL_NOT_FOCUSED } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { KEYBINDING_CONTEXT_TERMINAL_NOT_FOCUSED } from 'vs/platform/terminal/common/terminal';
|
||||
import { IHistoryService } from 'vs/workbench/services/history/common/history';
|
||||
import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
|
||||
import { Schemas } from 'vs/base/common/network';
|
||||
|
||||
@@ -27,7 +27,7 @@ import Constants from 'vs/workbench/contrib/markers/browser/constants';
|
||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||
|
||||
import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver';
|
||||
import { TERMINAL_VIEW_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { TERMINAL_VIEW_ID, IShellLaunchConfig } from 'vs/platform/terminal/common/terminal';
|
||||
import { ITerminalService, ITerminalInstanceService, ITerminalInstance } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { IOutputService } from 'vs/workbench/contrib/output/common/output';
|
||||
import { StartStopProblemCollector, WatchingProblemCollector, ProblemCollectorEventKind, ProblemHandlingStrategy } from 'vs/workbench/contrib/tasks/common/problemCollectors';
|
||||
@@ -48,7 +48,6 @@ import { env as processEnv, cwd as processCwd } from 'vs/base/common/process';
|
||||
import { IViewsService, IViewDescriptorService, ViewContainerLocation } from 'vs/workbench/common/views';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { IShellLaunchConfig } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
interface TerminalData {
|
||||
terminal: ITerminalInstance;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import type { Terminal, IMarker, ITerminalAddon } from 'xterm';
|
||||
import { ICommandTracker } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { ICommandTracker } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
/**
|
||||
* The minimum size of the prompt in which to assume the line is a command.
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import { IContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||
import type { Terminal, ITerminalAddon } from 'xterm';
|
||||
import { addDisposableListener } from 'vs/base/browser/dom';
|
||||
import { INavigationMode } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { INavigationMode } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
export class NavigationModeAddon implements INavigationMode, ITerminalAddon {
|
||||
private _terminal: Terminal | undefined;
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IEnvironmentVariableInfo, IMergedEnvironmentVariableCollection, IMergedEnvironmentVariableCollectionDiff, EnvironmentVariableMutatorType } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { IEnvironmentVariableInfo, IMergedEnvironmentVariableCollection, IMergedEnvironmentVariableCollectionDiff, EnvironmentVariableMutatorType } from 'vs/platform/terminal/common/environmentVariable';
|
||||
import { TERMINAL_COMMAND_ID } from 'vs/platform/terminal/common/terminal';
|
||||
import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { localize } from 'vs/nls';
|
||||
import { ThemeIcon } from 'vs/platform/theme/common/themeService';
|
||||
|
||||
@@ -9,7 +9,7 @@ import { DisposableStore, IDisposable, dispose } from 'vs/base/common/lifecycle'
|
||||
import { IOpenerService } from 'vs/platform/opener/common/opener';
|
||||
import { TerminalWidgetManager } from 'vs/workbench/contrib/terminal/browser/widgets/widgetManager';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { ITerminalProcessManager, ITerminalConfiguration, TERMINAL_CONFIG_SECTION } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { ITerminalProcessManager, ITerminalConfiguration, TERMINAL_CONFIG_SECTION } from 'vs/platform/terminal/common/terminal';
|
||||
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';
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
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 { ITerminalConfiguration, TERMINAL_CONFIG_SECTION } from 'vs/platform/terminal/common/terminal';
|
||||
import { TerminalLink } from 'vs/workbench/contrib/terminal/browser/links/terminalLink';
|
||||
import { localize } from 'vs/nls';
|
||||
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
|
||||
|
||||
@@ -14,10 +14,8 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { IRemoteTerminalService, ITerminalInstanceService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { IRemoteTerminalProcessExecCommandEvent, IShellLaunchConfigDto, RemoteTerminalChannelClient, REMOTE_TERMINAL_CHANNEL_NAME } from 'vs/workbench/contrib/terminal/common/remoteTerminalChannel';
|
||||
import { IRemoteTerminalAttachTarget, ITerminalConfigHelper, ITerminalsLayoutInfo, ITerminalsLayoutInfoById } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { IProcessDataEvent, IShellLaunchConfig, ITerminalChildProcess, ITerminalDimensionsOverride, ITerminalLaunchError, IRemoteTerminalAttachTarget, ITerminalConfigHelper, ITerminalsLayoutInfo, ITerminalsLayoutInfoById } from 'vs/platform/terminal/common/terminal';
|
||||
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||
import { IProcessDataEvent, IShellLaunchConfig, ITerminalChildProcess, ITerminalDimensionsOverride, ITerminalLaunchError } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
export class RemoteTerminalService extends Disposable implements IRemoteTerminalService {
|
||||
public _serviceBrand: undefined;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ import { getQuickNavigateHandler } from 'vs/workbench/browser/quickaccess';
|
||||
import { Extensions as ViewContainerExtensions, IViewContainersRegistry, ViewContainerLocation, IViewsRegistry } from 'vs/workbench/common/views';
|
||||
import { registerTerminalActions, 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, TERMINAL_VIEW_ID, TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE_KEY, KEYBINDING_CONTEXT_TERMINAL_FOCUS, TERMINAL_VIEW_ID, TERMINAL_COMMAND_ID } from 'vs/platform/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';
|
||||
|
||||
@@ -7,14 +7,13 @@ 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, IDefaultShellAndArgsRequest, ISpawnExtHostProcessRequest, IStartExtensionTerminalRequest, IAvailableShellsRequest, ITerminalProcessExtHostProxy, ICommandTracker, INavigationMode, TitleEventSource, ITerminalNativeWindowsDelegate, LinuxDistro, IRemoteTerminalAttachTarget, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, ITerminalTabLayoutInfoById } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { IWindowsShellHelper, IShellLaunchConfig, ITerminalChildProcess, ITerminalDimensions, ITerminalLaunchError, ITerminalConfigHelper, IDefaultShellAndArgsRequest, ISpawnExtHostProcessRequest, IStartExtensionTerminalRequest, IAvailableShellsRequest, ITerminalProcessExtHostProxy, ICommandTracker, INavigationMode, TitleEventSource, ITerminalNativeWindowsDelegate, LinuxDistro, IRemoteTerminalAttachTarget, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, ITerminalTabLayoutInfoById } from 'vs/platform/terminal/common/terminal';
|
||||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IProcessEnvironment, Platform } from 'vs/base/common/platform';
|
||||
import { Event } from 'vs/base/common/event';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { FindReplaceState } from 'vs/editor/contrib/find/findState';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { IShellLaunchConfig, ITerminalChildProcess, ITerminalDimensions, ITerminalLaunchError } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
export const ITerminalService = createDecorator<ITerminalService>('terminalService');
|
||||
export const ITerminalInstanceService = createDecorator<ITerminalInstanceService>('terminalInstanceService');
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
|
||||
import { KeybindingWeight, KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { TERMINAL_COMMAND_ID } from 'vs/platform/terminal/common/terminal';
|
||||
import { IConfigurationRegistry, Extensions } from 'vs/platform/configuration/common/configurationRegistry';
|
||||
import { getNoDefaultTerminalShellConfiguration } from 'vs/workbench/contrib/terminal/common/terminalConfiguration';
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ import { RemoteNameContext } from 'vs/workbench/browser/contextkeys';
|
||||
import { FindInFilesCommand, IFindInFilesArgs } from 'vs/workbench/contrib/search/browser/searchActions';
|
||||
import { Direction, IRemoteTerminalService, ITerminalInstance, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { TerminalQuickAccessProvider } from 'vs/workbench/contrib/terminal/browser/terminalQuickAccess';
|
||||
import { IRemoteTerminalAttachTarget, ITerminalConfigHelper, KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS, KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED, KEYBINDING_CONTEXT_TERMINAL_FIND_NOT_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, TERMINAL_ACTION_CATEGORY, TERMINAL_COMMAND_ID, TERMINAL_VIEW_ID, TitleEventSource } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { IRemoteTerminalAttachTarget, ITerminalConfigHelper, KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS, KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED, KEYBINDING_CONTEXT_TERMINAL_FIND_NOT_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, TERMINAL_ACTION_CATEGORY, TERMINAL_COMMAND_ID, TERMINAL_VIEW_ID, TitleEventSource } from 'vs/platform/terminal/common/terminal';
|
||||
import { ITerminalContributionService } from 'vs/workbench/contrib/terminal/common/terminalExtensionPoints';
|
||||
import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver';
|
||||
import { IHistoryService } from 'vs/workbench/services/history/common/history';
|
||||
|
||||
@@ -8,7 +8,7 @@ import * as platform from 'vs/base/common/platform';
|
||||
import { EDITOR_FONT_DEFAULTS, IEditorOptions } from 'vs/editor/common/config/editorOptions';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
|
||||
import { ITerminalConfiguration, ITerminalFont, IS_WORKSPACE_SHELL_ALLOWED_STORAGE_KEY, TERMINAL_CONFIG_SECTION, DEFAULT_LETTER_SPACING, DEFAULT_LINE_HEIGHT, MINIMUM_LETTER_SPACING, LinuxDistro, MINIMUM_FONT_WEIGHT, MAXIMUM_FONT_WEIGHT, DEFAULT_FONT_WEIGHT, DEFAULT_BOLD_FONT_WEIGHT, FontWeight } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { ITerminalConfiguration, IShellLaunchConfig, ITerminalFont, IS_WORKSPACE_SHELL_ALLOWED_STORAGE_KEY, TERMINAL_CONFIG_SECTION, DEFAULT_LETTER_SPACING, DEFAULT_LINE_HEIGHT, MINIMUM_LETTER_SPACING, LinuxDistro, MINIMUM_FONT_WEIGHT, MAXIMUM_FONT_WEIGHT, DEFAULT_FONT_WEIGHT, DEFAULT_BOLD_FONT_WEIGHT, FontWeight } from 'vs/platform/terminal/common/terminal';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
import { INotificationService, NeverShowAgainScope } from 'vs/platform/notification/common/notification';
|
||||
import { IBrowserTerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
@@ -20,7 +20,6 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
|
||||
import { InstallRecommendedExtensionAction } from 'vs/workbench/contrib/extensions/browser/extensionsActions';
|
||||
import { IProductService } from 'vs/platform/product/common/productService';
|
||||
import { XTermCore } from 'vs/workbench/contrib/terminal/browser/xterm-private';
|
||||
import { IShellLaunchConfig } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
const MINIMUM_FONT_SIZE = 6;
|
||||
const MAXIMUM_FONT_SIZE = 25;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import { SimpleFindWidget } from 'vs/workbench/contrib/codeEditor/browser/find/simpleFindWidget';
|
||||
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||
import { KEYBINDING_CONTEXT_TERMINAL_FIND_INPUT_FOCUSED, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { KEYBINDING_CONTEXT_TERMINAL_FIND_INPUT_FOCUSED, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED } from 'vs/platform/terminal/common/terminal';
|
||||
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { FindReplaceState } from 'vs/editor/contrib/find/findState';
|
||||
import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
|
||||
@@ -25,7 +25,7 @@ import { activeContrastBorder, scrollbarSliderActiveBackground, scrollbarSliderB
|
||||
import { ICssStyleCollector, IColorTheme, IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
|
||||
import { PANEL_BACKGROUND, SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme';
|
||||
import { TerminalWidgetManager } from 'vs/workbench/contrib/terminal/browser/widgets/widgetManager';
|
||||
import { ITerminalProcessManager, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, NEVER_MEASURE_RENDER_TIME_STORAGE_KEY, ProcessState, TERMINAL_VIEW_ID, IWindowsShellHelper, KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS, INavigationMode, TitleEventSource, DEFAULT_COMMANDS_TO_SKIP_SHELL, TERMINAL_CREATION_COMMANDS, KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { ITerminalProcessManager, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, NEVER_MEASURE_RENDER_TIME_STORAGE_KEY, ProcessState, TERMINAL_VIEW_ID, IWindowsShellHelper, KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS, INavigationMode, TitleEventSource, DEFAULT_COMMANDS_TO_SKIP_SHELL, TERMINAL_CREATION_COMMANDS, KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE, IProcessDataEvent, IShellLaunchConfig, ITerminalDimensionsOverride, ITerminalLaunchError } from 'vs/platform/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 { TerminalLinkManager } from 'vs/workbench/contrib/terminal/browser/links/terminalLinkManager';
|
||||
@@ -42,12 +42,11 @@ import { XTermCore } from 'vs/workbench/contrib/terminal/browser/xterm-private';
|
||||
import { IEditorOptions } from 'vs/editor/common/config/editorOptions';
|
||||
import { IViewsService, IViewDescriptorService, ViewContainerLocation } from 'vs/workbench/common/views';
|
||||
import { EnvironmentVariableInfoWidget } from 'vs/workbench/contrib/terminal/browser/widgets/environmentVariableInfoWidget';
|
||||
import { IEnvironmentVariableInfo } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { IEnvironmentVariableInfo } from 'vs/platform/terminal/common/environmentVariable';
|
||||
import { TerminalLaunchHelpAction } from 'vs/workbench/contrib/terminal/browser/terminalActions';
|
||||
import { TypeAheadAddon } from 'vs/workbench/contrib/terminal/browser/terminalTypeAheadAddon';
|
||||
import { BrowserFeatures } from 'vs/base/browser/canIUse';
|
||||
import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences';
|
||||
import { IProcessDataEvent, IShellLaunchConfig, ITerminalDimensionsOverride, ITerminalLaunchError } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
// How long in milliseconds should an average frame take to render for a notification to appear
|
||||
// which suggests the fallback DOM-based renderer
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { ITerminalInstanceService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { IWindowsShellHelper, IDefaultShellAndArgsRequest } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { IWindowsShellHelper, IDefaultShellAndArgsRequest, ITerminalChildProcess } from 'vs/platform/terminal/common/terminal';
|
||||
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';
|
||||
@@ -12,7 +12,6 @@ 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';
|
||||
import { ITerminalChildProcess } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
let Terminal: typeof XTermTerminal;
|
||||
let SearchAddon: typeof XTermSearchAddon;
|
||||
|
||||
@@ -4,13 +4,12 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Event, Emitter } from 'vs/base/common/event';
|
||||
import { ITerminalProcessExtHostProxy, ITerminalConfigHelper } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { ITerminalProcessExtHostProxy, ITerminalConfigHelper, IShellLaunchConfig, ITerminalLaunchError, ITerminalChildProcess, ITerminalDimensionsOverride, ITerminalDimensions } from 'vs/platform/terminal/common/terminal';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||
import * as nls from 'vs/nls';
|
||||
import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { IShellLaunchConfig, ITerminalLaunchError, ITerminalChildProcess, ITerminalDimensionsOverride, ITerminalDimensions } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
let hasReceivedResponseFromRemoteExtHost: boolean = false;
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import * as platform from 'vs/base/common/platform';
|
||||
import * as terminalEnvironment from 'vs/workbench/contrib/terminal/common/terminalEnvironment';
|
||||
import { env as processEnv } from 'vs/base/common/process';
|
||||
import { ProcessState, ITerminalProcessManager, ITerminalConfigHelper, IBeforeProcessDataEvent } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { ProcessState, ITerminalProcessManager, ITerminalConfigHelper, IBeforeProcessDataEvent, IShellLaunchConfig, ITerminalEnvironment, ITerminalLaunchError, FlowControlConstants, ITerminalChildProcess, IProcessDataEvent, ITerminalDimensionsOverride } from 'vs/platform/terminal/common/terminal';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { Emitter, Event } from 'vs/base/common/event';
|
||||
import { IHistoryService } from 'vs/workbench/services/history/common/history';
|
||||
@@ -23,11 +23,10 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur
|
||||
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { withNullAsUndefined } from 'vs/base/common/types';
|
||||
import { IEnvironmentVariableService, IMergedEnvironmentVariableCollection, IEnvironmentVariableInfo } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { IEnvironmentVariableService, IMergedEnvironmentVariableCollection, IEnvironmentVariableInfo } from 'vs/platform/terminal/common/environmentVariable';
|
||||
import { EnvironmentVariableInfoChangesActive, EnvironmentVariableInfoStale } from 'vs/workbench/contrib/terminal/browser/environmentVariableInfo';
|
||||
import { IPathService } from 'vs/workbench/services/path/common/pathService';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { IShellLaunchConfig, ITerminalEnvironment, ITerminalLaunchError, FlowControlConstants, ITerminalChildProcess, IProcessDataEvent, ITerminalDimensionsOverride } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
/** The amount of time to consider terminal errors to be related to the launch */
|
||||
const LAUNCHING_DURATION = 500;
|
||||
|
||||
@@ -9,7 +9,7 @@ import { IPickerQuickAccessItem, PickerQuickAccessProvider, TriggerAction } from
|
||||
import { matchesFuzzy } from 'vs/base/common/filters';
|
||||
import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||
import { TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { TERMINAL_COMMAND_ID } from 'vs/platform/terminal/common/terminal';
|
||||
import { ThemeIcon } from 'vs/platform/theme/common/themeService';
|
||||
import { killTerminalIcon, renameTerminalIcon } from 'vs/workbench/contrib/terminal/browser/terminalIcons';
|
||||
|
||||
|
||||
@@ -19,14 +19,13 @@ import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IPickOptions, IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput';
|
||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||
import { IShellLaunchConfig, ITerminalLaunchError } from 'vs/platform/terminal/common/terminal';
|
||||
import { IAvailableShellsRequest, IRemoteTerminalAttachTarget, IShellDefinition, IShellLaunchConfig, ISpawnExtHostProcessRequest, IStartExtensionTerminalRequest, ITerminalConfigHelper, ITerminalLaunchError, ITerminalNativeWindowsDelegate, ITerminalProcessExtHostProxy, ITerminalsLayoutInfoById, KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE, LinuxDistro, TERMINAL_VIEW_ID } from 'vs/platform/terminal/common/terminal';
|
||||
import { IViewDescriptorService, IViewsService, ViewContainerLocation } from 'vs/workbench/common/views';
|
||||
import { TerminalConnectionState, IRemoteTerminalService, ITerminalExternalLinkProvider, ITerminalInstance, ITerminalService, ITerminalTab, TerminalShellType, WindowsShellType } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/terminalConfigHelper';
|
||||
import { TerminalInstance } from 'vs/workbench/contrib/terminal/browser/terminalInstance';
|
||||
import { TerminalTab } from 'vs/workbench/contrib/terminal/browser/terminalTab';
|
||||
import { TerminalViewPane } from 'vs/workbench/contrib/terminal/browser/terminalView';
|
||||
import { IAvailableShellsRequest, IRemoteTerminalAttachTarget, IShellDefinition, ISpawnExtHostProcessRequest, IStartExtensionTerminalRequest, ITerminalConfigHelper, ITerminalNativeWindowsDelegate, ITerminalProcessExtHostProxy, ITerminalsLayoutInfoById, KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE, LinuxDistro, TERMINAL_VIEW_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { escapeNonWindowsPath } from 'vs/workbench/contrib/terminal/common/terminalEnvironment';
|
||||
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
|
||||
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
|
||||
@@ -160,7 +159,7 @@ export class TerminalService implements ITerminalService {
|
||||
let reconnectCounter = 0;
|
||||
let activeTab: ITerminalTab | undefined;
|
||||
if (layoutInfo) {
|
||||
layoutInfo.tabs.forEach((tabLayout) => {
|
||||
layoutInfo.tabs.forEach((tabLayout: { terminals: any[]; isActive: any; activeTerminalProcessId: number | undefined; }) => {
|
||||
const terminalLayouts = tabLayout.terminals.filter(t => t.terminal && t.terminal.isOrphan);
|
||||
if (terminalLayouts.length) {
|
||||
reconnectCounter += terminalLayouts.length;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { ITerminalTabLayoutInfoById, TERMINAL_VIEW_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { ITerminalTabLayoutInfoById, TERMINAL_VIEW_ID, IShellLaunchConfig } from 'vs/platform/terminal/common/terminal';
|
||||
import { Event, Emitter } from 'vs/base/common/event';
|
||||
import { IDisposable, Disposable, DisposableStore } from 'vs/base/common/lifecycle';
|
||||
import { SplitView, Orientation, IView, Sizing } from 'vs/base/browser/ui/splitview/splitview';
|
||||
@@ -11,7 +11,6 @@ import { IWorkbenchLayoutService, Parts, Position } from 'vs/workbench/services/
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { ITerminalInstance, Direction, ITerminalTab, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { ViewContainerLocation, IViewDescriptorService } from 'vs/workbench/common/views';
|
||||
import { IShellLaunchConfig } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
const SPLIT_PANE_MIN_SIZE = 120;
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import { escapeRegExpCharacters } from 'vs/base/common/strings';
|
||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||
import { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/terminalConfigHelper';
|
||||
import { XTermAttributes, XTermCore } from 'vs/workbench/contrib/terminal/browser/xterm-private';
|
||||
import { DEFAULT_LOCAL_ECHO_EXCLUDE, IBeforeProcessDataEvent, ITerminalConfiguration, ITerminalProcessManager } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { DEFAULT_LOCAL_ECHO_EXCLUDE, IBeforeProcessDataEvent, ITerminalConfiguration, ITerminalProcessManager } from 'vs/platform/terminal/common/terminal';
|
||||
import type { IBuffer, IBufferCell, IDisposable, ITerminalAddon, Terminal } from 'xterm';
|
||||
|
||||
const ESC = '\x1b';
|
||||
|
||||
@@ -28,7 +28,7 @@ import { IOpenerService } from 'vs/platform/opener/common/opener';
|
||||
import { PANEL_BACKGROUND, SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme';
|
||||
import { IMenu, IMenuService, MenuId } from 'vs/platform/actions/common/actions';
|
||||
import { createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem';
|
||||
import { TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { TERMINAL_COMMAND_ID } from 'vs/platform/terminal/common/terminal';
|
||||
import { SelectActionViewItem } from 'vs/base/browser/ui/actionbar/actionViewItems';
|
||||
import { ITerminalContributionService } from 'vs/workbench/contrib/terminal/common/terminalExtensionPoints';
|
||||
import { attachSelectBoxStyler, attachStylerCallback } from 'vs/platform/theme/common/styler';
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Widget } from 'vs/base/browser/ui/widget';
|
||||
import { IEnvironmentVariableInfo } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { IEnvironmentVariableInfo } from 'vs/platform/terminal/common/environmentVariable';
|
||||
import { MarkdownString } from 'vs/base/common/htmlContent';
|
||||
import { ITerminalWidget } from 'vs/workbench/contrib/terminal/browser/widgets/widgets';
|
||||
import { RunOnceScheduler } from 'vs/base/common/async';
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IEnvironmentVariableService } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { IEnvironmentVariableService } from 'vs/platform/terminal/common/environmentVariable';
|
||||
import { EnvironmentVariableService } from 'vs/workbench/contrib/terminal/common/environmentVariableService';
|
||||
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IEnvironmentVariableCollection, EnvironmentVariableMutatorType, IMergedEnvironmentVariableCollection, IMergedEnvironmentVariableCollectionDiff, IExtensionOwnedEnvironmentVariableMutator } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { IEnvironmentVariableCollection, EnvironmentVariableMutatorType, IMergedEnvironmentVariableCollection, IMergedEnvironmentVariableCollectionDiff, IExtensionOwnedEnvironmentVariableMutator } from 'vs/platform/terminal/common/environmentVariable';
|
||||
import { IProcessEnvironment, isWindows } from 'vs/base/common/platform';
|
||||
|
||||
export class MergedEnvironmentVariableCollection implements IMergedEnvironmentVariableCollection {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IEnvironmentVariableService, IMergedEnvironmentVariableCollection, ISerializableEnvironmentVariableCollection, IEnvironmentVariableCollectionWithPersistence } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { IEnvironmentVariableService, IMergedEnvironmentVariableCollection, ISerializableEnvironmentVariableCollection, IEnvironmentVariableCollectionWithPersistence } from 'vs/platform/terminal/common/environmentVariable';
|
||||
import { Event, Emitter } from 'vs/base/common/event';
|
||||
import { debounce, throttle } from 'vs/base/common/decorators';
|
||||
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IEnvironmentVariableMutator, ISerializableEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { IEnvironmentVariableMutator, ISerializableEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariable';
|
||||
|
||||
// This file is shared between the renderer and extension host
|
||||
|
||||
|
||||
@@ -11,15 +11,14 @@ import { IWorkbenchConfigurationService } from 'vs/workbench/services/configurat
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remoteAuthorityResolver';
|
||||
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
|
||||
import { IEnvironmentVariableService, ISerializableEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { IEnvironmentVariableService, ISerializableEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariable';
|
||||
import { serializeEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariableShared';
|
||||
import { IRawTerminalTabLayoutInfo, ITerminalConfiguration, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, ITerminalTabLayoutInfoById, TERMINAL_CONFIG_SECTION } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver';
|
||||
import { SideBySideEditor, EditorResourceAccessor } from 'vs/workbench/common/editor';
|
||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { Schemas } from 'vs/base/common/network';
|
||||
import { ILabelService } from 'vs/platform/label/common/label';
|
||||
import { ITerminalEnvironment, ITerminalLaunchError } from 'vs/platform/terminal/common/terminal';
|
||||
import { IRawTerminalTabLayoutInfo, ITerminalConfiguration, ITerminalEnvironment, ITerminalLaunchError, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, ITerminalTabLayoutInfoById, TERMINAL_CONFIG_SECTION } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
export const REMOTE_TERMINAL_CHANNEL_NAME = 'remoteterminal';
|
||||
|
||||
|
||||
@@ -1,595 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as nls from 'vs/nls';
|
||||
import { Event } from 'vs/base/common/event';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { RawContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
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';
|
||||
import { IProcessDataEvent, IShellLaunchConfig, ITerminalDimensions, ITerminalDimensionsOverride, ITerminalLaunchError } from 'vs/platform/terminal/common/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);
|
||||
|
||||
/** A context key that is set when the integrated terminal has focus. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_FOCUS = new RawContextKey<boolean>('terminalFocus', false);
|
||||
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE_KEY = 'terminalShellType';
|
||||
/** A context key that is set to the detected shell for the most recently active terminal, this is set to the last known value when no terminals exist. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE = new RawContextKey<string>(KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE_KEY, undefined);
|
||||
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE = new RawContextKey<boolean>('terminalAltBufferActive', false);
|
||||
|
||||
/** A context key that is set when the integrated terminal does not have focus. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_NOT_FOCUSED = KEYBINDING_CONTEXT_TERMINAL_FOCUS.toNegated();
|
||||
|
||||
/** A context key that is set when the user is navigating the accessibility tree */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS = new RawContextKey<boolean>('terminalA11yTreeFocus', false);
|
||||
|
||||
/** A keybinding context key that is set when the integrated terminal has text selected. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED = new RawContextKey<boolean>('terminalTextSelected', false);
|
||||
/** A keybinding context key that is set when the integrated terminal does not have text selected. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_TEXT_NOT_SELECTED = KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED.toNegated();
|
||||
|
||||
/** A context key that is set when the find widget in integrated terminal is visible. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE = new RawContextKey<boolean>('terminalFindVisible', false);
|
||||
/** A context key that is set when the find widget in integrated terminal is not visible. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_FIND_NOT_VISIBLE = KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE.toNegated();
|
||||
/** A context key that is set when the find widget find input in integrated terminal is focused. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_FIND_INPUT_FOCUSED = new RawContextKey<boolean>('terminalFindInputFocused', false);
|
||||
/** A context key that is set when the find widget in integrated terminal is focused. */
|
||||
export const KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED = new RawContextKey<boolean>('terminalFindFocused', false);
|
||||
/** 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';
|
||||
|
||||
export const TERMINAL_CREATION_COMMANDS = ['workbench.action.terminal.toggleTerminal', 'workbench.action.terminal.new', 'workbench.action.togglePanel', 'workbench.action.terminal.focus'];
|
||||
|
||||
export const TerminalCursorStyle = {
|
||||
BLOCK: 'block',
|
||||
LINE: 'line',
|
||||
UNDERLINE: 'underline'
|
||||
};
|
||||
|
||||
export const TERMINAL_CONFIG_SECTION = 'terminal.integrated';
|
||||
|
||||
export const TERMINAL_ACTION_CATEGORY = nls.localize('terminalCategory', "Terminal");
|
||||
|
||||
export const DEFAULT_LETTER_SPACING = 0;
|
||||
export const MINIMUM_LETTER_SPACING = -5;
|
||||
export const DEFAULT_LINE_HEIGHT = 1;
|
||||
|
||||
export const MINIMUM_FONT_WEIGHT = 1;
|
||||
export const MAXIMUM_FONT_WEIGHT = 1000;
|
||||
export const DEFAULT_FONT_WEIGHT = 'normal';
|
||||
export const DEFAULT_BOLD_FONT_WEIGHT = 'bold';
|
||||
export const SUGGESTIONS_FONT_WEIGHT = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];
|
||||
|
||||
export type FontWeight = 'normal' | 'bold' | number;
|
||||
|
||||
export interface ITerminalConfiguration {
|
||||
shell: {
|
||||
linux: string | null;
|
||||
osx: string | null;
|
||||
windows: string | null;
|
||||
};
|
||||
automationShell: {
|
||||
linux: string | null;
|
||||
osx: string | null;
|
||||
windows: string | null;
|
||||
};
|
||||
shellArgs: {
|
||||
linux: string[];
|
||||
osx: string[];
|
||||
windows: string[];
|
||||
};
|
||||
altClickMovesCursor: boolean;
|
||||
macOptionIsMeta: boolean;
|
||||
macOptionClickForcesSelection: boolean;
|
||||
rendererType: 'auto' | 'canvas' | 'dom' | 'experimentalWebgl';
|
||||
rightClickBehavior: 'default' | 'copyPaste' | 'paste' | 'selectWord';
|
||||
cursorBlinking: boolean;
|
||||
cursorStyle: string;
|
||||
cursorWidth: number;
|
||||
drawBoldTextInBrightColors: boolean;
|
||||
fastScrollSensitivity: number;
|
||||
fontFamily: string;
|
||||
fontWeight: FontWeight;
|
||||
fontWeightBold: FontWeight;
|
||||
minimumContrastRatio: number;
|
||||
mouseWheelScrollSensitivity: number;
|
||||
sendKeybindingsToShell: boolean;
|
||||
// fontLigatures: boolean;
|
||||
fontSize: number;
|
||||
letterSpacing: number;
|
||||
lineHeight: number;
|
||||
detectLocale: 'auto' | 'off' | 'on';
|
||||
scrollback: number;
|
||||
commandsToSkipShell: string[];
|
||||
allowChords: boolean;
|
||||
allowMnemonics: boolean;
|
||||
cwd: string;
|
||||
confirmOnExit: boolean;
|
||||
enableBell: boolean;
|
||||
inheritEnv: boolean;
|
||||
env: {
|
||||
linux: { [key: string]: string };
|
||||
osx: { [key: string]: string };
|
||||
windows: { [key: string]: string };
|
||||
};
|
||||
environmentChangesIndicator: 'off' | 'on' | 'warnonly';
|
||||
showExitAlert: boolean;
|
||||
splitCwd: 'workspaceRoot' | 'initial' | 'inherited';
|
||||
windowsEnableConpty: boolean;
|
||||
wordSeparators: string;
|
||||
experimentalUseTitleEvent: boolean;
|
||||
enableFileLinks: boolean;
|
||||
unicodeVersion: '6' | '11';
|
||||
experimentalLinkProvider: boolean;
|
||||
localEchoLatencyThreshold: number;
|
||||
localEchoExcludePrograms: ReadonlyArray<string>;
|
||||
localEchoStyle: 'bold' | 'dim' | 'italic' | 'underlined' | 'inverted' | string;
|
||||
serverSpawn: boolean;
|
||||
mainSpawn: boolean;
|
||||
enablePersistentSessions: boolean;
|
||||
flowControl: boolean;
|
||||
}
|
||||
|
||||
export const DEFAULT_LOCAL_ECHO_EXCLUDE: ReadonlyArray<string> = ['vim', 'vi', 'nano', 'tmux'];
|
||||
|
||||
export interface ITerminalConfigHelper {
|
||||
config: ITerminalConfiguration;
|
||||
|
||||
onWorkspacePermissionsChanged: Event<boolean>;
|
||||
|
||||
configFontIsMonospace(): boolean;
|
||||
getFont(): ITerminalFont;
|
||||
/** Sets whether a workspace shell configuration is allowed or not */
|
||||
setWorkspaceShellAllowed(isAllowed: boolean): void;
|
||||
checkWorkspaceShellPermissions(osOverride?: OperatingSystem): boolean;
|
||||
showRecommendations(shellLaunchConfig: IShellLaunchConfig): void;
|
||||
}
|
||||
|
||||
export interface ITerminalFont {
|
||||
fontFamily: string;
|
||||
fontSize: number;
|
||||
letterSpacing: number;
|
||||
lineHeight: number;
|
||||
charWidth?: number;
|
||||
charHeight?: number;
|
||||
}
|
||||
|
||||
export interface IRemoteTerminalAttachTarget {
|
||||
id: number;
|
||||
pid: number;
|
||||
title: string;
|
||||
cwd: string;
|
||||
workspaceId: string;
|
||||
workspaceName: string;
|
||||
isOrphan: boolean;
|
||||
}
|
||||
|
||||
export interface IRawTerminalInstanceLayoutInfo<T> {
|
||||
relativeSize: number;
|
||||
terminal: T;
|
||||
}
|
||||
|
||||
export type ITerminalInstanceLayoutInfoById = IRawTerminalInstanceLayoutInfo<number>;
|
||||
export type ITerminalInstanceLayoutInfo = IRawTerminalInstanceLayoutInfo<IRemoteTerminalAttachTarget>;
|
||||
|
||||
export interface IRawTerminalTabLayoutInfo<T> {
|
||||
isActive: boolean;
|
||||
activeTerminalProcessId: number;
|
||||
terminals: IRawTerminalInstanceLayoutInfo<T>[];
|
||||
}
|
||||
|
||||
export type ITerminalTabLayoutInfoById = IRawTerminalTabLayoutInfo<number>;
|
||||
export type ITerminalTabLayoutInfo = IRawTerminalTabLayoutInfo<IRemoteTerminalAttachTarget | null>;
|
||||
|
||||
export interface IRawTerminalsLayoutInfo<T> {
|
||||
tabs: IRawTerminalTabLayoutInfo<T>[];
|
||||
}
|
||||
|
||||
export type ITerminalsLayoutInfo = IRawTerminalsLayoutInfo<IRemoteTerminalAttachTarget | null>;
|
||||
export type ITerminalsLayoutInfoById = IRawTerminalsLayoutInfo<number>;
|
||||
|
||||
/**
|
||||
* Provides access to native Windows calls that can be injected into non-native layers.
|
||||
*/
|
||||
export interface ITerminalNativeWindowsDelegate {
|
||||
/**
|
||||
* Gets the Windows build number, eg. this would be `19041` for Windows 10 version 2004
|
||||
*/
|
||||
getWindowsBuildNumber(): number;
|
||||
/**
|
||||
* Converts a regular Windows path into the WSL path equivalent, eg. `C:\` -> `/mnt/c`
|
||||
* @param path The Windows path.
|
||||
*/
|
||||
getWslPath(path: string): Promise<string>;
|
||||
}
|
||||
|
||||
export interface IShellDefinition {
|
||||
label: string;
|
||||
path: string;
|
||||
}
|
||||
|
||||
export interface ICommandTracker {
|
||||
scrollToPreviousCommand(): void;
|
||||
scrollToNextCommand(): void;
|
||||
selectToPreviousCommand(): void;
|
||||
selectToNextCommand(): void;
|
||||
selectToPreviousLine(): void;
|
||||
selectToNextLine(): void;
|
||||
}
|
||||
|
||||
export interface INavigationMode {
|
||||
exitNavigationMode(): void;
|
||||
focusPreviousLine(): void;
|
||||
focusNextLine(): void;
|
||||
}
|
||||
|
||||
export interface IBeforeProcessDataEvent {
|
||||
/**
|
||||
* The data of the event, this can be modified by the event listener to change what gets sent
|
||||
* to the terminal.
|
||||
*/
|
||||
data: string;
|
||||
}
|
||||
|
||||
export interface ITerminalProcessManager extends IDisposable {
|
||||
readonly processState: ProcessState;
|
||||
readonly ptyProcessReady: Promise<void>;
|
||||
readonly shellProcessId: number | undefined;
|
||||
readonly remoteAuthority: string | undefined;
|
||||
readonly os: OperatingSystem | undefined;
|
||||
readonly userHome: string | undefined;
|
||||
readonly environmentVariableInfo: IEnvironmentVariableInfo | undefined;
|
||||
readonly remoteTerminalId: number | undefined;
|
||||
/** Whether the process has had data written to it yet. */
|
||||
readonly hasWrittenData: boolean;
|
||||
|
||||
readonly onProcessReady: Event<void>;
|
||||
readonly onBeforeProcessData: Event<IBeforeProcessDataEvent>;
|
||||
readonly onProcessData: Event<IProcessDataEvent>;
|
||||
readonly onProcessTitle: Event<string>;
|
||||
readonly onProcessExit: Event<number | undefined>;
|
||||
readonly onProcessOverrideDimensions: Event<ITerminalDimensionsOverride | undefined>;
|
||||
readonly onProcessResolvedShellLaunchConfig: Event<IShellLaunchConfig>;
|
||||
readonly onEnvironmentVariableInfoChanged: Event<IEnvironmentVariableInfo>;
|
||||
|
||||
dispose(immediate?: boolean): void;
|
||||
createProcess(shellLaunchConfig: IShellLaunchConfig, cols: number, rows: number, isScreenReaderModeEnabled: boolean): Promise<ITerminalLaunchError | undefined>;
|
||||
write(data: string): void;
|
||||
setDimensions(cols: number, rows: number): void;
|
||||
acknowledgeDataEvent(charCount: number): void;
|
||||
|
||||
getInitialCwd(): Promise<string>;
|
||||
getCwd(): Promise<string>;
|
||||
getLatency(): Promise<number>;
|
||||
}
|
||||
|
||||
export const enum ProcessState {
|
||||
// The process has not been initialized yet.
|
||||
UNINITIALIZED,
|
||||
// The process is currently launching, the process is marked as launching
|
||||
// for a short duration after being created and is helpful to indicate
|
||||
// whether the process died as a result of bad shell and args.
|
||||
LAUNCHING,
|
||||
// The process is running normally.
|
||||
RUNNING,
|
||||
// The process was killed during launch, likely as a result of bad shell and
|
||||
// args.
|
||||
KILLED_DURING_LAUNCH,
|
||||
// The process was killed by the user (the event originated from VS Code).
|
||||
KILLED_BY_USER,
|
||||
// The process was killed by itself, for example the shell crashed or `exit`
|
||||
// was run.
|
||||
KILLED_BY_PROCESS
|
||||
}
|
||||
|
||||
export interface ITerminalProcessExtHostProxy extends IDisposable {
|
||||
readonly terminalId: number;
|
||||
|
||||
emitData(data: string): void;
|
||||
emitTitle(title: string): void;
|
||||
emitReady(pid: number, cwd: string): void;
|
||||
emitExit(exitCode: number | undefined): void;
|
||||
emitOverrideDimensions(dimensions: ITerminalDimensions | undefined): void;
|
||||
emitResolvedShellLaunchConfig(shellLaunchConfig: IShellLaunchConfig): void;
|
||||
emitInitialCwd(initialCwd: string): void;
|
||||
emitCwd(cwd: string): void;
|
||||
emitLatency(latency: number): void;
|
||||
|
||||
onInput: Event<string>;
|
||||
onResize: Event<{ cols: number, rows: number }>;
|
||||
onAcknowledgeDataEvent: Event<number>;
|
||||
onShutdown: Event<boolean>;
|
||||
onRequestInitialCwd: Event<void>;
|
||||
onRequestCwd: Event<void>;
|
||||
onRequestLatency: Event<void>;
|
||||
}
|
||||
|
||||
export interface ISpawnExtHostProcessRequest {
|
||||
proxy: ITerminalProcessExtHostProxy;
|
||||
shellLaunchConfig: IShellLaunchConfig;
|
||||
activeWorkspaceRootUri: URI | undefined;
|
||||
cols: number;
|
||||
rows: number;
|
||||
isWorkspaceShellAllowed: boolean;
|
||||
callback: (error: ITerminalLaunchError | undefined) => void;
|
||||
}
|
||||
|
||||
export interface IStartExtensionTerminalRequest {
|
||||
proxy: ITerminalProcessExtHostProxy;
|
||||
cols: number;
|
||||
rows: number;
|
||||
callback: (error: ITerminalLaunchError | undefined) => void;
|
||||
}
|
||||
|
||||
export interface IAvailableShellsRequest {
|
||||
callback: (shells: IShellDefinition[]) => void;
|
||||
}
|
||||
|
||||
export interface IDefaultShellAndArgsRequest {
|
||||
useAutomationShell: boolean;
|
||||
callback: (shell: string, args: string[] | string | undefined) => void;
|
||||
}
|
||||
|
||||
export enum LinuxDistro {
|
||||
Fedora,
|
||||
Ubuntu,
|
||||
Unknown
|
||||
}
|
||||
|
||||
export enum TitleEventSource {
|
||||
/** From the API or the rename command that overrides any other type */
|
||||
Api,
|
||||
/** From the process name property*/
|
||||
Process,
|
||||
/** From the VT sequence */
|
||||
Sequence
|
||||
}
|
||||
|
||||
export interface IWindowsShellHelper extends IDisposable {
|
||||
readonly onShellNameChange: Event<string>;
|
||||
|
||||
getShellName(): Promise<string>;
|
||||
}
|
||||
|
||||
export const enum TERMINAL_COMMAND_ID {
|
||||
FIND_NEXT = 'workbench.action.terminal.findNext',
|
||||
FIND_PREVIOUS = 'workbench.action.terminal.findPrevious',
|
||||
TOGGLE = 'workbench.action.terminal.toggleTerminal',
|
||||
KILL = 'workbench.action.terminal.kill',
|
||||
QUICK_KILL = 'workbench.action.terminal.quickKill',
|
||||
CONFIGURE_TERMINAL_SETTINGS = 'workbench.action.terminal.openSettings',
|
||||
COPY_SELECTION = 'workbench.action.terminal.copySelection',
|
||||
SELECT_ALL = 'workbench.action.terminal.selectAll',
|
||||
DELETE_WORD_LEFT = 'workbench.action.terminal.deleteWordLeft',
|
||||
DELETE_WORD_RIGHT = 'workbench.action.terminal.deleteWordRight',
|
||||
DELETE_TO_LINE_START = 'workbench.action.terminal.deleteToLineStart',
|
||||
MOVE_TO_LINE_START = 'workbench.action.terminal.moveToLineStart',
|
||||
MOVE_TO_LINE_END = 'workbench.action.terminal.moveToLineEnd',
|
||||
NEW = 'workbench.action.terminal.new',
|
||||
NEW_WITH_CWD = 'workbench.action.terminal.newWithCwd',
|
||||
NEW_LOCAL = 'workbench.action.terminal.newLocal',
|
||||
NEW_IN_ACTIVE_WORKSPACE = 'workbench.action.terminal.newInActiveWorkspace',
|
||||
SPLIT = 'workbench.action.terminal.split',
|
||||
SPLIT_IN_ACTIVE_WORKSPACE = 'workbench.action.terminal.splitInActiveWorkspace',
|
||||
RELAUNCH = 'workbench.action.terminal.relaunch',
|
||||
FOCUS_PREVIOUS_PANE = 'workbench.action.terminal.focusPreviousPane',
|
||||
FOCUS_NEXT_PANE = 'workbench.action.terminal.focusNextPane',
|
||||
RESIZE_PANE_LEFT = 'workbench.action.terminal.resizePaneLeft',
|
||||
RESIZE_PANE_RIGHT = 'workbench.action.terminal.resizePaneRight',
|
||||
RESIZE_PANE_UP = 'workbench.action.terminal.resizePaneUp',
|
||||
RESIZE_PANE_DOWN = 'workbench.action.terminal.resizePaneDown',
|
||||
FOCUS = 'workbench.action.terminal.focus',
|
||||
FOCUS_NEXT = 'workbench.action.terminal.focusNext',
|
||||
FOCUS_PREVIOUS = 'workbench.action.terminal.focusPrevious',
|
||||
PASTE = 'workbench.action.terminal.paste',
|
||||
SELECT_DEFAULT_SHELL = 'workbench.action.terminal.selectDefaultShell',
|
||||
RUN_SELECTED_TEXT = 'workbench.action.terminal.runSelectedText',
|
||||
RUN_ACTIVE_FILE = 'workbench.action.terminal.runActiveFile',
|
||||
SWITCH_TERMINAL = 'workbench.action.terminal.switchTerminal',
|
||||
SCROLL_DOWN_LINE = 'workbench.action.terminal.scrollDown',
|
||||
SCROLL_DOWN_PAGE = 'workbench.action.terminal.scrollDownPage',
|
||||
SCROLL_TO_BOTTOM = 'workbench.action.terminal.scrollToBottom',
|
||||
SCROLL_UP_LINE = 'workbench.action.terminal.scrollUp',
|
||||
SCROLL_UP_PAGE = 'workbench.action.terminal.scrollUpPage',
|
||||
SCROLL_TO_TOP = 'workbench.action.terminal.scrollToTop',
|
||||
CLEAR = 'workbench.action.terminal.clear',
|
||||
CLEAR_SELECTION = 'workbench.action.terminal.clearSelection',
|
||||
MANAGE_WORKSPACE_SHELL_PERMISSIONS = 'workbench.action.terminal.manageWorkspaceShellPermissions',
|
||||
RENAME = 'workbench.action.terminal.rename',
|
||||
RENAME_WITH_ARG = 'workbench.action.terminal.renameWithArg',
|
||||
FIND_FOCUS = 'workbench.action.terminal.focusFind',
|
||||
FIND_HIDE = 'workbench.action.terminal.hideFind',
|
||||
QUICK_OPEN_TERM = 'workbench.action.quickOpenTerm',
|
||||
SCROLL_TO_PREVIOUS_COMMAND = 'workbench.action.terminal.scrollToPreviousCommand',
|
||||
SCROLL_TO_NEXT_COMMAND = 'workbench.action.terminal.scrollToNextCommand',
|
||||
SELECT_TO_PREVIOUS_COMMAND = 'workbench.action.terminal.selectToPreviousCommand',
|
||||
SELECT_TO_NEXT_COMMAND = 'workbench.action.terminal.selectToNextCommand',
|
||||
SELECT_TO_PREVIOUS_LINE = 'workbench.action.terminal.selectToPreviousLine',
|
||||
SELECT_TO_NEXT_LINE = 'workbench.action.terminal.selectToNextLine',
|
||||
TOGGLE_ESCAPE_SEQUENCE_LOGGING = 'toggleEscapeSequenceLogging',
|
||||
SEND_SEQUENCE = 'workbench.action.terminal.sendSequence',
|
||||
TOGGLE_FIND_REGEX = 'workbench.action.terminal.toggleFindRegex',
|
||||
TOGGLE_FIND_WHOLE_WORD = 'workbench.action.terminal.toggleFindWholeWord',
|
||||
TOGGLE_FIND_CASE_SENSITIVE = 'workbench.action.terminal.toggleFindCaseSensitive',
|
||||
NAVIGATION_MODE_EXIT = 'workbench.action.terminal.navigationModeExit',
|
||||
NAVIGATION_MODE_FOCUS_NEXT = 'workbench.action.terminal.navigationModeFocusNext',
|
||||
NAVIGATION_MODE_FOCUS_PREVIOUS = 'workbench.action.terminal.navigationModeFocusPrevious',
|
||||
SHOW_ENVIRONMENT_INFORMATION = 'workbench.action.terminal.showEnvironmentInformation',
|
||||
SEARCH_WORKSPACE = 'workbench.action.terminal.searchWorkspace',
|
||||
ATTACH_TO_REMOTE_TERMINAL = 'workbench.action.terminal.attachToSession'
|
||||
}
|
||||
|
||||
export const DEFAULT_COMMANDS_TO_SKIP_SHELL: string[] = [
|
||||
TERMINAL_COMMAND_ID.CLEAR_SELECTION,
|
||||
TERMINAL_COMMAND_ID.CLEAR,
|
||||
TERMINAL_COMMAND_ID.COPY_SELECTION,
|
||||
TERMINAL_COMMAND_ID.DELETE_TO_LINE_START,
|
||||
TERMINAL_COMMAND_ID.DELETE_WORD_LEFT,
|
||||
TERMINAL_COMMAND_ID.DELETE_WORD_RIGHT,
|
||||
TERMINAL_COMMAND_ID.FIND_FOCUS,
|
||||
TERMINAL_COMMAND_ID.FIND_HIDE,
|
||||
TERMINAL_COMMAND_ID.FIND_NEXT,
|
||||
TERMINAL_COMMAND_ID.FIND_PREVIOUS,
|
||||
TERMINAL_COMMAND_ID.TOGGLE_FIND_REGEX,
|
||||
TERMINAL_COMMAND_ID.TOGGLE_FIND_WHOLE_WORD,
|
||||
TERMINAL_COMMAND_ID.TOGGLE_FIND_CASE_SENSITIVE,
|
||||
TERMINAL_COMMAND_ID.FOCUS_NEXT_PANE,
|
||||
TERMINAL_COMMAND_ID.FOCUS_NEXT,
|
||||
TERMINAL_COMMAND_ID.FOCUS_PREVIOUS_PANE,
|
||||
TERMINAL_COMMAND_ID.FOCUS_PREVIOUS,
|
||||
TERMINAL_COMMAND_ID.FOCUS,
|
||||
TERMINAL_COMMAND_ID.KILL,
|
||||
TERMINAL_COMMAND_ID.MOVE_TO_LINE_END,
|
||||
TERMINAL_COMMAND_ID.MOVE_TO_LINE_START,
|
||||
TERMINAL_COMMAND_ID.NEW_IN_ACTIVE_WORKSPACE,
|
||||
TERMINAL_COMMAND_ID.NEW,
|
||||
TERMINAL_COMMAND_ID.PASTE,
|
||||
TERMINAL_COMMAND_ID.RESIZE_PANE_DOWN,
|
||||
TERMINAL_COMMAND_ID.RESIZE_PANE_LEFT,
|
||||
TERMINAL_COMMAND_ID.RESIZE_PANE_RIGHT,
|
||||
TERMINAL_COMMAND_ID.RESIZE_PANE_UP,
|
||||
TERMINAL_COMMAND_ID.RUN_ACTIVE_FILE,
|
||||
TERMINAL_COMMAND_ID.RUN_SELECTED_TEXT,
|
||||
TERMINAL_COMMAND_ID.SCROLL_DOWN_LINE,
|
||||
TERMINAL_COMMAND_ID.SCROLL_DOWN_PAGE,
|
||||
TERMINAL_COMMAND_ID.SCROLL_TO_BOTTOM,
|
||||
TERMINAL_COMMAND_ID.SCROLL_TO_NEXT_COMMAND,
|
||||
TERMINAL_COMMAND_ID.SCROLL_TO_PREVIOUS_COMMAND,
|
||||
TERMINAL_COMMAND_ID.SCROLL_TO_TOP,
|
||||
TERMINAL_COMMAND_ID.SCROLL_UP_LINE,
|
||||
TERMINAL_COMMAND_ID.SCROLL_UP_PAGE,
|
||||
TERMINAL_COMMAND_ID.SEND_SEQUENCE,
|
||||
TERMINAL_COMMAND_ID.SELECT_ALL,
|
||||
TERMINAL_COMMAND_ID.SELECT_TO_NEXT_COMMAND,
|
||||
TERMINAL_COMMAND_ID.SELECT_TO_NEXT_LINE,
|
||||
TERMINAL_COMMAND_ID.SELECT_TO_PREVIOUS_COMMAND,
|
||||
TERMINAL_COMMAND_ID.SELECT_TO_PREVIOUS_LINE,
|
||||
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',
|
||||
'workbench.action.showCommands',
|
||||
'workbench.action.tasks.build',
|
||||
'workbench.action.tasks.restartTask',
|
||||
'workbench.action.tasks.runTask',
|
||||
'workbench.action.tasks.reRunTask',
|
||||
'workbench.action.tasks.showLog',
|
||||
'workbench.action.tasks.showTasks',
|
||||
'workbench.action.tasks.terminate',
|
||||
'workbench.action.tasks.test',
|
||||
'workbench.action.toggleFullScreen',
|
||||
'workbench.action.terminal.focusAtIndex1',
|
||||
'workbench.action.terminal.focusAtIndex2',
|
||||
'workbench.action.terminal.focusAtIndex3',
|
||||
'workbench.action.terminal.focusAtIndex4',
|
||||
'workbench.action.terminal.focusAtIndex5',
|
||||
'workbench.action.terminal.focusAtIndex6',
|
||||
'workbench.action.terminal.focusAtIndex7',
|
||||
'workbench.action.terminal.focusAtIndex8',
|
||||
'workbench.action.terminal.focusAtIndex9',
|
||||
'workbench.action.focusSecondEditorGroup',
|
||||
'workbench.action.focusThirdEditorGroup',
|
||||
'workbench.action.focusFourthEditorGroup',
|
||||
'workbench.action.focusFifthEditorGroup',
|
||||
'workbench.action.focusSixthEditorGroup',
|
||||
'workbench.action.focusSeventhEditorGroup',
|
||||
'workbench.action.focusEighthEditorGroup',
|
||||
'workbench.action.focusNextPart',
|
||||
'workbench.action.focusPreviousPart',
|
||||
'workbench.action.nextPanelView',
|
||||
'workbench.action.previousPanelView',
|
||||
'workbench.action.nextSideBarView',
|
||||
'workbench.action.previousSideBarView',
|
||||
'workbench.action.debug.start',
|
||||
'workbench.action.debug.stop',
|
||||
'workbench.action.debug.run',
|
||||
'workbench.action.debug.restart',
|
||||
'workbench.action.debug.continue',
|
||||
'workbench.action.debug.pause',
|
||||
'workbench.action.debug.stepInto',
|
||||
'workbench.action.debug.stepOut',
|
||||
'workbench.action.debug.stepOver',
|
||||
'workbench.action.nextEditor',
|
||||
'workbench.action.previousEditor',
|
||||
'workbench.action.nextEditorInGroup',
|
||||
'workbench.action.previousEditorInGroup',
|
||||
'workbench.action.openNextRecentlyUsedEditor',
|
||||
'workbench.action.openPreviousRecentlyUsedEditor',
|
||||
'workbench.action.openNextRecentlyUsedEditorInGroup',
|
||||
'workbench.action.openPreviousRecentlyUsedEditorInGroup',
|
||||
'workbench.action.quickOpenPreviousRecentlyUsedEditor',
|
||||
'workbench.action.quickOpenLeastRecentlyUsedEditor',
|
||||
'workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup',
|
||||
'workbench.action.quickOpenLeastRecentlyUsedEditorInGroup',
|
||||
'workbench.action.focusActiveEditorGroup',
|
||||
'workbench.action.focusFirstEditorGroup',
|
||||
'workbench.action.focusLastEditorGroup',
|
||||
'workbench.action.firstEditorInGroup',
|
||||
'workbench.action.lastEditorInGroup',
|
||||
'workbench.action.navigateUp',
|
||||
'workbench.action.navigateDown',
|
||||
'workbench.action.navigateRight',
|
||||
'workbench.action.navigateLeft',
|
||||
'workbench.action.togglePanel',
|
||||
'workbench.action.quickOpenView',
|
||||
'workbench.action.toggleMaximizedPanel'
|
||||
];
|
||||
|
||||
export interface ITerminalContributions {
|
||||
types?: ITerminalTypeContribution[];
|
||||
}
|
||||
|
||||
export interface ITerminalTypeContribution {
|
||||
title: string;
|
||||
command: string;
|
||||
}
|
||||
|
||||
export const terminalContributionsDescriptor: IExtensionPointDescriptor = {
|
||||
extensionPoint: 'terminal',
|
||||
defaultExtensionKind: 'workspace',
|
||||
jsonSchema: {
|
||||
description: nls.localize('vscode.extension.contributes.terminal', 'Contributes terminal functionality.'),
|
||||
type: 'object',
|
||||
properties: {
|
||||
types: {
|
||||
type: 'array',
|
||||
description: nls.localize('vscode.extension.contributes.terminal.types', "Defines additional terminal types that the user can create."),
|
||||
items: {
|
||||
type: 'object',
|
||||
required: ['command', 'title'],
|
||||
properties: {
|
||||
command: {
|
||||
description: nls.localize('vscode.extension.contributes.terminal.types.command', "Command to execute when the user creates this type of terminal."),
|
||||
type: 'string',
|
||||
},
|
||||
title: {
|
||||
description: nls.localize('vscode.extension.contributes.terminal.types.title', "Title for this type of terminal."),
|
||||
type: 'string',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
@@ -6,7 +6,7 @@
|
||||
import { IConfigurationNode } from 'vs/platform/configuration/common/configurationRegistry';
|
||||
import { localize } from 'vs/nls';
|
||||
import { EDITOR_FONT_DEFAULTS } from 'vs/editor/common/config/editorOptions';
|
||||
import { DEFAULT_LETTER_SPACING, DEFAULT_LINE_HEIGHT, TerminalCursorStyle, DEFAULT_COMMANDS_TO_SKIP_SHELL, SUGGESTIONS_FONT_WEIGHT, MINIMUM_FONT_WEIGHT, MAXIMUM_FONT_WEIGHT, DEFAULT_LOCAL_ECHO_EXCLUDE } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { DEFAULT_LETTER_SPACING, DEFAULT_LINE_HEIGHT, TerminalCursorStyle, DEFAULT_COMMANDS_TO_SKIP_SHELL, SUGGESTIONS_FONT_WEIGHT, MINIMUM_FONT_WEIGHT, MAXIMUM_FONT_WEIGHT, DEFAULT_LOCAL_ECHO_EXCLUDE } from 'vs/platform/terminal/common/terminal';
|
||||
import { isMacintosh, isWindows, Platform } from 'vs/base/common/platform';
|
||||
|
||||
export const terminalConfiguration: IConfigurationNode = {
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as nls from 'vs/nls';
|
||||
import { IExtensionPointDescriptor } from 'vs/workbench/services/extensions/common/extensionsRegistry';
|
||||
|
||||
export const terminalContributionsDescriptor: IExtensionPointDescriptor = {
|
||||
extensionPoint: 'terminal',
|
||||
defaultExtensionKind: 'workspace',
|
||||
jsonSchema: {
|
||||
description: nls.localize('vscode.extension.contributes.terminal', 'Contributes terminal functionality.'),
|
||||
type: 'object',
|
||||
properties: {
|
||||
types: {
|
||||
type: 'array',
|
||||
description: nls.localize('vscode.extension.contributes.terminal.types', "Defines additional terminal types that the user can create."),
|
||||
items: {
|
||||
type: 'object',
|
||||
required: ['command', 'title'],
|
||||
properties: {
|
||||
command: {
|
||||
description: nls.localize('vscode.extension.contributes.terminal.types.command', "Command to execute when the user creates this type of terminal."),
|
||||
type: 'string',
|
||||
},
|
||||
title: {
|
||||
description: nls.localize('vscode.extension.contributes.terminal.types.title', "Title for this type of terminal."),
|
||||
type: 'string',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
@@ -4,9 +4,10 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as extensionsRegistry from 'vs/workbench/services/extensions/common/extensionsRegistry';
|
||||
import { ITerminalTypeContribution, ITerminalContributions, terminalContributionsDescriptor } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { ITerminalTypeContribution, ITerminalContributions } from 'vs/platform/terminal/common/terminal';
|
||||
import { flatten } from 'vs/base/common/arrays';
|
||||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { terminalContributionsDescriptor } from 'vs/workbench/contrib/terminal/common/terminalContributionsDescriptor';
|
||||
|
||||
// terminal extension point
|
||||
export const terminalsExtPoint = extensionsRegistry.ExtensionsRegistry.registerExtensionPoint<ITerminalContributions>(terminalContributionsDescriptor);
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import * as nls from 'vs/nls';
|
||||
import { MenuRegistry, MenuId } from 'vs/platform/actions/common/actions';
|
||||
import { KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, TERMINAL_COMMAND_ID } from 'vs/platform/terminal/common/terminal';
|
||||
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
|
||||
|
||||
export function setupTerminalMenu() {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { ITerminalInstanceService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { IWindowsShellHelper, IS_WORKSPACE_SHELL_ALLOWED_STORAGE_KEY } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { IWindowsShellHelper, IS_WORKSPACE_SHELL_ALLOWED_STORAGE_KEY, IShellLaunchConfig, ITerminalChildProcess } from 'vs/platform/terminal/common/terminal';
|
||||
import { WindowsShellHelper } from 'vs/workbench/contrib/terminal/electron-browser/windowsShellHelper';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IProcessEnvironment, platform, Platform } from 'vs/base/common/platform';
|
||||
@@ -22,7 +22,6 @@ import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { getSystemShell } from 'vs/base/node/shell';
|
||||
import { ILocalPtyService } from 'vs/platform/terminal/electron-sandbox/terminal';
|
||||
import { IShellLaunchConfig, ITerminalChildProcess } from 'vs/platform/terminal/common/terminal';
|
||||
import { TerminalProcessMainProxy } from 'vs/workbench/contrib/terminal/electron-browser/terminalProcessMainProxy';
|
||||
|
||||
let Terminal: typeof XTermTerminal;
|
||||
|
||||
@@ -7,7 +7,7 @@ import * as nls from 'vs/nls';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { Extensions as ActionExtensions, IWorkbenchActionRegistry } from 'vs/workbench/common/actions';
|
||||
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
|
||||
import { TERMINAL_ACTION_CATEGORY, TitleEventSource, TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { TERMINAL_ACTION_CATEGORY, TitleEventSource, TERMINAL_COMMAND_ID } from 'vs/platform/terminal/common/terminal';
|
||||
import { Action } from 'vs/base/common/actions';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { homedir } from 'os';
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
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 { IWindowsShellHelper } from 'vs/platform/terminal/common/terminal';
|
||||
import type { Terminal as XTermTerminal } from 'xterm';
|
||||
import type * as WindowsProcessTreeType from 'windows-process-tree';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import * as fs from 'fs';
|
||||
import * as platform from 'vs/base/common/platform';
|
||||
import { SymlinkSupport } from 'vs/base/node/pfs';
|
||||
import { LinuxDistro, IShellDefinition } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { LinuxDistro, IShellDefinition } from 'vs/platform/terminal/common/terminal';
|
||||
import { coalesce } from 'vs/base/common/arrays';
|
||||
import { normalize, basename } from 'vs/base/common/path';
|
||||
import { enumeratePowerShellInstallations } from 'vs/base/node/powershell';
|
||||
|
||||
@@ -7,7 +7,7 @@ import * as assert from 'assert';
|
||||
import { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/terminalConfigHelper';
|
||||
import { EDITOR_FONT_DEFAULTS } from 'vs/editor/common/config/editorOptions';
|
||||
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
|
||||
import { LinuxDistro } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { LinuxDistro } from 'vs/platform/terminal/common/terminal';
|
||||
|
||||
suite('Workbench - TerminalConfigHelper', () => {
|
||||
let fixture: HTMLElement;
|
||||
|
||||
@@ -8,7 +8,7 @@ import { IBuffer, Terminal } from 'xterm';
|
||||
import { SinonStub, stub, useFakeTimers } from 'sinon';
|
||||
import { Emitter } from 'vs/base/common/event';
|
||||
import { CharPredictState, IPrediction, PredictionStats, TypeAheadAddon } from 'vs/workbench/contrib/terminal/browser/terminalTypeAheadAddon';
|
||||
import { DEFAULT_LOCAL_ECHO_EXCLUDE, IBeforeProcessDataEvent, ITerminalConfiguration, ITerminalProcessManager } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { DEFAULT_LOCAL_ECHO_EXCLUDE, IBeforeProcessDataEvent, ITerminalConfiguration, ITerminalProcessManager } from 'vs/platform/terminal/common/terminal';
|
||||
import { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/terminalConfigHelper';
|
||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { deepStrictEqual, strictEqual } from 'assert';
|
||||
import { EnvironmentVariableMutatorType } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { EnvironmentVariableMutatorType } from 'vs/platform/terminal/common/environmentVariable';
|
||||
import { IProcessEnvironment, isWindows } from 'vs/base/common/platform';
|
||||
import { MergedEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariableCollection';
|
||||
import { deserializeEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariableShared';
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import { deepStrictEqual } from 'assert';
|
||||
import { TestExtensionService, TestStorageService } from 'vs/workbench/test/common/workbenchTestServices';
|
||||
import { EnvironmentVariableService } from 'vs/workbench/contrib/terminal/common/environmentVariableService';
|
||||
import { EnvironmentVariableMutatorType, IEnvironmentVariableMutator } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { EnvironmentVariableMutatorType, IEnvironmentVariableMutator } from 'vs/platform/terminal/common/environmentVariable';
|
||||
import { IStorageService } from 'vs/platform/storage/common/storage';
|
||||
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
|
||||
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import { deepStrictEqual } from 'assert';
|
||||
import { deserializeEnvironmentVariableCollection, serializeEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariableShared';
|
||||
import { EnvironmentVariableMutatorType, IEnvironmentVariableMutator } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { EnvironmentVariableMutatorType, IEnvironmentVariableMutator } from 'vs/platform/terminal/common/environmentVariable';
|
||||
|
||||
suite('EnvironmentVariable - deserializeEnvironmentVariableCollection', () => {
|
||||
test('should construct correctly with 3 arguments', () => {
|
||||
|
||||
@@ -22,7 +22,7 @@ import * as dom from 'vs/base/browser/dom';
|
||||
import { KeybindingLabel } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel';
|
||||
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
|
||||
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
|
||||
import { TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { TERMINAL_COMMAND_ID } from 'vs/platform/terminal/common/terminal';
|
||||
import { assertIsDefined } from 'vs/base/common/types';
|
||||
import { workbenchConfigurationNodeBase } from 'vs/workbench/common/configuration';
|
||||
import { NEW_UNTITLED_FILE_COMMAND_ID } from 'vs/workbench/contrib/files/browser/fileCommands';
|
||||
|
||||
Reference in New Issue
Block a user