single arg for DCS and ESC handler registration

This commit is contained in:
Jörg Breitbart
2018-05-01 21:07:13 +02:00
parent 89cf45c514
commit 9a32852e61
3 changed files with 36 additions and 38 deletions
+9 -11
View File
@@ -278,11 +278,11 @@ export class EscapeSequenceParser implements IEscapeSequenceParser {
this._csiHandlerFb = callback;
}
setEscHandler(collect: string, flag: string, callback: (collect: string, flag: number) => void): void {
this._escHandlers[collect + flag] = callback;
setEscHandler(collectAndFlag: string, callback: () => void): void {
this._escHandlers[collectAndFlag] = callback;
}
clearEscHandler(collect: string, flag: string): void {
if (this._escHandlers[collect + flag]) delete this._escHandlers[collect + flag];
clearEscHandler(collectAndFlag: string): void {
if (this._escHandlers[collectAndFlag]) delete this._escHandlers[collectAndFlag];
}
setEscHandlerFallback(callback: (...params: any[]) => void): void {
this._escHandlerFb = callback;
@@ -298,11 +298,11 @@ export class EscapeSequenceParser implements IEscapeSequenceParser {
this._oscHandlerFb = callback;
}
setDcsHandler(collect: string, flag: string, handler: IDcsHandler): void {
this._dcsHandlers[collect + flag] = handler;
setDcsHandler(collectAndFlag: string, handler: IDcsHandler): void {
this._dcsHandlers[collectAndFlag] = handler;
}
clearDcsHandler(collect: string, flag: string): void {
if (this._dcsHandlers[collect + flag]) delete this._dcsHandlers[collect + flag];
clearDcsHandler(collectAndFlag: string): void {
if (this._dcsHandlers[collectAndFlag]) delete this._dcsHandlers[collectAndFlag];
}
setDcsHandlerFallback(handler: IDcsHandler): void {
this._dcsHandlerFb = handler;
@@ -336,7 +336,6 @@ export class EscapeSequenceParser implements IEscapeSequenceParser {
let params = this.params;
const table: Uint8Array | number[] = this.transitions.table;
let dcsHandler: IDcsHandler | null = this._activeDcsHandler;
let ident: string = ''; // ugly workaround for ESC and DCS lookup keys
let callback: Function | null = null;
// process input string
@@ -459,8 +458,7 @@ export class EscapeSequenceParser implements IEscapeSequenceParser {
dcs = -1;
break;
case ParserAction.DCS_HOOK:
ident = collect + String.fromCharCode(code);
dcsHandler = this._dcsHandlers[ident];
dcsHandler = this._dcsHandlers[collect + String.fromCharCode(code)];
if (!dcsHandler) dcsHandler = this._dcsHandlerFb;
dcsHandler.hook(collect, params, code);
break;
+23 -23
View File
@@ -158,30 +158,30 @@ export class InputHandler implements IInputHandler {
/**
* ESC handlers
*/
this._parser.setEscHandler('', '7', () => this.saveCursor([]));
this._parser.setEscHandler('', '8', () => this.restoreCursor([]));
this._parser.setEscHandler('', 'D', () => this.index());
this._parser.setEscHandler('', 'E', () => this.nextLine());
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.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());
this._parser.setEscHandler('7', () => this.saveCursor([]));
this._parser.setEscHandler('8', () => this.restoreCursor([]));
this._parser.setEscHandler('D', () => this.index());
this._parser.setEscHandler('E', () => this.nextLine());
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.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) {
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));
this._parser.setEscHandler('-', flag, () => this.selectCharset('-' + flag));
this._parser.setEscHandler('.', flag, () => this.selectCharset('.' + flag));
this._parser.setEscHandler('/', flag, () => this.selectCharset('/' + flag)); // FIXME: supported?
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));
this._parser.setEscHandler('-' + flag, () => this.selectCharset('-' + flag));
this._parser.setEscHandler('.' + flag, () => this.selectCharset('.' + flag));
this._parser.setEscHandler('/' + flag, () => this.selectCharset('/' + flag)); // FIXME: supported?
}
/**
+4 -4
View File
@@ -479,16 +479,16 @@ export interface IEscapeSequenceParser {
clearCsiHandler(flag: string): void;
setCsiHandlerFallback(callback: (...params: any[]) => void): void;
setEscHandler(collect: string, flag: string, callback: (collect: string, flag: number) => void): void;
clearEscHandler(collect: string, flag: string): void;
setEscHandler(collectAndFlag: string, callback: () => void): void;
clearEscHandler(collectAndFlag: string): void;
setEscHandlerFallback(callback: (...params: any[]) => void): void;
setOscHandler(ident: number, callback: (data: string) => void): void;
clearOscHandler(ident: number): void;
setOscHandlerFallback(callback: (...params: any[]) => void): void;
setDcsHandler(collect: string, flag: string, handler: IDcsHandler): void;
clearDcsHandler(collect: string, flag: string): void;
setDcsHandler(collectAndFlag: string, handler: IDcsHandler): void;
clearDcsHandler(collectAndFlag: string): void;
setDcsHandlerFallback(handler: IDcsHandler): void;
setErrorHandler(callback: (state: IParsingState) => IParsingState): void;