mirror of
https://github.com/wavetermdev/xterm.js.git
synced 2026-08-05 13:43:48 -07:00
several changes:
- missing escape sequence related methods in InputHandler implemented - created namespace for C1 control codes
This commit is contained in:
@@ -77,3 +77,74 @@ export namespace C0 {
|
||||
/** Delete (Caret = ^?) */
|
||||
export const DEL = '\x7f';
|
||||
}
|
||||
|
||||
/**
|
||||
* C1 control codes
|
||||
* See = https://en.wikipedia.org/wiki/C0_and_C1_control_codes
|
||||
*/
|
||||
export namespace C1 {
|
||||
/** padding character */
|
||||
export const PAD = '\x80';
|
||||
/** High Octet Preset */
|
||||
export const HOP = '\x81';
|
||||
/** Break Permitted Here */
|
||||
export const BPH = '\x82';
|
||||
/** No Break Here */
|
||||
export const NBH = '\x83';
|
||||
/** Index */
|
||||
export const IND = '\x84';
|
||||
/** Next Line */
|
||||
export const NEL = '\x85';
|
||||
/** Start of Selected Area */
|
||||
export const SSA = '\x86';
|
||||
/** End of Selected Area */
|
||||
export const ESA = '\x87';
|
||||
/** Horizontal Tabulation Set */
|
||||
export const HTS = '\x88';
|
||||
/** Horizontal Tabulation With Justification */
|
||||
export const HTJ = '\x89';
|
||||
/** Vertical Tabulation Set */
|
||||
export const VTS = '\x8a';
|
||||
/** Partial Line Down */
|
||||
export const PLD = '\x8b';
|
||||
/** Partial Line Up */
|
||||
export const PLU = '\x8c';
|
||||
/** Reverse Index */
|
||||
export const RI = '\x8d';
|
||||
/** Single-Shift 2 */
|
||||
export const SS2 = '\x8e';
|
||||
/** Single-Shift 3 */
|
||||
export const SS3 = '\x8f';
|
||||
/** Device Control String */
|
||||
export const DCS = '\x90';
|
||||
/** Private Use 1 */
|
||||
export const PU1 = '\x91';
|
||||
/** Private Use 2 */
|
||||
export const PU2 = '\x92';
|
||||
/** Set Transmit State */
|
||||
export const STS = '\x93';
|
||||
/** Destructive backspace, intended to eliminate ambiguity about meaning of BS. */
|
||||
export const CCH = '\x94';
|
||||
/** Message Waiting */
|
||||
export const MW = '\x95';
|
||||
/** Start of Protected Area */
|
||||
export const SPA = '\x96';
|
||||
/** End of Protected Area */
|
||||
export const EPA = '\x97';
|
||||
/** Start of String */
|
||||
export const SOS = '\x98';
|
||||
/** Single Graphic Character Introducer */
|
||||
export const SGCI = '\x99';
|
||||
/** Single Character Introducer */
|
||||
export const SCI = '\x9a';
|
||||
/** Control Sequence Introducer */
|
||||
export const CSI = '\x9b';
|
||||
/** String Terminator */
|
||||
export const ST = '\x9c';
|
||||
/** Operating System Command */
|
||||
export const OSC = '\x9d';
|
||||
/** Privacy Message */
|
||||
export const PM = '\x9e';
|
||||
/** Application Program Command */
|
||||
export const APC = '\x9f';
|
||||
}
|
||||
|
||||
+73
-12
@@ -5,7 +5,7 @@
|
||||
*/
|
||||
|
||||
import { CharData, IInputHandler } from './Types';
|
||||
import { C0 } from './EscapeSequences';
|
||||
import { C0, C1 } from './EscapeSequences';
|
||||
import { CHARSETS, DEFAULT_CHARSET } from './Charsets';
|
||||
import { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX } from './Buffer';
|
||||
import { FLAGS } from './renderer/Types';
|
||||
@@ -108,6 +108,11 @@ export class InputHandler implements IInputHandler {
|
||||
// FIXME: What do to with missing? Old code just added those to print, but that's wrong
|
||||
// behavior for most control codes.
|
||||
|
||||
// some C1 control codes - should those be enabled by default?
|
||||
this._parser.setExecuteHandler(C1.IND, () => this.index());
|
||||
this._parser.setExecuteHandler(C1.NEL, () => this.nextLine());
|
||||
this._parser.setExecuteHandler(C1.HTS, () => this.tabSet());
|
||||
|
||||
/**
|
||||
* OSC handler
|
||||
*/
|
||||
@@ -154,18 +159,18 @@ export class InputHandler implements IInputHandler {
|
||||
*/
|
||||
this._parser.setEscHandler('', '7', () => this.saveCursor([]));
|
||||
this._parser.setEscHandler('', '8', () => this.restoreCursor([]));
|
||||
this._parser.setEscHandler('', 'D', () => this._terminal.index()); // FIXME: move?
|
||||
this._parser.setEscHandler('', 'D', () => this.index());
|
||||
this._parser.setEscHandler('', 'E', () => this.nextLine());
|
||||
this._parser.setEscHandler('', 'H', () => this._terminal.tabSet()); // FIXME: move?
|
||||
this._parser.setEscHandler('', 'M', () => this._terminal.reverseIndex()); // FIXME: move?
|
||||
this._parser.setEscHandler('', 'H', () => this.tabSet());
|
||||
this._parser.setEscHandler('', 'M', () => this.reverseIndex());
|
||||
this._parser.setEscHandler('', '=', () => this.keypadApplicationMode());
|
||||
this._parser.setEscHandler('', '>', () => this.keypadNumericMode());
|
||||
this._parser.setEscHandler('', 'c', () => this._terminal.reset()); // FIXME: move?
|
||||
this._parser.setEscHandler('', 'n', () => this._terminal.setgLevel(2)); // FIXME: move?
|
||||
this._parser.setEscHandler('', 'o', () => this._terminal.setgLevel(3)); // FIXME: move?
|
||||
this._parser.setEscHandler('', '|', () => this._terminal.setgLevel(3)); // FIXME: move?
|
||||
this._parser.setEscHandler('', '}', () => this._terminal.setgLevel(2)); // FIXME: move?
|
||||
this._parser.setEscHandler('', '~', () => this._terminal.setgLevel(1)); // FIXME: move?
|
||||
this._parser.setEscHandler('', 'c', () => this.reset());
|
||||
this._parser.setEscHandler('', 'n', () => this.setgLevel(2));
|
||||
this._parser.setEscHandler('', 'o', () => this.setgLevel(3));
|
||||
this._parser.setEscHandler('', '|', () => this.setgLevel(3));
|
||||
this._parser.setEscHandler('', '}', () => this.setgLevel(2));
|
||||
this._parser.setEscHandler('', '~', () => this.setgLevel(1));
|
||||
this._parser.setEscHandler('%', '@', () => this.selectDefaultCharset());
|
||||
this._parser.setEscHandler('%', 'G', () => this.selectDefaultCharset());
|
||||
for (let flag in CHARSETS) {
|
||||
@@ -175,7 +180,7 @@ export class InputHandler implements IInputHandler {
|
||||
this._parser.setEscHandler('+', flag, () => this.selectCharset('+' + flag));
|
||||
this._parser.setEscHandler('-', flag, () => this.selectCharset('-' + flag));
|
||||
this._parser.setEscHandler('.', flag, () => this.selectCharset('.' + flag));
|
||||
this._parser.setEscHandler('/', flag, () => this.selectCharset('/' + flag)); // FIXME
|
||||
this._parser.setEscHandler('/', flag, () => this.selectCharset('/' + flag)); // FIXME: supported?
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1727,12 +1732,13 @@ export class InputHandler implements IInputHandler {
|
||||
|
||||
/**
|
||||
* ESC E
|
||||
* C1.NEL
|
||||
* DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL)
|
||||
* Moves cursor to first position on next line.
|
||||
*/
|
||||
public nextLine(): void {
|
||||
this._terminal.buffer.x = 0;
|
||||
this._terminal.index();
|
||||
this.index();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1793,4 +1799,59 @@ export class InputHandler implements IInputHandler {
|
||||
if (collectAndFlag[0] === '/') return; // FIXME: Is this supported?
|
||||
this._terminal.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] || DEFAULT_CHARSET);
|
||||
}
|
||||
|
||||
/**
|
||||
* ESC D
|
||||
* C1.IND
|
||||
* DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html)
|
||||
* Moves the cursor down one line in the same column.
|
||||
*/
|
||||
public index(): void {
|
||||
this._terminal.index(); // FIXME: save to move the implementation from terminal?
|
||||
}
|
||||
|
||||
/**
|
||||
* ESC H
|
||||
* C1.HTS
|
||||
* DEC mnemonic: HTS (https://vt100.net/docs/vt510-rm/HTS.html)
|
||||
* 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 {
|
||||
this._terminal.tabSet(); // FIXME: save to move the implementation from terminal?
|
||||
}
|
||||
|
||||
/**
|
||||
* ESC M
|
||||
* C1.RI
|
||||
* DEC mnemonic: HTS
|
||||
* 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 {
|
||||
this._terminal.reverseIndex(); // FIXME: save to move the implementation from terminal?
|
||||
}
|
||||
|
||||
/**
|
||||
* ESC c
|
||||
* DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html)
|
||||
* Reset to initial state.
|
||||
*/
|
||||
public reset(): void {
|
||||
this._terminal.reset(); // FIXME: save to move the implementation from terminal?
|
||||
}
|
||||
|
||||
/**
|
||||
* ESC n
|
||||
* ESC o
|
||||
* ESC |
|
||||
* ESC }
|
||||
* ESC ~
|
||||
* DEC mnemonic: LS (https://vt100.net/docs/vt510-rm/LS.html)
|
||||
* 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 {
|
||||
this._terminal.setgLevel(level); // FIXME: save to move the implementation from terminal?
|
||||
}
|
||||
}
|
||||
|
||||
+15
-6
@@ -163,12 +163,21 @@ export interface IInputHandler {
|
||||
/** ESC % G
|
||||
ESC % @ */ selectDefaultCharset(): void;
|
||||
/** ESC ( C
|
||||
* ESC ) C
|
||||
* ESC * C
|
||||
* ESC + C
|
||||
* ESC - C
|
||||
* ESC . C
|
||||
* ESC / C */ selectCharset(collectAndFlag: string): void;
|
||||
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 n
|
||||
ESC o
|
||||
ESC |
|
||||
ESC }
|
||||
ESC ~ */ setgLevel(level: number): void;
|
||||
}
|
||||
|
||||
export interface ILinkMatcher {
|
||||
|
||||
Reference in New Issue
Block a user