提交 304e3e3f 编写于 作者: D Daniel Imms

Add terminalEditorFocus ctx key, remove dupe onfocus event

Fixes #128503
上级 2b413de5
......@@ -400,14 +400,14 @@ export interface ITerminalInstance {
*/
onDisposed: Event<ITerminalInstance>;
onFocused: Event<ITerminalInstance>;
onProcessIdReady: Event<ITerminalInstance>;
onLinksReady: Event<ITerminalInstance>;
onRequestExtHostProcess: Event<ITerminalInstance>;
onDimensionsChanged: Event<void>;
onMaximumDimensionsChanged: Event<void>;
onFocus: Event<ITerminalInstance>;
onDidFocus: Event<ITerminalInstance>;
onDidBlur: Event<ITerminalInstance>;
/**
* An event that fires when a terminal is dropped on this instance via drag and drop.
......
......@@ -34,7 +34,7 @@ import { ResourceContextKey } from 'vs/workbench/common/resources';
import { FindInFilesCommand, IFindInFilesArgs } from 'vs/workbench/contrib/search/browser/searchActions';
import { Direction, IRemoteTerminalService, ITerminalGroupService, ITerminalInstance, ITerminalInstanceService, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
import { TerminalQuickAccessProvider } from 'vs/workbench/contrib/terminal/browser/terminalQuickAccess';
import { ILocalTerminalService, 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_IS_OPEN, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, KEYBINDING_CONTEXT_TERMINAL_TABS_FOCUS, KEYBINDING_CONTEXT_TERMINAL_TABS_SINGULAR_SELECTION, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, TerminalCommandId, TERMINAL_ACTION_CATEGORY } from 'vs/workbench/contrib/terminal/common/terminal';
import { ILocalTerminalService, IRemoteTerminalAttachTarget, ITerminalConfigHelper, KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS, KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE, KEYBINDING_CONTEXT_TERMINAL_EDITOR_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED, KEYBINDING_CONTEXT_TERMINAL_FIND_NOT_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, KEYBINDING_CONTEXT_TERMINAL_TABS_FOCUS, KEYBINDING_CONTEXT_TERMINAL_TABS_SINGULAR_SELECTION, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, TerminalCommandId, TERMINAL_ACTION_CATEGORY } from 'vs/workbench/contrib/terminal/common/terminal';
import { terminalStrings } from 'vs/workbench/contrib/terminal/common/terminalStrings';
import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver';
import { IHistoryService } from 'vs/workbench/services/history/common/history';
......@@ -474,7 +474,7 @@ export function registerTerminalActions() {
mac: {
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_CLOSE_SQUARE_BRACKET
},
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
when: ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_EDITOR_FOCUS.negate()),
weight: KeybindingWeight.WorkbenchContrib
}
});
......@@ -498,7 +498,7 @@ export function registerTerminalActions() {
mac: {
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_OPEN_SQUARE_BRACKET
},
when: KEYBINDING_CONTEXT_TERMINAL_FOCUS,
when: ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_EDITOR_FOCUS.negate()),
weight: KeybindingWeight.WorkbenchContrib
}
});
......
......@@ -94,7 +94,7 @@ export class TerminalEditor extends EditorPane {
// since the editor does not monitor focus changes, for ex. between the terminal
// panel and the editors, this is needed so that the active instance gets set
// when focus changes between them.
this._register(this._editorInput.terminalInstance.onFocused(() => this._setActiveInstance()));
this._register(this._editorInput.terminalInstance.onDidFocus(() => this._setActiveInstance()));
}
}
......
......@@ -15,6 +15,8 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
import { TerminalLocation } from 'vs/platform/terminal/common/terminal';
import { IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService';
import { ILifecycleService } from 'vs/workbench/services/lifecycle/common/lifecycle';
import { KEYBINDING_CONTEXT_TERMINAL_EDITOR_FOCUS } from 'vs/workbench/contrib/terminal/common/terminal';
import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
export class TerminalEditorInput extends EditorInput {
......@@ -23,6 +25,7 @@ export class TerminalEditorInput extends EditorInput {
private _isDetached = false;
private _isShuttingDown = false;
private _copyInstance?: ITerminalInstance;
private _terminalEditorFocusContextKey: IContextKey<boolean>;
private _group: IEditorGroup | undefined;
......@@ -73,10 +76,13 @@ export class TerminalEditorInput extends EditorInput {
@IThemeService private readonly _themeService: IThemeService,
@ITerminalInstanceService private readonly _terminalInstanceService: ITerminalInstanceService,
@IInstantiationService private readonly _instantiationService: IInstantiationService,
@ILifecycleService lifecycleService: ILifecycleService
@ILifecycleService lifecycleService: ILifecycleService,
@IContextKeyService contextKeyService: IContextKeyService
) {
super();
this._terminalEditorFocusContextKey = KEYBINDING_CONTEXT_TERMINAL_EDITOR_FOCUS.bindTo(contextKeyService);
this._register(toDisposable(() => {
if (!this._isDetached && !this._isShuttingDown) {
this._terminalInstance.dispose();
......@@ -88,6 +94,8 @@ export class TerminalEditorInput extends EditorInput {
this._terminalInstance.onDisposed(() => this.dispose()),
this._terminalInstance.onTitleChanged(() => this._onDidChangeLabel.fire()),
this._terminalInstance.onIconChanged(() => this._onDidChangeLabel.fire()),
this._terminalInstance.onDidFocus(() => this._terminalEditorFocusContextKey.set(true)),
this._terminalInstance.onDidBlur(() => this._terminalEditorFocusContextKey.reset()),
this._terminalInstance.statusList.onDidChangePrimaryStatus(() => this._onDidChangeLabel.fire())
];
......
......@@ -172,7 +172,7 @@ export class TerminalEditorService extends Disposable implements ITerminalEditor
this._editorInputs.set(instance.instanceId, input);
this._instanceDisposables.set(instance.instanceId, [
instance.onDisposed(this._onDidDisposeInstance.fire, this._onDidDisposeInstance),
instance.onFocus(this._onDidFocusInstance.fire, this._onDidFocusInstance)
instance.onDidFocus(this._onDidFocusInstance.fire, this._onDidFocusInstance)
]);
this.instances.push(instance);
this._onDidChangeInstances.fire();
......
......@@ -337,7 +337,7 @@ export class TerminalGroup extends Disposable implements ITerminalGroup {
this._onDidDisposeInstance.fire(instance);
this._handleOnDidDisposeInstance(instance);
}),
instance.onFocused(instance => {
instance.onDidFocus(instance => {
this._setActiveInstance(instance);
this._onDidFocusInstance.fire(instance);
})
......
......@@ -213,8 +213,6 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
private readonly _onDisposed = this._register(new Emitter<ITerminalInstance>());
readonly onDisposed = this._onDisposed.event;
private readonly _onFocused = this._register(new Emitter<ITerminalInstance>());
readonly onFocused = this._onFocused.event;
private readonly _onProcessIdReady = this._register(new Emitter<ITerminalInstance>());
readonly onProcessIdReady = this._onProcessIdReady.event;
private readonly _onLinksReady = this._register(new Emitter<ITerminalInstance>());
......@@ -235,8 +233,10 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
readonly onDimensionsChanged = this._onDimensionsChanged.event;
private readonly _onMaximumDimensionsChanged = this._register(new Emitter<void>());
readonly onMaximumDimensionsChanged = this._onMaximumDimensionsChanged.event;
private readonly _onFocus = this._register(new Emitter<ITerminalInstance>());
readonly onFocus = this._onFocus.event;
private readonly _onDidFocus = this._register(new Emitter<ITerminalInstance>());
readonly onDidFocus = this._onDidFocus.event;
private readonly _onDidBlur = this._register(new Emitter<ITerminalInstance>());
readonly onDidBlur = this._onDidBlur.event;
private readonly _onRequestAddInstanceToGroup = this._register(new Emitter<IRequestAddInstanceToGroupEvent>());
readonly onRequestAddInstanceToGroup = this._onRequestAddInstanceToGroup.event;
......@@ -709,7 +709,6 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
this._setAriaLabel(xterm, this._instanceId, this._title);
xterm.textarea.addEventListener('focus', () => this._onFocus.fire(this));
xterm.attachCustomKeyEventHandler((event: KeyboardEvent): boolean => {
// Disable all input if the terminal is exiting
if (this._isExiting) {
......@@ -814,11 +813,12 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
} else {
this._terminalShellTypeContextKey.reset();
}
this._onFocused.fire(this);
this._onDidFocus.fire(this);
}));
this._register(dom.addDisposableListener(xterm.textarea, 'blur', () => {
this._terminalFocusContextKey.reset();
this._onDidBlur.fire(this);
this._refreshSelectionContextKey();
}));
......
......@@ -722,7 +722,7 @@ export class TerminalService implements ITerminalService {
}
}));
instance.addDisposable(instance.onMaximumDimensionsChanged(() => this._onDidMaxiumumDimensionsChange.fire(instance)));
instance.addDisposable(instance.onFocus(this._onDidChangeActiveInstance.fire, this._onDidChangeActiveInstance));
instance.addDisposable(instance.onDidFocus(this._onDidChangeActiveInstance.fire, this._onDidChangeActiveInstance));
instance.addDisposable(instance.onRequestAddInstanceToGroup(e => {
const instanceId = this._getInstanceIdFromUri(e.uri);
if (instanceId === undefined) {
......
......@@ -24,6 +24,9 @@ export const KEYBINDING_CONTEXT_TERMINAL_IS_OPEN = new RawContextKey<boolean>(Te
/** A context key that is set when the integrated terminal has focus. */
export const KEYBINDING_CONTEXT_TERMINAL_FOCUS = new RawContextKey<boolean>(TerminalContextKey.Focus, false, nls.localize('terminalFocusContextKey', "Whether the terminal is focused"));
/** A context key that is set when a terminal editor has focus. */
export const KEYBINDING_CONTEXT_TERMINAL_EDITOR_FOCUS = new RawContextKey<boolean>(TerminalContextKey.EditorFocus, false, nls.localize('terminalEditorFocusContextKey', "Whether a terminal in the editor area is focused"));
/** A context key that is set to the current number of integrated terminals in the terminal groups. */
export const KEYBINDING_CONTEXT_GROUP_TERMINAL_COUNT = new RawContextKey<number>(TerminalContextKey.Count, 0, nls.localize('terminalCountContextKey', "The current number of terminals"));
......
......@@ -10,6 +10,7 @@ export const enum TerminalContextKey {
TabsNarrow = 'isTerminalTabsNarrow',
ProcessSupported = 'terminalProcessSupported',
Focus = 'terminalFocus',
EditorFocus = 'terminalEditorFocus',
TabsFocus = 'terminalTabsFocus',
TabsMouse = 'terminalTabsMouse',
AltBufferActive = 'terminalAltBufferActive',
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册