提交 8911a6a6 编写于 作者: D Daniel Imms

Add terminal commands to scroll page up/down

Fixes #12572
上级 bdecf23c
......@@ -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, ClearTerminalAction } from 'vs/workbench/parts/terminal/electron-browser/terminalActions';
import { KillTerminalAction, CopyTerminalSelectionAction, CreateNewTerminalAction, FocusTerminalAction, FocusNextTerminalAction, FocusPreviousTerminalAction, RunSelectedTextInTerminalAction, ScrollDownTerminalAction, ScrollDownPageTerminalAction, ScrollUpTerminalAction, ScrollUpPageTerminalAction, 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,9 @@ configurationRegistry.registerConfiguration({
RunSelectedTextInTerminalAction.ID,
ToggleTerminalAction.ID,
ScrollDownTerminalAction.ID,
ScrollDownPageTerminalAction.ID,
ScrollUpTerminalAction.ID,
ScrollUpPageTerminalAction.ID,
ClearTerminalAction.ID
].sort()
}
......@@ -155,9 +157,15 @@ actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ToggleTerminalAc
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ScrollDownTerminalAction, ScrollDownTerminalAction.ID, ScrollDownTerminalAction.LABEL, {
primary: KeyMod.CtrlCmd | KeyCode.DownArrow,
linux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.DownArrow }
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Scroll Down', category);
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Scroll Down (Line)', category);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ScrollDownPageTerminalAction, ScrollDownPageTerminalAction.ID, ScrollDownPageTerminalAction.LABEL, {
primary: KeyMod.Shift | KeyCode.PageDown
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Scroll Down (Page)', category);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ScrollUpTerminalAction, ScrollUpTerminalAction.ID, ScrollUpTerminalAction.LABEL, {
primary: KeyMod.CtrlCmd | KeyCode.UpArrow,
linux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.UpArrow },
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Scroll Up', category);
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Scroll Up (Line)', category);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ScrollUpPageTerminalAction, ScrollUpPageTerminalAction.ID, ScrollUpPageTerminalAction.LABEL, {
primary: KeyMod.Shift | KeyCode.PageUp
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Scroll Up (Page)', category);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ClearTerminalAction, ClearTerminalAction.ID, ClearTerminalAction.LABEL), 'Terminal: Clear', category);
......@@ -137,15 +137,14 @@ export interface ITerminalInstance {
*/
sendText(text: string, addNewLine: boolean): void;
/**
* Scroll the terminal buffer down 1 line.
*/
scrollDown(): void;
/**
* Scroll the terminal buffer up 1 line.
*/
scrollUp(): void;
/** Scroll the terminal buffer down 1 line. */
scrollDownLine(): void;
/** Scroll the terminal buffer down 1 page. */
scrollDownPage(): void;
/** Scroll the terminal buffer up 1 line. */
scrollUpLine(): void;
/** Scroll the terminal buffer up 1 page. */
scrollUpPage(): void;
/**
* Clears the terminal buffer, leaving only the prompt line.
......
......@@ -251,7 +251,7 @@ export class SwitchTerminalInstanceActionItem extends SelectActionItem {
export class ScrollDownTerminalAction extends Action {
public static ID = 'workbench.action.terminal.scrollDown';
public static LABEL = nls.localize('workbench.action.terminal.scrollDown', "Scroll Down");
public static LABEL = nls.localize('workbench.action.terminal.scrollDown', "Scroll Down (Line)");
constructor(
id: string, label: string,
......@@ -263,7 +263,28 @@ export class ScrollDownTerminalAction extends Action {
public run(event?: any): TPromise<any> {
let terminalInstance = this.terminalService.getActiveInstance();
if (terminalInstance) {
terminalInstance.scrollDown();
terminalInstance.scrollDownLine();
}
return TPromise.as(void 0);
}
}
export class ScrollDownPageTerminalAction extends Action {
public static ID = 'workbench.action.terminal.scrollDownPage';
public static LABEL = nls.localize('workbench.action.terminal.scrollDownPage', "Scroll Down (Page)");
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.scrollDownPage();
}
return TPromise.as(void 0);
}
......@@ -272,7 +293,28 @@ export class ScrollDownTerminalAction extends Action {
export class ScrollUpTerminalAction extends Action {
public static ID = 'workbench.action.terminal.scrollUp';
public static LABEL = nls.localize('workbench.action.terminal.scrollUp', "Scroll Up");
public static LABEL = nls.localize('workbench.action.terminal.scrollUp', "Scroll Up (Line)");
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.scrollUpLine();
}
return TPromise.as(void 0);
}
}
export class ScrollUpPageTerminalAction extends Action {
public static ID = 'workbench.action.terminal.scrollUpPage';
public static LABEL = nls.localize('workbench.action.terminal.scrollUpPage', "Scroll Up (Page)");
constructor(
id: string, label: string,
......@@ -284,7 +326,7 @@ export class ScrollUpTerminalAction extends Action {
public run(event?: any): TPromise<any> {
let terminalInstance = this.terminalService.getActiveInstance();
if (terminalInstance) {
terminalInstance.scrollUp();
terminalInstance.scrollUpPage();
}
return TPromise.as(void 0);
}
......
......@@ -220,14 +220,22 @@ export class TerminalInstance implements ITerminalInstance {
}
}
public scrollDown(): void {
public scrollDownLine(): void {
this._xterm.scrollDisp(1);
}
public scrollUp(): void {
public scrollDownPage(): void {
this._xterm.scrollDisp(this._xterm.rows - 1);
}
public scrollUpLine(): void {
this._xterm.scrollDisp(-1);
}
public scrollUpPage(): void {
this._xterm.scrollDisp(-(this._xterm.rows - 1));
}
public clear(): void {
this._xterm.clear();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册