Implement clear terminal command

Part of #6603
This commit is contained in:
Daniel Imms 2016-09-17 04:23:50 -07:00
parent f2df235840
commit 1316454c11
4 changed files with 34 additions and 2 deletions

View file

@ -14,7 +14,7 @@ import { GlobalQuickOpenAction } from 'vs/workbench/browser/parts/quickopen/quic
import { ITerminalService, KEYBINDING_CONTEXT_TERMINAL_FOCUS, TERMINAL_PANEL_ID, TERMINAL_DEFAULT_SHELL_LINUX, TERMINAL_DEFAULT_SHELL_OSX, TERMINAL_DEFAULT_SHELL_WINDOWS } from 'vs/workbench/parts/terminal/electron-browser/terminal';
import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actionRegistry';
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
import { KillTerminalAction, CopyTerminalSelectionAction, CreateNewTerminalAction, FocusTerminalAction, FocusNextTerminalAction, FocusPreviousTerminalAction, RunSelectedTextInTerminalAction, ScrollDownTerminalAction, ScrollUpTerminalAction, TerminalPasteAction, ToggleTerminalAction } from 'vs/workbench/parts/terminal/electron-browser/terminalActions';
import { KillTerminalAction, CopyTerminalSelectionAction, CreateNewTerminalAction, FocusTerminalAction, FocusNextTerminalAction, FocusPreviousTerminalAction, RunSelectedTextInTerminalAction, ScrollDownTerminalAction, ScrollUpTerminalAction, TerminalPasteAction, ToggleTerminalAction, ClearTerminalAction } from 'vs/workbench/parts/terminal/electron-browser/terminalActions';
import { Registry } from 'vs/platform/platform';
import { ShowAllCommandsAction } from 'vs/workbench/parts/quickopen/browser/commandsHandler';
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
@ -109,7 +109,8 @@ configurationRegistry.registerConfiguration({
RunSelectedTextInTerminalAction.ID,
ToggleTerminalAction.ID,
ScrollDownTerminalAction.ID,
ScrollUpTerminalAction.ID
ScrollUpTerminalAction.ID,
ClearTerminalAction.ID
].sort()
}
}
@ -159,3 +160,4 @@ actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ScrollUpTerminal
primary: KeyMod.CtrlCmd | KeyCode.UpArrow,
linux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.UpArrow },
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Scroll Up', category);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ClearTerminalAction, ClearTerminalAction.ID, ClearTerminalAction.LABEL), 'Terminal: Clear', category);

View file

@ -141,6 +141,11 @@ export interface ITerminalInstance {
*/
scrollUp(): void;
/**
* Clears the terminal buffer, leaving only the prompt line.
*/
clear(): void;
/**
* Attaches the terminal instance to an element on the DOM, before this is called the terminal
* instance process may run in the background but cannot be displayed on the UI.

View file

@ -288,4 +288,25 @@ export class ScrollUpTerminalAction extends Action {
}
return TPromise.as(void 0);
}
}
export class ClearTerminalAction extends Action {
public static ID = 'workbench.action.terminal.clear';
public static LABEL = nls.localize('workbench.action.terminal.clear', "Clear");
constructor(
id: string, label: string,
@ITerminalService private terminalService: ITerminalService
) {
super(id, label);
}
public run(event?: any): TPromise<any> {
let terminalInstance = this.terminalService.getActiveInstance();
if (terminalInstance) {
terminalInstance.clear();
}
return TPromise.as(void 0);
}
}

View file

@ -220,6 +220,10 @@ export class TerminalInstance implements ITerminalInstance {
this._xterm.scrollDisp(-1);
}
public clear(): void {
this._xterm.clear();
}
private sanitizeInput(data: any) {
return typeof data === 'string' ? data.replace(TerminalInstance.EOL_REGEX, os.EOL) : data;
}