From e813ae02fc5a140c3c5d481f2c7ca184de887297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Fri, 1 Feb 2019 20:28:45 +0100 Subject: [PATCH 1/4] return true from inputhandler methods to signal sequence was handled --- src/InputHandler.ts | 183 +++++++++++++++++++++++++++++--------------- src/Types.ts | 108 +++++++++++++------------- 2 files changed, 176 insertions(+), 115 deletions(-) diff --git a/src/InputHandler.ts b/src/InputHandler.ts index 2f53cfcb..4af525f2 100644 --- a/src/InputHandler.ts +++ b/src/InputHandler.ts @@ -446,15 +446,16 @@ export class InputHandler extends Disposable implements IInputHandler { * BEL * Bell (Ctrl-G). */ - public bell(): void { + public bell(): boolean { this._terminal.bell(); + return true; } /** * LF * Line Feed or New Line (NL). (LF is Ctrl-J). */ - public lineFeed(): void { + public lineFeed(): boolean { // make buffer local for faster access const buffer = this._terminal.buffer; @@ -476,36 +477,40 @@ export class InputHandler extends Disposable implements IInputHandler { * @event linefeed */ this._terminal.emit('linefeed'); + return true; } /** * CR * Carriage Return (Ctrl-M). */ - public carriageReturn(): void { + public carriageReturn(): boolean { this._terminal.buffer.x = 0; + return true; } /** * BS * Backspace (Ctrl-H). */ - public backspace(): void { + public backspace(): boolean { if (this._terminal.buffer.x > 0) { this._terminal.buffer.x--; } + return true; } /** * TAB * Horizontal Tab (HT) (Ctrl-I). */ - public tab(): void { + public tab(): boolean { const originalX = this._terminal.buffer.x; this._terminal.buffer.x = this._terminal.buffer.nextStop(); if (this._terminal.options.screenReaderMode) { this._terminal.emit('a11y.tab', this._terminal.buffer.x - originalX); } + return true; } /** @@ -513,8 +518,9 @@ export class InputHandler extends Disposable implements IInputHandler { * Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This invokes the * G1 character set. */ - public shiftOut(): void { + public shiftOut(): boolean { this._terminal.setgLevel(1); + return true; } /** @@ -522,28 +528,30 @@ export class InputHandler extends Disposable implements IInputHandler { * Shift In (Ctrl-O) -> Switch to Standard Character Set. This invokes the G0 * character set (the default). */ - public shiftIn(): void { + public shiftIn(): boolean { this._terminal.setgLevel(0); + return true; } /** * CSI Ps @ * Insert Ps (Blank) Character(s) (default = 1) (ICH). */ - public insertChars(params: number[]): void { + public insertChars(params: number[]): boolean { this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).insertCells( this._terminal.buffer.x, params[0] || 1, [this._terminal.eraseAttr(), NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE] ); this._terminal.updateRange(this._terminal.buffer.y); + return true; } /** * CSI Ps A * Cursor Up Ps Times (default = 1) (CUU). */ - public cursorUp(params: number[]): void { + public cursorUp(params: number[]): boolean { let param = params[0]; if (param < 1) { param = 1; @@ -552,13 +560,14 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.y < 0) { this._terminal.buffer.y = 0; } + return true; } /** * CSI Ps B * Cursor Down Ps Times (default = 1) (CUD). */ - public cursorDown(params: number[]): void { + public cursorDown(params: number[]): boolean { let param = params[0]; if (param < 1) { param = 1; @@ -571,13 +580,14 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.x >= this._terminal.cols) { this._terminal.buffer.x--; } + return true; } /** * CSI Ps C * Cursor Forward Ps Times (default = 1) (CUF). */ - public cursorForward(params: number[]): void { + public cursorForward(params: number[]): boolean { let param = params[0]; if (param < 1) { param = 1; @@ -586,13 +596,14 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.x >= this._terminal.cols) { this._terminal.buffer.x = this._terminal.cols - 1; } + return true; } /** * CSI Ps D * Cursor Backward Ps Times (default = 1) (CUB). */ - public cursorBackward(params: number[]): void { + public cursorBackward(params: number[]): boolean { let param = params[0]; if (param < 1) { param = 1; @@ -605,6 +616,7 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.x < 0) { this._terminal.buffer.x = 0; } + return true; } /** @@ -612,7 +624,7 @@ export class InputHandler extends Disposable implements IInputHandler { * Cursor Next Line Ps Times (default = 1) (CNL). * same as CSI Ps B ? */ - public cursorNextLine(params: number[]): void { + public cursorNextLine(params: number[]): boolean { let param = params[0]; if (param < 1) { param = 1; @@ -622,6 +634,7 @@ export class InputHandler extends Disposable implements IInputHandler { this._terminal.buffer.y = this._terminal.rows - 1; } this._terminal.buffer.x = 0; + return true; } @@ -630,7 +643,7 @@ export class InputHandler extends Disposable implements IInputHandler { * Cursor Preceding Line Ps Times (default = 1) (CNL). * reuse CSI Ps A ? */ - public cursorPrecedingLine(params: number[]): void { + public cursorPrecedingLine(params: number[]): boolean { let param = params[0]; if (param < 1) { param = 1; @@ -640,6 +653,7 @@ export class InputHandler extends Disposable implements IInputHandler { this._terminal.buffer.y = 0; } this._terminal.buffer.x = 0; + return true; } @@ -647,19 +661,20 @@ export class InputHandler extends Disposable implements IInputHandler { * CSI Ps G * Cursor Character Absolute [column] (default = [row,1]) (CHA). */ - public cursorCharAbsolute(params: number[]): void { + public cursorCharAbsolute(params: number[]): boolean { let param = params[0]; if (param < 1) { param = 1; } this._terminal.buffer.x = param - 1; + return true; } /** * CSI Ps ; Ps H * Cursor Position [row;column] (default = [1,1]) (CUP). */ - public cursorPosition(params: number[]): void { + public cursorPosition(params: number[]): boolean { let col: number; let row: number = params[0] - 1; @@ -683,17 +698,19 @@ export class InputHandler extends Disposable implements IInputHandler { this._terminal.buffer.x = col; this._terminal.buffer.y = row; + return true; } /** * CSI Ps I * Cursor Forward Tabulation Ps tab stops (default = 1) (CHT). */ - public cursorForwardTab(params: number[]): void { + public cursorForwardTab(params: number[]): boolean { let param = params[0] || 1; while (param--) { this._terminal.buffer.x = this._terminal.buffer.nextStop(); } + return true; } /** @@ -736,7 +753,7 @@ export class InputHandler extends Disposable implements IInputHandler { * Ps = 1 -> Selective Erase Above. * Ps = 2 -> Selective Erase All. */ - public eraseInDisplay(params: number[]): void { + public eraseInDisplay(params: number[]): boolean { let j; switch (params[0]) { case 0: @@ -782,6 +799,7 @@ export class InputHandler extends Disposable implements IInputHandler { } break; } + return true; } /** @@ -795,7 +813,7 @@ export class InputHandler extends Disposable implements IInputHandler { * Ps = 1 -> Selective Erase to Left. * Ps = 2 -> Selective Erase All. */ - public eraseInLine(params: number[]): void { + public eraseInLine(params: number[]): boolean { switch (params[0]) { case 0: this._eraseInBufferLine(this._terminal.buffer.y, this._terminal.buffer.x, this._terminal.cols); @@ -808,13 +826,14 @@ export class InputHandler extends Disposable implements IInputHandler { break; } this._terminal.updateRange(this._terminal.buffer.y); + return true; } /** * CSI Ps L * Insert Ps Line(s) (default = 1) (IL). */ - public insertLines(params: number[]): void { + public insertLines(params: number[]): boolean { let param: number = params[0]; if (param < 1) { param = 1; @@ -837,13 +856,14 @@ export class InputHandler extends Disposable implements IInputHandler { // this.maxRange(); this._terminal.updateRange(buffer.y); this._terminal.updateRange(buffer.scrollBottom); + return true; } /** * CSI Ps M * Delete Ps Line(s) (default = 1) (DL). */ - public deleteLines(params: number[]): void { + public deleteLines(params: number[]): boolean { let param = params[0]; if (param < 1) { param = 1; @@ -867,25 +887,27 @@ export class InputHandler extends Disposable implements IInputHandler { // this.maxRange(); this._terminal.updateRange(buffer.y); this._terminal.updateRange(buffer.scrollBottom); + return true; } /** * CSI Ps P * Delete Ps Character(s) (default = 1) (DCH). */ - public deleteChars(params: number[]): void { + public deleteChars(params: number[]): boolean { this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).deleteCells( this._terminal.buffer.x, params[0] || 1, [this._terminal.eraseAttr(), NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE] ); this._terminal.updateRange(this._terminal.buffer.y); + return true; } /** * CSI Ps S Scroll up Ps lines (default = 1) (SU). */ - public scrollUp(params: number[]): void { + public scrollUp(params: number[]): boolean { let param = params[0] || 1; // make buffer local for faster access @@ -898,12 +920,13 @@ export class InputHandler extends Disposable implements IInputHandler { // this.maxRange(); this._terminal.updateRange(buffer.scrollTop); this._terminal.updateRange(buffer.scrollBottom); + return true; } /** * CSI Ps T Scroll down Ps lines (default = 1) (SD). */ - public scrollDown(params: number[], collect?: string): void { + public scrollDown(params: number[], collect?: string): boolean { if (params.length < 2 && !collect) { let param = params[0] || 1; @@ -918,24 +941,26 @@ export class InputHandler extends Disposable implements IInputHandler { this._terminal.updateRange(buffer.scrollTop); this._terminal.updateRange(buffer.scrollBottom); } + return true; } /** * CSI Ps X * Erase Ps Character(s) (default = 1) (ECH). */ - public eraseChars(params: number[]): void { + public eraseChars(params: number[]): boolean { this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).replaceCells( this._terminal.buffer.x, this._terminal.buffer.x + (params[0] || 1), [this._terminal.eraseAttr(), NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE] ); + return true; } /** * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT). */ - public cursorBackwardTab(params: number[]): void { + public cursorBackwardTab(params: number[]): boolean { let param = params[0] || 1; // make buffer local for faster access @@ -944,13 +969,14 @@ export class InputHandler extends Disposable implements IInputHandler { while (param--) { buffer.x = buffer.prevStop(); } + return true; } /** * CSI Pm ` Character Position Absolute * [column] (default = [row,1]) (HPA). */ - public charPosAbsolute(params: number[]): void { + public charPosAbsolute(params: number[]): boolean { let param = params[0]; if (param < 1) { param = 1; @@ -959,6 +985,7 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.x >= this._terminal.cols) { this._terminal.buffer.x = this._terminal.cols - 1; } + return true; } /** @@ -966,7 +993,7 @@ export class InputHandler extends Disposable implements IInputHandler { * [columns] (default = [row,col+1]) (HPR) * reuse CSI Ps C ? */ - public hPositionRelative(params: number[]): void { + public hPositionRelative(params: number[]): boolean { let param = params[0]; if (param < 1) { param = 1; @@ -975,12 +1002,13 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.x >= this._terminal.cols) { this._terminal.buffer.x = this._terminal.cols - 1; } + return true; } /** * CSI Ps b Repeat the preceding graphic character Ps times (REP). */ - public repeatPrecedingCharacter(params: number[]): void { + public repeatPrecedingCharacter(params: number[]): boolean { // make buffer local for faster access const buffer = this._terminal.buffer; const line = buffer.lines.get(buffer.ybase + buffer.y); @@ -989,6 +1017,7 @@ export class InputHandler extends Disposable implements IInputHandler { line.get(buffer.x - 1) || [DEFAULT_ATTR, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE] ); // FIXME: no updateRange here? + return true; } /** @@ -1028,9 +1057,9 @@ export class InputHandler extends Disposable implements IInputHandler { * xterm/charproc.c - line 2012, for more information. * vim responds with ^[[?0c or ^[[?1c after the terminal's response (?) */ - public sendDeviceAttributes(params: number[], collect?: string): void { + public sendDeviceAttributes(params: number[], collect?: string): boolean { if (params[0] > 0) { - return; + return true; } if (!collect) { @@ -1055,13 +1084,14 @@ export class InputHandler extends Disposable implements IInputHandler { this._terminal.handler(C0.ESC + '[>83;40003;0c'); } } + return true; } /** * CSI Pm d Vertical Position Absolute (VPA) * [row] (default = [1,column]) */ - public linePosAbsolute(params: number[]): void { + public linePosAbsolute(params: number[]): boolean { let param = params[0]; if (param < 1) { param = 1; @@ -1070,6 +1100,7 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.y >= this._terminal.rows) { this._terminal.buffer.y = this._terminal.rows - 1; } + return true; } /** @@ -1077,7 +1108,7 @@ export class InputHandler extends Disposable implements IInputHandler { * [rows] (default = [row+1,column]) * reuse CSI Ps B ? */ - public vPositionRelative(params: number[]): void { + public vPositionRelative(params: number[]): boolean { let param = params[0]; if (param < 1) { param = 1; @@ -1090,6 +1121,7 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.x >= this._terminal.cols) { this._terminal.buffer.x--; } + return true; } /** @@ -1097,7 +1129,7 @@ export class InputHandler extends Disposable implements IInputHandler { * Horizontal and Vertical Position [row;column] (default = * [1,1]) (HVP). */ - public hVPosition(params: number[]): void { + public hVPosition(params: number[]): boolean { if (params[0] < 1) params[0] = 1; if (params[1] < 1) params[1] = 1; @@ -1110,6 +1142,7 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.x >= this._terminal.cols) { this._terminal.buffer.x = this._terminal.cols - 1; } + return true; } /** @@ -1120,13 +1153,14 @@ export class InputHandler extends Disposable implements IInputHandler { * Ps = 2 -> Clear Stops on Line. * http://vt100.net/annarbor/aaa-ug/section6.html */ - public tabClear(params: number[]): void { + public tabClear(params: number[]): boolean { const param = params[0]; if (param <= 0) { delete this._terminal.buffer.tabs[this._terminal.buffer.x]; } else if (param === 3) { this._terminal.buffer.tabs = {}; } + return true; } /** @@ -1215,13 +1249,13 @@ export class InputHandler extends Disposable implements IInputHandler { * Modes: * http: *vt100.net/docs/vt220-rm/chapter4.html */ - public setMode(params: number[], collect?: string): void { + public setMode(params: number[], collect?: string): boolean { if (params.length > 1) { for (let i = 0; i < params.length; i++) { this.setMode([params[i]]); } - return; + return true; } if (!collect) { @@ -1334,6 +1368,7 @@ export class InputHandler extends Disposable implements IInputHandler { break; } } + return true; } /** @@ -1418,13 +1453,13 @@ export class InputHandler extends Disposable implements IInputHandler { * Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style. * Ps = 2 0 0 4 -> Reset bracketed paste mode. */ - public resetMode(params: number[], collect?: string): void { + public resetMode(params: number[], collect?: string): boolean { if (params.length > 1) { for (let i = 0; i < params.length; i++) { this.resetMode([params[i]]); } - return; + return true; } if (!collect) { @@ -1514,6 +1549,7 @@ export class InputHandler extends Disposable implements IInputHandler { break; } } + return true; } /** @@ -1581,11 +1617,11 @@ export class InputHandler extends Disposable implements IInputHandler { * Ps = 4 8 ; 5 ; Ps -> Set background color to the second * Ps. */ - public charAttributes(params: number[]): void { + public charAttributes(params: number[]): boolean { // Optimize a single SGR0. if (params.length === 1 && params[0] === 0) { this._terminal.curAttr = DEFAULT_ATTR; - return; + return true; } const l = params.length; @@ -1705,6 +1741,8 @@ export class InputHandler extends Disposable implements IInputHandler { } this._terminal.curAttr = (flags << 18) | (fg << 9) | bg; + + return true; } /** @@ -1730,7 +1768,7 @@ export class InputHandler extends Disposable implements IInputHandler { * CSI ? 5 3 n Locator available, if compiled-in, or * CSI ? 5 0 n No Locator, if not. */ - public deviceStatus(params: number[], collect?: string): void { + public deviceStatus(params: number[], collect?: string): boolean { if (!collect) { switch (params[0]) { case 5: @@ -1772,13 +1810,14 @@ export class InputHandler extends Disposable implements IInputHandler { break; } } + return true; } /** * CSI ! p Soft terminal reset (DECSTR). * http://vt100.net/docs/vt220-rm/table4-10.html */ - public softReset(params: number[], collect?: string): void { + public softReset(params: number[], collect?: string): boolean { if (collect === '!') { this._terminal.cursorHidden = false; this._terminal.insertMode = false; @@ -1797,6 +1836,7 @@ export class InputHandler extends Disposable implements IInputHandler { this._terminal.glevel = 0; // ?? this._terminal.charsets = [null]; // ?? } + return true; } /** @@ -1809,7 +1849,7 @@ export class InputHandler extends Disposable implements IInputHandler { * Ps = 5 -> blinking bar (xterm). * Ps = 6 -> steady bar (xterm). */ - public setCursorStyle(params?: number[], collect?: string): void { + public setCursorStyle(params?: number[], collect?: string): boolean { if (collect === ' ') { const param = params[0] < 1 ? 1 : params[0]; switch (param) { @@ -1829,6 +1869,7 @@ export class InputHandler extends Disposable implements IInputHandler { const isBlinking = param % 2 === 1; this._terminal.setOption('cursorBlink', isBlinking); } + return true; } /** @@ -1837,12 +1878,15 @@ export class InputHandler extends Disposable implements IInputHandler { * dow) (DECSTBM). * CSI ? Pm r */ - public setScrollRegion(params: number[], collect?: string): void { - if (collect) return; + public setScrollRegion(params: number[], collect?: string): boolean { + if (collect) { + return true; + } this._terminal.buffer.scrollTop = (params[0] || 1) - 1; this._terminal.buffer.scrollBottom = (params[1] && params[1] <= this._terminal.rows ? params[1] : this._terminal.rows) - 1; this._terminal.buffer.x = 0; this._terminal.buffer.y = 0; + return true; } @@ -1851,10 +1895,11 @@ export class InputHandler extends Disposable implements IInputHandler { * ESC 7 * Save cursor (ANSI.SYS). */ - public saveCursor(params: number[]): void { + public saveCursor(params: number[]): boolean { this._terminal.buffer.savedX = this._terminal.buffer.x; this._terminal.buffer.savedY = this._terminal.buffer.y; this._terminal.buffer.savedCurAttr = this._terminal.curAttr; + return true; } @@ -1863,10 +1908,11 @@ export class InputHandler extends Disposable implements IInputHandler { * ESC 8 * Restore cursor (ANSI.SYS). */ - public restoreCursor(params: number[]): void { + public restoreCursor(params: number[]): boolean { this._terminal.buffer.x = this._terminal.buffer.savedX || 0; this._terminal.buffer.y = this._terminal.buffer.savedY || 0; this._terminal.curAttr = this._terminal.buffer.savedCurAttr || DEFAULT_ATTR; + return true; } @@ -1875,8 +1921,9 @@ export class InputHandler extends Disposable implements IInputHandler { * OSC 2; ST (set window title) * Proxy to set window title. Icon name is not supported. */ - public setTitle(data: string): void { + public setTitle(data: string): boolean { this._terminal.handleTitle(data); + return true; } /** @@ -1885,9 +1932,10 @@ export class InputHandler extends Disposable implements IInputHandler { * DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL) * Moves cursor to first position on next line. */ - public nextLine(): void { + public nextLine(): boolean { this._terminal.buffer.x = 0; this.index(); + return true; } /** @@ -1895,12 +1943,13 @@ export class InputHandler extends Disposable implements IInputHandler { * DEC mnemonic: DECKPAM (https://vt100.net/docs/vt510-rm/DECKPAM.html) * Enables the numeric keypad to send application sequences to the host. */ - public keypadApplicationMode(): void { + public keypadApplicationMode(): boolean { this._terminal.log('Serial port requested application keypad.'); this._terminal.applicationKeypad = true; if (this._terminal.viewport) { this._terminal.viewport.syncScrollArea(); } + return true; } /** @@ -1908,12 +1957,13 @@ export class InputHandler extends Disposable implements IInputHandler { * DEC mnemonic: DECKPNM (https://vt100.net/docs/vt510-rm/DECKPNM.html) * Enables the keypad to send numeric characters to the host. */ - public keypadNumericMode(): void { + public keypadNumericMode(): boolean { this._terminal.log('Switching back to normal keypad.'); this._terminal.applicationKeypad = false; if (this._terminal.viewport) { this._terminal.viewport.syncScrollArea(); } + return true; } /** @@ -1922,9 +1972,10 @@ export class InputHandler extends Disposable implements IInputHandler { * Select default character set. UTF-8 is not supported (string are unicode anyways) * therefore ESC % G does the same. */ - public selectDefaultCharset(): void { + public selectDefaultCharset(): boolean { this._terminal.setgLevel(0); this._terminal.setgCharset(0, DEFAULT_CHARSET); // US (default) + return true; } /** @@ -1943,10 +1994,15 @@ export class InputHandler extends Disposable implements IInputHandler { * ESC / C * Designate G3 Character Set (VT300). C = A -> ISO Latin-1 Supplemental. - Supported? */ - public selectCharset(collectAndFlag: string): void { - if (collectAndFlag.length !== 2) return this.selectDefaultCharset(); - if (collectAndFlag[0] === '/') return; // TODO: Is this supported? + public selectCharset(collectAndFlag: string): boolean { + if (collectAndFlag.length !== 2) { + return this.selectDefaultCharset(); + } + if (collectAndFlag[0] === '/') { + return true; // TODO: Is this supported? + } this._terminal.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] || DEFAULT_CHARSET); + return true; } /** @@ -1955,8 +2011,9 @@ export class InputHandler extends Disposable implements IInputHandler { * DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html) * Moves the cursor down one line in the same column. */ - public index(): void { + public index(): boolean { this._terminal.index(); // TODO: save to move from terminal? + return true; } /** @@ -1966,8 +2023,9 @@ export class InputHandler extends Disposable implements IInputHandler { * Sets a horizontal tab stop at the column position indicated by * the value of the active column when the terminal receives an HTS. */ - public tabSet(): void { + public tabSet(): boolean { this._terminal.tabSet(); // TODO: save to move from terminal? + return true; } /** @@ -1977,8 +2035,9 @@ export class InputHandler extends Disposable implements IInputHandler { * Moves the cursor up one line in the same column. If the cursor is at the top margin, * the page scrolls down. */ - public reverseIndex(): void { + public reverseIndex(): boolean { this._terminal.reverseIndex(); // TODO: save to move from terminal? + return true; } /** @@ -1986,9 +2045,10 @@ export class InputHandler extends Disposable implements IInputHandler { * DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html) * Reset to initial state. */ - public reset(): void { + public reset(): boolean { this._parser.reset(); this._terminal.reset(); // TODO: save to move from terminal? + return true; } /** @@ -2001,7 +2061,8 @@ export class InputHandler extends Disposable implements IInputHandler { * When you use a locking shift, the character set remains in GL or GR until * you use another locking shift. (partly supported) */ - public setgLevel(level: number): void { + public setgLevel(level: number): boolean { this._terminal.setgLevel(level); // TODO: save to move from terminal? + return true; } } diff --git a/src/Types.ts b/src/Types.ts index cc8ff00a..1611fb55 100644 --- a/src/Types.ts +++ b/src/Types.ts @@ -113,73 +113,73 @@ export interface IInputHandler { parse(data: string): void; print(data: Uint32Array, start: number, end: number): void; - /** C0 BEL */ bell(): void; - /** C0 LF */ lineFeed(): void; - /** C0 CR */ carriageReturn(): void; - /** C0 BS */ backspace(): void; - /** C0 HT */ tab(): void; - /** C0 SO */ shiftOut(): void; - /** C0 SI */ shiftIn(): void; + /** C0 BEL */ bell(): boolean; + /** C0 LF */ lineFeed(): boolean; + /** C0 CR */ carriageReturn(): boolean; + /** C0 BS */ backspace(): boolean; + /** C0 HT */ tab(): boolean; + /** C0 SO */ shiftOut(): boolean; + /** C0 SI */ shiftIn(): boolean; - /** CSI @ */ insertChars(params?: number[]): void; - /** CSI A */ cursorUp(params?: number[]): void; - /** CSI B */ cursorDown(params?: number[]): void; - /** CSI C */ cursorForward(params?: number[]): void; - /** CSI D */ cursorBackward(params?: number[]): void; - /** CSI E */ cursorNextLine(params?: number[]): void; - /** CSI F */ cursorPrecedingLine(params?: number[]): void; - /** CSI G */ cursorCharAbsolute(params?: number[]): void; - /** CSI H */ cursorPosition(params?: number[]): void; - /** CSI I */ cursorForwardTab(params?: number[]): void; - /** CSI J */ eraseInDisplay(params?: number[]): void; - /** CSI K */ eraseInLine(params?: number[]): void; - /** CSI L */ insertLines(params?: number[]): void; - /** CSI M */ deleteLines(params?: number[]): void; - /** CSI P */ deleteChars(params?: number[]): void; - /** CSI S */ scrollUp(params?: number[]): void; - /** CSI T */ scrollDown(params?: number[], collect?: string): void; - /** CSI X */ eraseChars(params?: number[]): void; - /** CSI Z */ cursorBackwardTab(params?: number[]): void; - /** CSI ` */ charPosAbsolute(params?: number[]): void; - /** CSI a */ hPositionRelative(params?: number[]): void; - /** CSI b */ repeatPrecedingCharacter(params?: number[]): void; - /** CSI c */ sendDeviceAttributes(params?: number[], collect?: string): void; - /** CSI d */ linePosAbsolute(params?: number[]): void; - /** CSI e */ vPositionRelative(params?: number[]): void; - /** CSI f */ hVPosition(params?: number[]): void; - /** CSI g */ tabClear(params?: number[]): void; - /** CSI h */ setMode(params?: number[], collect?: string): void; - /** CSI l */ resetMode(params?: number[], collect?: string): void; - /** CSI m */ charAttributes(params?: number[]): void; - /** CSI n */ deviceStatus(params?: number[], collect?: string): void; - /** CSI p */ softReset(params?: number[], collect?: string): void; - /** CSI q */ setCursorStyle(params?: number[], collect?: string): void; - /** CSI r */ setScrollRegion(params?: number[], collect?: string): void; - /** CSI s */ saveCursor(params?: number[]): void; - /** CSI u */ restoreCursor(params?: number[]): void; + /** CSI @ */ insertChars(params?: number[]): boolean; + /** CSI A */ cursorUp(params?: number[]): boolean; + /** CSI B */ cursorDown(params?: number[]): boolean; + /** CSI C */ cursorForward(params?: number[]): boolean; + /** CSI D */ cursorBackward(params?: number[]): boolean; + /** CSI E */ cursorNextLine(params?: number[]): boolean; + /** CSI F */ cursorPrecedingLine(params?: number[]): boolean; + /** CSI G */ cursorCharAbsolute(params?: number[]): boolean; + /** CSI H */ cursorPosition(params?: number[]): boolean; + /** CSI I */ cursorForwardTab(params?: number[]): boolean; + /** CSI J */ eraseInDisplay(params?: number[]): boolean; + /** CSI K */ eraseInLine(params?: number[]): boolean; + /** CSI L */ insertLines(params?: number[]): boolean; + /** CSI M */ deleteLines(params?: number[]): boolean; + /** CSI P */ deleteChars(params?: number[]): boolean; + /** CSI S */ scrollUp(params?: number[]): boolean; + /** CSI T */ scrollDown(params?: number[], collect?: string): boolean; + /** CSI X */ eraseChars(params?: number[]): boolean; + /** CSI Z */ cursorBackwardTab(params?: number[]): boolean; + /** CSI ` */ charPosAbsolute(params?: number[]): boolean; + /** CSI a */ hPositionRelative(params?: number[]): boolean; + /** CSI b */ repeatPrecedingCharacter(params?: number[]): boolean; + /** CSI c */ sendDeviceAttributes(params?: number[], collect?: string): boolean; + /** CSI d */ linePosAbsolute(params?: number[]): boolean; + /** CSI e */ vPositionRelative(params?: number[]): boolean; + /** CSI f */ hVPosition(params?: number[]): boolean; + /** CSI g */ tabClear(params?: number[]): boolean; + /** CSI h */ setMode(params?: number[], collect?: string): boolean; + /** CSI l */ resetMode(params?: number[], collect?: string): boolean; + /** CSI m */ charAttributes(params?: number[]): boolean; + /** CSI n */ deviceStatus(params?: number[], collect?: string): boolean; + /** CSI p */ softReset(params?: number[], collect?: string): boolean; + /** CSI q */ setCursorStyle(params?: number[], collect?: string): boolean; + /** CSI r */ setScrollRegion(params?: number[], collect?: string): boolean; + /** CSI s */ saveCursor(params?: number[]): boolean; + /** CSI u */ restoreCursor(params?: number[]): boolean; /** OSC 0 - OSC 2 */ setTitle(data: string): void; - /** ESC E */ nextLine(): void; - /** ESC = */ keypadApplicationMode(): void; - /** ESC > */ keypadNumericMode(): void; + OSC 2 */ setTitle(data: string): boolean; + /** ESC E */ nextLine(): boolean; + /** ESC = */ keypadApplicationMode(): boolean; + /** ESC > */ keypadNumericMode(): boolean; /** ESC % G - ESC % @ */ selectDefaultCharset(): void; + ESC % @ */ selectDefaultCharset(): boolean; /** ESC ( C ESC ) C ESC * C ESC + C ESC - C ESC . C - ESC / C */ selectCharset(collectAndFlag: string): void; - /** ESC D */ index(): void; - /** ESC H */ tabSet(): void; - /** ESC M */ reverseIndex(): void; - /** ESC c */ reset(): void; + ESC / C */ selectCharset(collectAndFlag: string): boolean; + /** ESC D */ index(): boolean; + /** ESC H */ tabSet(): boolean; + /** ESC M */ reverseIndex(): boolean; + /** ESC c */ reset(): boolean; /** ESC n ESC o ESC | ESC } - ESC ~ */ setgLevel(level: number): void; + ESC ~ */ setgLevel(level: number): boolean; } export interface ILinkMatcher { From 801db3831ddb7980955c2af759913aed3120f64b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Fri, 1 Feb 2019 20:32:07 +0100 Subject: [PATCH 2/4] type add methods --- src/InputHandler.ts | 11 +++++++++-- src/Types.ts | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/InputHandler.ts b/src/InputHandler.ts index 4af525f2..05af14a2 100644 --- a/src/InputHandler.ts +++ b/src/InputHandler.ts @@ -435,10 +435,17 @@ export class InputHandler extends Disposable implements IInputHandler { this._terminal.updateRange(buffer.y); } - addCsiHandler(flag: string, callback: (params: number[], collect: string) => boolean): IDisposable { + /** + * Forward addCsiHandler from parser. + */ + public addCsiHandler(flag: string, callback: (params: number[], collect: string) => boolean): IDisposable { return this._parser.addCsiHandler(flag, callback); } - addOscHandler(ident: number, callback: (data: string) => boolean): IDisposable { + + /** + * Forward addOscHandler from parser. + */ + public addOscHandler(ident: number, callback: (data: string) => boolean): IDisposable { return this._parser.addOscHandler(ident, callback); } diff --git a/src/Types.ts b/src/Types.ts index 1611fb55..67ad32d9 100644 --- a/src/Types.ts +++ b/src/Types.ts @@ -112,6 +112,8 @@ export interface ICompositionHelper { export interface IInputHandler { parse(data: string): void; print(data: Uint32Array, start: number, end: number): void; + addCsiHandler(flag: string, callback: (params: number[], collect: string) => boolean): IDisposable; + addOscHandler(ident: number, callback: (data: string) => boolean): IDisposable; /** C0 BEL */ bell(): boolean; /** C0 LF */ lineFeed(): boolean; From 7e36bf47c679f639027bd693862bed83e1793e1f Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 6 Apr 2019 15:21:04 -0400 Subject: [PATCH 3/4] Have undefined | true mean success --- src/EscapeSequenceParser.ts | 8 +- src/InputHandler.ts | 179 +++++++++++++----------------------- src/Types.ts | 108 +++++++++++----------- 3 files changed, 122 insertions(+), 173 deletions(-) diff --git a/src/EscapeSequenceParser.ts b/src/EscapeSequenceParser.ts index 7b65624d..197a3657 100644 --- a/src/EscapeSequenceParser.ts +++ b/src/EscapeSequenceParser.ts @@ -353,7 +353,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP if (this._oscHandlers[ident] === undefined) { this._oscHandlers[ident] = []; } - const handlerList = this._oscHandlers[ident]; + const handlerList = this._oscHandlers[ident]; handlerList.push(callback); return { dispose: () => { @@ -505,7 +505,8 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP const handlers = this._csiHandlers[code]; let j = handlers ? handlers.length - 1 : -1; for (; j >= 0; j--) { - if (handlers[j](params, collect)) { + // undefined or true means success and to stop bubbling + if (handlers[j](params, collect) !== false) { break; } } @@ -590,7 +591,8 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP const handlers = this._oscHandlers[identifier]; let j = handlers ? handlers.length - 1 : -1; for (; j >= 0; j--) { - if (handlers[j](content)) { + // undefined or true means success and to stop bubbling + if (handlers[j](content) !== false) { break; } } diff --git a/src/InputHandler.ts b/src/InputHandler.ts index e8d6d906..33e2db56 100644 --- a/src/InputHandler.ts +++ b/src/InputHandler.ts @@ -439,16 +439,15 @@ export class InputHandler extends Disposable implements IInputHandler { * BEL * Bell (Ctrl-G). */ - public bell(): boolean { + public bell(): void { this._terminal.bell(); - return true; } /** * LF * Line Feed or New Line (NL). (LF is Ctrl-J). */ - public lineFeed(): boolean { + public lineFeed(): void { // make buffer local for faster access const buffer = this._terminal.buffer; @@ -470,40 +469,36 @@ export class InputHandler extends Disposable implements IInputHandler { * @event linefeed */ this._terminal.emit('linefeed'); - return true; } /** * CR * Carriage Return (Ctrl-M). */ - public carriageReturn(): boolean { + public carriageReturn(): void { this._terminal.buffer.x = 0; - return true; } /** * BS * Backspace (Ctrl-H). */ - public backspace(): boolean { + public backspace(): void { if (this._terminal.buffer.x > 0) { this._terminal.buffer.x--; } - return true; } /** * TAB * Horizontal Tab (HT) (Ctrl-I). */ - public tab(): boolean { + public tab(): void { const originalX = this._terminal.buffer.x; this._terminal.buffer.x = this._terminal.buffer.nextStop(); if (this._terminal.options.screenReaderMode) { this._terminal.emit('a11y.tab', this._terminal.buffer.x - originalX); } - return true; } /** @@ -511,9 +506,8 @@ export class InputHandler extends Disposable implements IInputHandler { * Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This invokes the * G1 character set. */ - public shiftOut(): boolean { + public shiftOut(): void { this._terminal.setgLevel(1); - return true; } /** @@ -521,30 +515,28 @@ export class InputHandler extends Disposable implements IInputHandler { * Shift In (Ctrl-O) -> Switch to Standard Character Set. This invokes the G0 * character set (the default). */ - public shiftIn(): boolean { + public shiftIn(): void { this._terminal.setgLevel(0); - return true; } /** * CSI Ps @ * Insert Ps (Blank) Character(s) (default = 1) (ICH). */ - public insertChars(params: number[]): boolean { + public insertChars(params: number[]): void { this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).insertCells( this._terminal.buffer.x, params[0] || 1, this._terminal.buffer.getNullCell(this._terminal.eraseAttr()) ); this._terminal.updateRange(this._terminal.buffer.y); - return true; } /** * CSI Ps A * Cursor Up Ps Times (default = 1) (CUU). */ - public cursorUp(params: number[]): boolean { + public cursorUp(params: number[]): void { let param = params[0]; if (param < 1) { param = 1; @@ -553,14 +545,13 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.y < 0) { this._terminal.buffer.y = 0; } - return true; } /** * CSI Ps B * Cursor Down Ps Times (default = 1) (CUD). */ - public cursorDown(params: number[]): boolean { + public cursorDown(params: number[]): void { let param = params[0]; if (param < 1) { param = 1; @@ -573,14 +564,13 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.x >= this._terminal.cols) { this._terminal.buffer.x--; } - return true; } /** * CSI Ps C * Cursor Forward Ps Times (default = 1) (CUF). */ - public cursorForward(params: number[]): boolean { + public cursorForward(params: number[]): void { let param = params[0]; if (param < 1) { param = 1; @@ -589,14 +579,13 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.x >= this._terminal.cols) { this._terminal.buffer.x = this._terminal.cols - 1; } - return true; } /** * CSI Ps D * Cursor Backward Ps Times (default = 1) (CUB). */ - public cursorBackward(params: number[]): boolean { + public cursorBackward(params: number[]): void { let param = params[0]; if (param < 1) { param = 1; @@ -609,7 +598,6 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.x < 0) { this._terminal.buffer.x = 0; } - return true; } /** @@ -617,7 +605,7 @@ export class InputHandler extends Disposable implements IInputHandler { * Cursor Next Line Ps Times (default = 1) (CNL). * same as CSI Ps B ? */ - public cursorNextLine(params: number[]): boolean { + public cursorNextLine(params: number[]): void { let param = params[0]; if (param < 1) { param = 1; @@ -627,7 +615,6 @@ export class InputHandler extends Disposable implements IInputHandler { this._terminal.buffer.y = this._terminal.rows - 1; } this._terminal.buffer.x = 0; - return true; } @@ -636,7 +623,7 @@ export class InputHandler extends Disposable implements IInputHandler { * Cursor Preceding Line Ps Times (default = 1) (CNL). * reuse CSI Ps A ? */ - public cursorPrecedingLine(params: number[]): boolean { + public cursorPrecedingLine(params: number[]): void { let param = params[0]; if (param < 1) { param = 1; @@ -646,7 +633,6 @@ export class InputHandler extends Disposable implements IInputHandler { this._terminal.buffer.y = 0; } this._terminal.buffer.x = 0; - return true; } @@ -654,20 +640,19 @@ export class InputHandler extends Disposable implements IInputHandler { * CSI Ps G * Cursor Character Absolute [column] (default = [row,1]) (CHA). */ - public cursorCharAbsolute(params: number[]): boolean { + public cursorCharAbsolute(params: number[]): void { let param = params[0]; if (param < 1) { param = 1; } this._terminal.buffer.x = param - 1; - return true; } /** * CSI Ps ; Ps H * Cursor Position [row;column] (default = [1,1]) (CUP). */ - public cursorPosition(params: number[]): boolean { + public cursorPosition(params: number[]): void { let col: number; let row: number = params[0] - 1; @@ -691,19 +676,17 @@ export class InputHandler extends Disposable implements IInputHandler { this._terminal.buffer.x = col; this._terminal.buffer.y = row; - return true; } /** * CSI Ps I * Cursor Forward Tabulation Ps tab stops (default = 1) (CHT). */ - public cursorForwardTab(params: number[]): boolean { + public cursorForwardTab(params: number[]): void { let param = params[0] || 1; while (param--) { this._terminal.buffer.x = this._terminal.buffer.nextStop(); } - return true; } /** @@ -746,7 +729,7 @@ export class InputHandler extends Disposable implements IInputHandler { * Ps = 1 -> Selective Erase Above. * Ps = 2 -> Selective Erase All. */ - public eraseInDisplay(params: number[]): boolean { + public eraseInDisplay(params: number[]): void { let j; switch (params[0]) { case 0: @@ -792,7 +775,6 @@ export class InputHandler extends Disposable implements IInputHandler { } break; } - return true; } /** @@ -806,7 +788,7 @@ export class InputHandler extends Disposable implements IInputHandler { * Ps = 1 -> Selective Erase to Left. * Ps = 2 -> Selective Erase All. */ - public eraseInLine(params: number[]): boolean { + public eraseInLine(params: number[]): void { switch (params[0]) { case 0: this._eraseInBufferLine(this._terminal.buffer.y, this._terminal.buffer.x, this._terminal.cols); @@ -819,14 +801,13 @@ export class InputHandler extends Disposable implements IInputHandler { break; } this._terminal.updateRange(this._terminal.buffer.y); - return true; } /** * CSI Ps L * Insert Ps Line(s) (default = 1) (IL). */ - public insertLines(params: number[]): boolean { + public insertLines(params: number[]): void { let param: number = params[0]; if (param < 1) { param = 1; @@ -849,14 +830,13 @@ export class InputHandler extends Disposable implements IInputHandler { // this.maxRange(); this._terminal.updateRange(buffer.y); this._terminal.updateRange(buffer.scrollBottom); - return true; } /** * CSI Ps M * Delete Ps Line(s) (default = 1) (DL). */ - public deleteLines(params: number[]): boolean { + public deleteLines(params: number[]): void { let param = params[0]; if (param < 1) { param = 1; @@ -880,27 +860,25 @@ export class InputHandler extends Disposable implements IInputHandler { // this.maxRange(); this._terminal.updateRange(buffer.y); this._terminal.updateRange(buffer.scrollBottom); - return true; } /** * CSI Ps P * Delete Ps Character(s) (default = 1) (DCH). */ - public deleteChars(params: number[]): boolean { + public deleteChars(params: number[]): void { this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).deleteCells( this._terminal.buffer.x, params[0] || 1, this._terminal.buffer.getNullCell(this._terminal.eraseAttr()) ); this._terminal.updateRange(this._terminal.buffer.y); - return true; } /** * CSI Ps S Scroll up Ps lines (default = 1) (SU). */ - public scrollUp(params: number[]): boolean { + public scrollUp(params: number[]): void { let param = params[0] || 1; // make buffer local for faster access @@ -913,13 +891,12 @@ export class InputHandler extends Disposable implements IInputHandler { // this.maxRange(); this._terminal.updateRange(buffer.scrollTop); this._terminal.updateRange(buffer.scrollBottom); - return true; } /** * CSI Ps T Scroll down Ps lines (default = 1) (SD). */ - public scrollDown(params: number[], collect?: string): boolean { + public scrollDown(params: number[], collect?: string): void { if (params.length < 2 && !collect) { let param = params[0] || 1; @@ -934,26 +911,24 @@ export class InputHandler extends Disposable implements IInputHandler { this._terminal.updateRange(buffer.scrollTop); this._terminal.updateRange(buffer.scrollBottom); } - return true; } /** * CSI Ps X * Erase Ps Character(s) (default = 1) (ECH). */ - public eraseChars(params: number[]): boolean { + public eraseChars(params: number[]): void { this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).replaceCells( this._terminal.buffer.x, this._terminal.buffer.x + (params[0] || 1), this._terminal.buffer.getNullCell(this._terminal.eraseAttr()) ); - return true; } /** * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT). */ - public cursorBackwardTab(params: number[]): boolean { + public cursorBackwardTab(params: number[]): void { let param = params[0] || 1; // make buffer local for faster access @@ -962,14 +937,13 @@ export class InputHandler extends Disposable implements IInputHandler { while (param--) { buffer.x = buffer.prevStop(); } - return true; } /** * CSI Pm ` Character Position Absolute * [column] (default = [row,1]) (HPA). */ - public charPosAbsolute(params: number[]): boolean { + public charPosAbsolute(params: number[]): void { let param = params[0]; if (param < 1) { param = 1; @@ -978,7 +952,6 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.x >= this._terminal.cols) { this._terminal.buffer.x = this._terminal.cols - 1; } - return true; } /** @@ -986,7 +959,7 @@ export class InputHandler extends Disposable implements IInputHandler { * [columns] (default = [row,col+1]) (HPR) * reuse CSI Ps C ? */ - public hPositionRelative(params: number[]): boolean { + public hPositionRelative(params: number[]): void { let param = params[0]; if (param < 1) { param = 1; @@ -995,13 +968,12 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.x >= this._terminal.cols) { this._terminal.buffer.x = this._terminal.cols - 1; } - return true; } /** * CSI Ps b Repeat the preceding graphic character Ps times (REP). */ - public repeatPrecedingCharacter(params: number[]): boolean { + public repeatPrecedingCharacter(params: number[]): void { // make buffer local for faster access const buffer = this._terminal.buffer; const line = buffer.lines.get(buffer.ybase + buffer.y); @@ -1011,7 +983,6 @@ export class InputHandler extends Disposable implements IInputHandler { (this._workCell.content !== undefined) ? this._workCell : buffer.getNullCell(DEFAULT_ATTR) ); // FIXME: no updateRange here? - return true; } /** @@ -1051,9 +1022,9 @@ export class InputHandler extends Disposable implements IInputHandler { * xterm/charproc.c - line 2012, for more information. * vim responds with ^[[?0c or ^[[?1c after the terminal's response (?) */ - public sendDeviceAttributes(params: number[], collect?: string): boolean { + public sendDeviceAttributes(params: number[], collect?: string): void { if (params[0] > 0) { - return true; + return; } if (!collect) { @@ -1078,14 +1049,13 @@ export class InputHandler extends Disposable implements IInputHandler { this._terminal.handler(C0.ESC + '[>83;40003;0c'); } } - return true; } /** * CSI Pm d Vertical Position Absolute (VPA) * [row] (default = [1,column]) */ - public linePosAbsolute(params: number[]): boolean { + public linePosAbsolute(params: number[]): void { let param = params[0]; if (param < 1) { param = 1; @@ -1094,7 +1064,6 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.y >= this._terminal.rows) { this._terminal.buffer.y = this._terminal.rows - 1; } - return true; } /** @@ -1102,7 +1071,7 @@ export class InputHandler extends Disposable implements IInputHandler { * [rows] (default = [row+1,column]) * reuse CSI Ps B ? */ - public vPositionRelative(params: number[]): boolean { + public vPositionRelative(params: number[]): void { let param = params[0]; if (param < 1) { param = 1; @@ -1115,7 +1084,6 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.x >= this._terminal.cols) { this._terminal.buffer.x--; } - return true; } /** @@ -1123,7 +1091,7 @@ export class InputHandler extends Disposable implements IInputHandler { * Horizontal and Vertical Position [row;column] (default = * [1,1]) (HVP). */ - public hVPosition(params: number[]): boolean { + public hVPosition(params: number[]): void { if (params[0] < 1) params[0] = 1; if (params[1] < 1) params[1] = 1; @@ -1136,7 +1104,6 @@ export class InputHandler extends Disposable implements IInputHandler { if (this._terminal.buffer.x >= this._terminal.cols) { this._terminal.buffer.x = this._terminal.cols - 1; } - return true; } /** @@ -1147,14 +1114,13 @@ export class InputHandler extends Disposable implements IInputHandler { * Ps = 2 -> Clear Stops on Line. * http://vt100.net/annarbor/aaa-ug/section6.html */ - public tabClear(params: number[]): boolean { + public tabClear(params: number[]): void { const param = params[0]; if (param <= 0) { delete this._terminal.buffer.tabs[this._terminal.buffer.x]; } else if (param === 3) { this._terminal.buffer.tabs = {}; } - return true; } /** @@ -1243,13 +1209,13 @@ export class InputHandler extends Disposable implements IInputHandler { * Modes: * http: *vt100.net/docs/vt220-rm/chapter4.html */ - public setMode(params: number[], collect?: string): boolean { + public setMode(params: number[], collect?: string): void { if (params.length > 1) { for (let i = 0; i < params.length; i++) { this.setMode([params[i]]); } - return true; + return; } if (!collect) { @@ -1364,7 +1330,6 @@ export class InputHandler extends Disposable implements IInputHandler { break; } } - return true; } /** @@ -1449,13 +1414,13 @@ export class InputHandler extends Disposable implements IInputHandler { * Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style. * Ps = 2 0 0 4 -> Reset bracketed paste mode. */ - public resetMode(params: number[], collect?: string): boolean { + public resetMode(params: number[], collect?: string): void { if (params.length > 1) { for (let i = 0; i < params.length; i++) { this.resetMode([params[i]]); } - return true; + return; } if (!collect) { @@ -1547,7 +1512,6 @@ export class InputHandler extends Disposable implements IInputHandler { break; } } - return true; } /** @@ -1615,11 +1579,11 @@ export class InputHandler extends Disposable implements IInputHandler { * Ps = 4 8 ; 5 ; Ps -> Set background color to the second * Ps. */ - public charAttributes(params: number[]): boolean { + public charAttributes(params: number[]): void { // Optimize a single SGR0. if (params.length === 1 && params[0] === 0) { this._terminal.curAttr = DEFAULT_ATTR; - return true; + return; } const l = params.length; @@ -1739,8 +1703,6 @@ export class InputHandler extends Disposable implements IInputHandler { } this._terminal.curAttr = (flags << 18) | (fg << 9) | bg; - - return true; } /** @@ -1766,7 +1728,7 @@ export class InputHandler extends Disposable implements IInputHandler { * CSI ? 5 3 n Locator available, if compiled-in, or * CSI ? 5 0 n No Locator, if not. */ - public deviceStatus(params: number[], collect?: string): boolean { + public deviceStatus(params: number[], collect?: string): void { if (!collect) { switch (params[0]) { case 5: @@ -1808,14 +1770,13 @@ export class InputHandler extends Disposable implements IInputHandler { break; } } - return true; } /** * CSI ! p Soft terminal reset (DECSTR). * http://vt100.net/docs/vt220-rm/table4-10.html */ - public softReset(params: number[], collect?: string): boolean { + public softReset(params: number[], collect?: string): void { if (collect === '!') { this._terminal.cursorHidden = false; this._terminal.insertMode = false; @@ -1834,7 +1795,6 @@ export class InputHandler extends Disposable implements IInputHandler { this._terminal.glevel = 0; // ?? this._terminal.charsets = [null]; // ?? } - return true; } /** @@ -1847,7 +1807,7 @@ export class InputHandler extends Disposable implements IInputHandler { * Ps = 5 -> blinking bar (xterm). * Ps = 6 -> steady bar (xterm). */ - public setCursorStyle(params?: number[], collect?: string): boolean { + public setCursorStyle(params?: number[], collect?: string): void { if (collect === ' ') { const param = params[0] < 1 ? 1 : params[0]; switch (param) { @@ -1867,7 +1827,6 @@ export class InputHandler extends Disposable implements IInputHandler { const isBlinking = param % 2 === 1; this._terminal.setOption('cursorBlink', isBlinking); } - return true; } /** @@ -1876,15 +1835,14 @@ export class InputHandler extends Disposable implements IInputHandler { * dow) (DECSTBM). * CSI ? Pm r */ - public setScrollRegion(params: number[], collect?: string): boolean { + public setScrollRegion(params: number[], collect?: string): void { if (collect) { - return true; + return; } this._terminal.buffer.scrollTop = (params[0] || 1) - 1; this._terminal.buffer.scrollBottom = (params[1] && params[1] <= this._terminal.rows ? params[1] : this._terminal.rows) - 1; this._terminal.buffer.x = 0; this._terminal.buffer.y = 0; - return true; } @@ -1893,11 +1851,10 @@ export class InputHandler extends Disposable implements IInputHandler { * ESC 7 * Save cursor (ANSI.SYS). */ - public saveCursor(params: number[]): boolean { + public saveCursor(params: number[]): void { this._terminal.buffer.savedX = this._terminal.buffer.x; this._terminal.buffer.savedY = this._terminal.buffer.y; this._terminal.buffer.savedCurAttr = this._terminal.curAttr; - return true; } @@ -1906,11 +1863,10 @@ export class InputHandler extends Disposable implements IInputHandler { * ESC 8 * Restore cursor (ANSI.SYS). */ - public restoreCursor(params: number[]): boolean { + public restoreCursor(params: number[]): void { this._terminal.buffer.x = this._terminal.buffer.savedX || 0; this._terminal.buffer.y = this._terminal.buffer.savedY || 0; this._terminal.curAttr = this._terminal.buffer.savedCurAttr || DEFAULT_ATTR; - return true; } @@ -1919,9 +1875,8 @@ export class InputHandler extends Disposable implements IInputHandler { * OSC 2; ST (set window title) * Proxy to set window title. Icon name is not supported. */ - public setTitle(data: string): boolean { + public setTitle(data: string): void { this._terminal.handleTitle(data); - return true; } /** @@ -1930,10 +1885,9 @@ export class InputHandler extends Disposable implements IInputHandler { * DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL) * Moves cursor to first position on next line. */ - public nextLine(): boolean { + public nextLine(): void { this._terminal.buffer.x = 0; this.index(); - return true; } /** @@ -1941,13 +1895,12 @@ export class InputHandler extends Disposable implements IInputHandler { * DEC mnemonic: DECKPAM (https://vt100.net/docs/vt510-rm/DECKPAM.html) * Enables the numeric keypad to send application sequences to the host. */ - public keypadApplicationMode(): boolean { + public keypadApplicationMode(): void { this._terminal.log('Serial port requested application keypad.'); this._terminal.applicationKeypad = true; if (this._terminal.viewport) { this._terminal.viewport.syncScrollArea(); } - return true; } /** @@ -1955,13 +1908,12 @@ export class InputHandler extends Disposable implements IInputHandler { * DEC mnemonic: DECKPNM (https://vt100.net/docs/vt510-rm/DECKPNM.html) * Enables the keypad to send numeric characters to the host. */ - public keypadNumericMode(): boolean { + public keypadNumericMode(): void { this._terminal.log('Switching back to normal keypad.'); this._terminal.applicationKeypad = false; if (this._terminal.viewport) { this._terminal.viewport.syncScrollArea(); } - return true; } /** @@ -1970,10 +1922,9 @@ export class InputHandler extends Disposable implements IInputHandler { * Select default character set. UTF-8 is not supported (string are unicode anyways) * therefore ESC % G does the same. */ - public selectDefaultCharset(): boolean { + public selectDefaultCharset(): void { this._terminal.setgLevel(0); this._terminal.setgCharset(0, DEFAULT_CHARSET); // US (default) - return true; } /** @@ -1992,15 +1943,16 @@ export class InputHandler extends Disposable implements IInputHandler { * ESC / C * Designate G3 Character Set (VT300). C = A -> ISO Latin-1 Supplemental. - Supported? */ - public selectCharset(collectAndFlag: string): boolean { + public selectCharset(collectAndFlag: string): void { if (collectAndFlag.length !== 2) { - return this.selectDefaultCharset(); + this.selectDefaultCharset(); + return; } if (collectAndFlag[0] === '/') { - return true; // TODO: Is this supported? + return; // TODO: Is this supported? } this._terminal.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] || DEFAULT_CHARSET); - return true; + return; } /** @@ -2009,9 +1961,8 @@ export class InputHandler extends Disposable implements IInputHandler { * DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html) * Moves the cursor down one line in the same column. */ - public index(): boolean { + public index(): void { this._terminal.index(); // TODO: save to move from terminal? - return true; } /** @@ -2021,9 +1972,8 @@ export class InputHandler extends Disposable implements IInputHandler { * Sets a horizontal tab stop at the column position indicated by * the value of the active column when the terminal receives an HTS. */ - public tabSet(): boolean { + public tabSet(): void { this._terminal.tabSet(); // TODO: save to move from terminal? - return true; } /** @@ -2033,9 +1983,8 @@ export class InputHandler extends Disposable implements IInputHandler { * Moves the cursor up one line in the same column. If the cursor is at the top margin, * the page scrolls down. */ - public reverseIndex(): boolean { + public reverseIndex(): void { this._terminal.reverseIndex(); // TODO: save to move from terminal? - return true; } /** @@ -2043,10 +1992,9 @@ export class InputHandler extends Disposable implements IInputHandler { * DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html) * Reset to initial state. */ - public reset(): boolean { + public reset(): void { this._parser.reset(); this._terminal.reset(); // TODO: save to move from terminal? - return true; } /** @@ -2059,8 +2007,7 @@ export class InputHandler extends Disposable implements IInputHandler { * When you use a locking shift, the character set remains in GL or GR until * you use another locking shift. (partly supported) */ - public setgLevel(level: number): boolean { + public setgLevel(level: number): void { this._terminal.setgLevel(level); // TODO: save to move from terminal? - return true; } } diff --git a/src/Types.ts b/src/Types.ts index a21ac59e..cbb8e502 100644 --- a/src/Types.ts +++ b/src/Types.ts @@ -115,73 +115,73 @@ export interface IInputHandler { addCsiHandler(flag: string, callback: (params: number[], collect: string) => boolean): IDisposable; addOscHandler(ident: number, callback: (data: string) => boolean): IDisposable; - /** C0 BEL */ bell(): boolean; - /** C0 LF */ lineFeed(): boolean; - /** C0 CR */ carriageReturn(): boolean; - /** C0 BS */ backspace(): boolean; - /** C0 HT */ tab(): boolean; - /** C0 SO */ shiftOut(): boolean; - /** C0 SI */ shiftIn(): boolean; + /** C0 BEL */ bell(): void; + /** C0 LF */ lineFeed(): void; + /** C0 CR */ carriageReturn(): void; + /** C0 BS */ backspace(): void; + /** C0 HT */ tab(): void; + /** C0 SO */ shiftOut(): void; + /** C0 SI */ shiftIn(): void; - /** CSI @ */ insertChars(params?: number[]): boolean; - /** CSI A */ cursorUp(params?: number[]): boolean; - /** CSI B */ cursorDown(params?: number[]): boolean; - /** CSI C */ cursorForward(params?: number[]): boolean; - /** CSI D */ cursorBackward(params?: number[]): boolean; - /** CSI E */ cursorNextLine(params?: number[]): boolean; - /** CSI F */ cursorPrecedingLine(params?: number[]): boolean; - /** CSI G */ cursorCharAbsolute(params?: number[]): boolean; - /** CSI H */ cursorPosition(params?: number[]): boolean; - /** CSI I */ cursorForwardTab(params?: number[]): boolean; - /** CSI J */ eraseInDisplay(params?: number[]): boolean; - /** CSI K */ eraseInLine(params?: number[]): boolean; - /** CSI L */ insertLines(params?: number[]): boolean; - /** CSI M */ deleteLines(params?: number[]): boolean; - /** CSI P */ deleteChars(params?: number[]): boolean; - /** CSI S */ scrollUp(params?: number[]): boolean; - /** CSI T */ scrollDown(params?: number[], collect?: string): boolean; - /** CSI X */ eraseChars(params?: number[]): boolean; - /** CSI Z */ cursorBackwardTab(params?: number[]): boolean; - /** CSI ` */ charPosAbsolute(params?: number[]): boolean; - /** CSI a */ hPositionRelative(params?: number[]): boolean; - /** CSI b */ repeatPrecedingCharacter(params?: number[]): boolean; - /** CSI c */ sendDeviceAttributes(params?: number[], collect?: string): boolean; - /** CSI d */ linePosAbsolute(params?: number[]): boolean; - /** CSI e */ vPositionRelative(params?: number[]): boolean; - /** CSI f */ hVPosition(params?: number[]): boolean; - /** CSI g */ tabClear(params?: number[]): boolean; - /** CSI h */ setMode(params?: number[], collect?: string): boolean; - /** CSI l */ resetMode(params?: number[], collect?: string): boolean; - /** CSI m */ charAttributes(params?: number[]): boolean; - /** CSI n */ deviceStatus(params?: number[], collect?: string): boolean; - /** CSI p */ softReset(params?: number[], collect?: string): boolean; - /** CSI q */ setCursorStyle(params?: number[], collect?: string): boolean; - /** CSI r */ setScrollRegion(params?: number[], collect?: string): boolean; - /** CSI s */ saveCursor(params?: number[]): boolean; - /** CSI u */ restoreCursor(params?: number[]): boolean; + /** CSI @ */ insertChars(params?: number[]): void; + /** CSI A */ cursorUp(params?: number[]): void; + /** CSI B */ cursorDown(params?: number[]): void; + /** CSI C */ cursorForward(params?: number[]): void; + /** CSI D */ cursorBackward(params?: number[]): void; + /** CSI E */ cursorNextLine(params?: number[]): void; + /** CSI F */ cursorPrecedingLine(params?: number[]): void; + /** CSI G */ cursorCharAbsolute(params?: number[]): void; + /** CSI H */ cursorPosition(params?: number[]): void; + /** CSI I */ cursorForwardTab(params?: number[]): void; + /** CSI J */ eraseInDisplay(params?: number[]): void; + /** CSI K */ eraseInLine(params?: number[]): void; + /** CSI L */ insertLines(params?: number[]): void; + /** CSI M */ deleteLines(params?: number[]): void; + /** CSI P */ deleteChars(params?: number[]): void; + /** CSI S */ scrollUp(params?: number[]): void; + /** CSI T */ scrollDown(params?: number[], collect?: string): void; + /** CSI X */ eraseChars(params?: number[]): void; + /** CSI Z */ cursorBackwardTab(params?: number[]): void; + /** CSI ` */ charPosAbsolute(params?: number[]): void; + /** CSI a */ hPositionRelative(params?: number[]): void; + /** CSI b */ repeatPrecedingCharacter(params?: number[]): void; + /** CSI c */ sendDeviceAttributes(params?: number[], collect?: string): void; + /** CSI d */ linePosAbsolute(params?: number[]): void; + /** CSI e */ vPositionRelative(params?: number[]): void; + /** CSI f */ hVPosition(params?: number[]): void; + /** CSI g */ tabClear(params?: number[]): void; + /** CSI h */ setMode(params?: number[], collect?: string): void; + /** CSI l */ resetMode(params?: number[], collect?: string): void; + /** CSI m */ charAttributes(params?: number[]): void; + /** CSI n */ deviceStatus(params?: number[], collect?: string): void; + /** CSI p */ softReset(params?: number[], collect?: string): void; + /** CSI q */ setCursorStyle(params?: number[], collect?: string): void; + /** CSI r */ setScrollRegion(params?: number[], collect?: string): void; + /** CSI s */ saveCursor(params?: number[]): void; + /** CSI u */ restoreCursor(params?: number[]): void; /** OSC 0 - OSC 2 */ setTitle(data: string): boolean; - /** ESC E */ nextLine(): boolean; - /** ESC = */ keypadApplicationMode(): boolean; - /** ESC > */ keypadNumericMode(): boolean; + OSC 2 */ setTitle(data: string): void; + /** ESC E */ nextLine(): void; + /** ESC = */ keypadApplicationMode(): void; + /** ESC > */ keypadNumericMode(): void; /** ESC % G - ESC % @ */ selectDefaultCharset(): boolean; + ESC % @ */ selectDefaultCharset(): void; /** ESC ( C ESC ) C ESC * C ESC + C ESC - C ESC . C - ESC / C */ selectCharset(collectAndFlag: string): boolean; - /** ESC D */ index(): boolean; - /** ESC H */ tabSet(): boolean; - /** ESC M */ reverseIndex(): boolean; - /** ESC c */ reset(): boolean; + ESC / C */ selectCharset(collectAndFlag: string): void; + /** ESC D */ index(): void; + /** ESC H */ tabSet(): void; + /** ESC M */ reverseIndex(): void; + /** ESC c */ reset(): void; /** ESC n ESC o ESC | ESC } - ESC ~ */ setgLevel(level: number): boolean; + ESC ~ */ setgLevel(level: number): void; } export interface ILinkMatcher { From dee4429151c2789f9208977c737d09d6aa5fee38 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Tue, 9 Apr 2019 11:11:16 -0400 Subject: [PATCH 4/4] Remove unneeded interfaces --- src/Types.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Types.ts b/src/Types.ts index 7967662a..6e0108ae 100644 --- a/src/Types.ts +++ b/src/Types.ts @@ -111,8 +111,6 @@ export interface ICompositionHelper { export interface IInputHandler { parse(data: string): void; print(data: Uint32Array, start: number, end: number): void; - addCsiHandler(flag: string, callback: (params: number[], collect: string) => boolean): IDisposable; - addOscHandler(ident: number, callback: (data: string) => boolean): IDisposable; /** C0 BEL */ bell(): void; /** C0 LF */ lineFeed(): void;