diff options
author | Christian Persch <chpe@src.gnome.org> | 2021-01-31 23:10:29 +0100 |
---|---|---|
committer | Christian Persch <chpe@src.gnome.org> | 2021-01-31 23:10:29 +0100 |
commit | 38d9339917dbd2f84a57ff1cc2b28deaed3c86e7 (patch) | |
tree | 66258c8ca004c0139419dc8e71e2f164b94e509d | |
parent | eeb80ac1403546034478ce80d6f53cb9c43a735b (diff) | |
download | vte-38d9339917dbd2f84a57ff1cc2b28deaed3c86e7.tar.gz |
parser: modes: Generate modes-*.hh from script and data
-rw-r--r-- | src/meson.build | 16 | ||||
-rw-r--r-- | src/modes-ecma.hh | 218 | ||||
-rw-r--r-- | src/modes-private.hh | 881 | ||||
-rw-r--r-- | src/modes.hh | 10 | ||||
-rwxr-xr-x | src/modes.py | 1335 |
5 files changed, 1354 insertions, 1106 deletions
diff --git a/src/meson.build b/src/meson.build index 5ba67e35..bfbeebb2 100644 --- a/src/meson.build +++ b/src/meson.build @@ -50,11 +50,23 @@ libc_glue_sources = files( ) modes_sources = files( - 'modes-ecma.hh', - 'modes-private.hh', 'modes.hh', ) +modes_sources += custom_target( + 'modes', + command: [ + files('modes.py'), + '--destdir', '@OUTDIR@', + ], + input: [], + install: false, + output: [ + 'modes-dec.hh', + 'modes-ecma.hh', + ], +) + pango_glue_sources = files( 'pango-glue.hh', ) diff --git a/src/modes-ecma.hh b/src/modes-ecma.hh deleted file mode 100644 index b4f22abe..00000000 --- a/src/modes-ecma.hh +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright © 2018 Christian Persch - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <https://www.gnu.org/licenses/>. - */ - -#if !defined(MODE) || !defined(MODE_FIXED) -#error "Must define MODE and MODE_FIXED before including this file" -#endif - -/* - * Modes for SM_ECMA/RM_ECMA. - * - * Most of these are not implemented in VTE. - * - * References: ECMA-48 § 7 - * WY370 - */ - -/* - * IRM - insertion replacement mode - * - * Default: reset - * - * References: ECMA-48 § 7.2.10 - * VT525 - */ -MODE(IRM, 4) - -/* - * BDSM - Bi-Directional Support Mode - * - * Reset state is explicit mode, set state is implicit mode - * - * References: ECMA-48 - * ECMA TR/53 - * Terminal-wg/bidi - * - * Default in ECMA: reset - * Default in Terminal-wg/bidi and VTE: set - */ -MODE(BDSM, 8) - -/* Unsupported */ - -MODE_FIXED(GATM, 1, ALWAYS_RESET) -MODE_FIXED(KAM, 2, ALWAYS_RESET) -MODE_FIXED(CRM, 3, ALWAYS_RESET) -MODE_FIXED(SRTM, 5, ALWAYS_RESET) -MODE_FIXED(ERM, 6, ALWAYS_RESET) -MODE_FIXED(VEM, 7, ALWAYS_RESET) -/* DCSM defaults to RESET in ECMA, forced to SET in Terminal-wg/bidi */ -MODE_FIXED(DCSM, 9, ALWAYS_SET) -MODE_FIXED(HEM, 10, ALWAYS_RESET) -MODE_FIXED(PUM, 11, ALWAYS_RESET) /* ECMA-48 § F.4.1 Deprecated */ - -/* - * SRM - local echo send/receive mode - * If reset, characters entered by the keyboard are shown on the - * screen as well as being sent to the host; if set, the - * keyboard input is only sent to the host. - * - * Default: set - * - * References: ECMA-48 § 7.2.15 - * VT525 - * - * Removed in VTE 0.60: issue #69 - */ -MODE_FIXED(SRM, 12, ALWAYS_SET) - -MODE_FIXED(FEAM, 13, ALWAYS_RESET) -MODE_FIXED(FETM, 14, ALWAYS_RESET) -MODE_FIXED(MATM, 15, ALWAYS_RESET) -MODE_FIXED(TTM, 16, ALWAYS_RESET) -MODE_FIXED(SATM, 17, ALWAYS_RESET) -MODE_FIXED(TSM, 18, ALWAYS_RESET) -MODE_FIXED(EBM, 19, ALWAYS_RESET) /* ECMA-48 § F.5.1 Removed */ - -/* - * LNM - line feed/newline mode - * If set, the cursor moves to the first column on LF, FF, VT, - * and a Return key press sends CRLF. - * If reset, the cursor column is unchanged by LF, FF, VT, - * and a Return key press sends CR only. - * - * Default: reset - * - * References: ECMA-48 § F.5.2 Removed! - * VT525 - */ -MODE_FIXED(LNM, 20, ALWAYS_RESET) - -MODE_FIXED(GRCM, 21, ALWAYS_SET) -MODE_FIXED(ZDM, 22, ALWAYS_RESET) /* ECMA-48 § F.4.2 Deprecated */ - -/* - * WYDSCM - display disable mode - * If set, blanks the screen; if reset, shows the data. - * - * Default: reset - * - * References: WY370 - */ -MODE_FIXED(WYDSCM, 30, ALWAYS_RESET) - -/* - * WHYSTLINM - status line display mode - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYSTLINM, 31, ALWAYS_RESET) - -/* - * WYCRTSAVM - screen saver mode - * Like DECCRTSM. - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYCRTSAVM, 32, ALWAYS_RESET) - -/* - * WYSTCURM - steady cursor mode - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYSTCURM, 33, ALWAYS_RESET) - -/* - * WYULCURM - underline cursor mode - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYULCURM, 34, ALWAYS_RESET) - -/* - * WYCLRM - width change clear disable mode - * If set, the screen is not cleared when the column mode changes - * by DECCOLM or WY161. - * Note that this does not affect DECSCPP. - * This is the same as DECNCSM mode. - * - * Default: set (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYCLRM, 35, ALWAYS_SET) - -/* - * WYDELKM - delete key definition - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYDELKM, 36, ALWAYS_RESET) /* Same as DECBKM */ - -/* - * WYGATM - send characters mode - * If set, sends all characters; if reset, only erasable characters. - * Like GATM above. - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYGATM, 37, ALWAYS_RESET) - -/* - * WYTEXM - send full screen/scrolling region to printer - * Like DECPEX mode. - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYTEXM, 38, ALWAYS_RESET) - -/* - * WYEXTDM - extra data line - * If set, the last line of the screen is used as data line and not - * a status line; if reset, the last line of the screen is used - * as a status line. - * - * Default: reset - * - * References: WY370 - */ -MODE_FIXED(WYEXTDM, 40, ALWAYS_SET) - -/* - * WYASCII - WY350 personality mode - * If set, switches to WY350 personality. - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYASCII, 42, ALWAYS_SET) diff --git a/src/modes-private.hh b/src/modes-private.hh deleted file mode 100644 index d8cdae8c..00000000 --- a/src/modes-private.hh +++ /dev/null @@ -1,881 +0,0 @@ -/* - * Copyright © 2018 Christian Persch - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <https://www.gnu.org/licenses/>. - */ - -#if !defined(MODE) || !defined(MODE_FIXED) -#error "Must define MODE and MODE_FIXED before including this file" -#endif - -/* - * Modes for SM_DEC/RM_DEC. - * - * Most of these are not implemented in VTE. - * - * References: VT525 - * XTERM - * KITTY - * MINTTY - * MLTERM - * RLogin - * URXVT - * WY370 - */ - -/* Supported modes: */ - -/* DEC */ - -/* - * DECCKM - cursor keys mode - * - * Controls whether the cursor keys send cursor sequences, or application - * sequences. - * - * Default: reset - * - * References: VT525 - */ -MODE(DEC_APPLICATION_CURSOR_KEYS, 1) - -/* - * DECCOLM: 132 column mode - * - * Sets page width to 132 (set) or 80 (reset) columns. - * - * Changing this mode resets the top, bottom, left, right margins; - * clears the screen (unless DECNCSM is set); resets DECLRMM; and clears - * the status line if host-writable. - * - * Default: reset - * - * References: VT525 - */ -MODE(DEC_132_COLUMN, 3) - -/* - * DECSCNM - screen mode - * If set, displays reverse; if reset, normal. - * - * Default: reset - * - * References: VT525 - */ -MODE(DEC_REVERSE_IMAGE, 5) - -/* - * DECOM - origin mode - * If set, the cursor is restricted to within the page margins. - * - * On terminal reset, DECOM is reset. - * - * Default: reset - * - * References: VT525 - */ -MODE(DEC_ORIGIN, 6) - -/* - * DECAWM - auto wrap mode - * - * Controls whether text wraps to the next line when the - * cursor reaches the right margin. - * - * Default: reset - * - * References: VT525 - */ -MODE(DEC_AUTOWRAP, 7) - -/* - * DECTCEM - text cursor enable - * If set, the text cursor is visible; if reset, invisible. - * - * Default: set - * - * References: VT525 - */ -MODE(DEC_TEXT_CURSOR, 25) - -/* - * DECNKM - numeric/application keypad mode - * Controls whether the numeric keypad sends application (set) - * or keypad (reset) sequences. - * - * Default: reset - * - * References: VT525 - */ -MODE(DEC_APPLICATION_KEYPAD, 66) - -/* Terminal-wg */ - -/* - * Whether to swap the Left and Right arrow keys if the cursor - * stands over an RTL paragraph. - * - * Reference: Terminal-wg/bidi - */ -MODE(VTE_BIDI_SWAP_ARROW_KEYS, 1243) - -/* - * Whether box drawing characters in the U+2500..U+257F range - * are to be mirrored in RTL context. - * - * Reference: Terminal-wg/bidi - */ -MODE(VTE_BIDI_BOX_MIRROR, 2500) - -/* - * Whether BiDi paragraph direction is autodetected. - * - * Reference: Terminal-wg/bidi - */ -MODE(VTE_BIDI_AUTO, 2501) - -/* XTERM */ - -MODE(XTERM_MOUSE_X10, 9) -MODE(XTERM_DECCOLM, 40) -MODE(XTERM_ALTBUF, 47) -MODE(XTERM_MOUSE_VT220, 1000) -MODE(XTERM_MOUSE_VT220_HIGHLIGHT, 1001) -MODE(XTERM_MOUSE_BUTTON_EVENT, 1002) -MODE(XTERM_MOUSE_ANY_EVENT, 1003) -MODE(XTERM_FOCUS, 1004) -MODE(XTERM_MOUSE_EXT_SGR, 1006) -MODE(XTERM_ALTBUF_SCROLL, 1007) -MODE(XTERM_META_SENDS_ESCAPE, 1036) -MODE(XTERM_OPT_ALTBUF, 1047) -MODE(XTERM_SAVE_CURSOR, 1048) -MODE(XTERM_OPT_ALTBUF_SAVE_CURSOR, 1049) -MODE(XTERM_READLINE_BRACKETED_PASTE, 2004) - -/* - * XTERM_SIXEL_PRIVATE_COLOR_REGISTERS: - * When set, each SIXEL graphic uses newly initialised colour registers. - * When reset, changes to colour registers from one SIXEL image are - * saved and used for the next SIXEL graphic. - * - * Default: set - * - * References: XTERM - */ -MODE(XTERM_SIXEL_PRIVATE_COLOR_REGISTERS, 1070) - -/* Not supported modes: */ - -/* DEC */ - -/* - * DECANM - ansi-mode - * Resetting this puts the terminal into VT52 compatibility mode. - * Control sequences overlap with regular sequences so we have to - * detect them early before dispatching them. - * To return to ECMA-48 mode, use ESC < [1/11 3/12]. - * - * Default: set - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECANM, 2, ALWAYS_SET) - -/* - * DECSCLM - scrolling mode - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECSCLM, 4, ALWAYS_RESET) - -/* - * DECARM - autorepeat mode - * Controls whether keys auytomatically repeat while held pressed - * for more than 0.5s. - * Note that /some/ keys do not repeat regardless of this setting. - * - * Default: set - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECARM, 8, ALWAYS_SET) - -MODE_FIXED(DECLTM, 11, ALWAYS_RESET) -MODE_FIXED(DECEKEM, 16, ALWAYS_RESET) - -/* - * DECPFF - print FF mode - * Controls whether the terminal terminates a print command by - * sending a FF to the printer. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECCPFF, 18, ALWAYS_RESET) - -/* - * DECPEX - print extent mode - * If set, print page prints only the scrolling region; - * if reset, the complete page. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECPEX, 19, ALWAYS_RESET) - -/* - * DECLRM - RTL mode - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECRLM, 34, ALWAYS_RESET) - -/* - * DECHEBM - hebrew/north-american keyboard mapping mode - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECHEBM, 35, ALWAYS_RESET) - -/* - * DECHEM - hebrew encoding mode - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECHEM, 36, ALWAYS_RESET) - -/* - * DECNRCM - NRCS mode - * Operates in 7-bit (set) or 8-bit (reset) mode. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECNRCM, 42, ALWAYS_RESET) - -MODE_FIXED(DECGEPM, 43, ALWAYS_RESET) /* from VT330 */ -/* MODE_FIXED(DECGPCM, 44, ALWAYS_RESET) * from VT330, conflicts with XTERM_MARGIN_BELL */ -/* MODE_FIXED(DECGPCS, 45, ALWAYS_RESET) * from VT330, conflicts with XTERM_REVERSE_WRAP */ -/* MODE_FIXED(DECGPBM, 46, ALWAYS_RESET) * from VT330, conflicts with XTERM_LOGGING */ -/* MODE_FIXED(DECGRPM, 47, ALWAYS_RESET) * from VT330, conflicts with XTERM_ALTBUF */ -MODE_FIXED(DEC131TM, 53, ALWAYS_RESET) - -/* - * DECNAKB - greek/north-american keyboard mapping mode - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECNAKB, 57, ALWAYS_RESET) - -/* - * DECIPEM - enter/return to/from pro-printer emulation mode - * Switches the terminal to (set)/from (reset) the ibm pro - * printer protocol. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECIPEM, 58, ALWAYS_RESET) - -/* MODE_FIXED(DECKKDM, 59, ALWAYS_SET) * Kanji/Katakana Display Mode, from VT382-Kanji */ - -/* - * DECHCCM - horizontal cursor coupling mode - * Controls what happens when the cursor moves out of the left or - * right margins of the window. - * If set, the window pans to keep the cursor in view; if reset, - * the cursor disappears. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECHCCM, 60, ALWAYS_RESET) - -/* - * DECVCCM - vertical cursor coupling mode - * Controls what happens when the cursor moves out of the top or - * bottom of the window, When the height of the window is smaller - * than the page. - * If set, the window pans to keep the cursor in view; if reset, - * the cursor disappears. - * - * Default: set - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECVCCM, 61, ALWAYS_SET) - -/* - * DECPCCM - page cursor coupling mode - * - * Default: set - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECPCCM, 64, ALWAYS_SET) - -/* - * DECBKM - backarrow key mode - * WYDELKM - * - * If set, the Backspace key works as a backspace key - * sending the BS control; if reset, it works as a Delete - * key sending the DEL control. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECBKM, 67, ALWAYS_RESET) - -/* - * DECKBUM - typewriter/data rpocessing keys mode - * - * If set, the keyboard keys act as data processing keys; - * if reset, as typewriter keys. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECKBUM, 68, ALWAYS_RESET) - -/* - * DECLRMM - vertical split-screen mode - * Controls whether a DECSLRM is executed. - * On set, resets line attributes to single width and single height, - * and while set, the terminal ignores any changes to line attributes. - * - * Default: reset - * - * References: VT525 - * - * Needs to be implemented if DECSLRM is implemented, to resolve a - * conflict between DECSLRM and SCOSC. - */ -MODE_FIXED(DECLRMM, 69, ALWAYS_RESET) /* aka DECVSSM */ - -/* - * DECXRLM - transmit rate limit - * If set, limits the transmit rate; if reset, the rate is - * unlimited. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECXRLM, 73, ALWAYS_RESET) - -/* - * DECSDM - sixel display mode (scrolling) - * - * Default: set - * - * References: ? - */ -MODE(DECSDM, 80) /* Note: Conflicts with WY161 */ - -/* - * DECKPM - key position mode - * If set, the keyboard sends extended reports (DECEKBD) that include - * the key position and modifier state; if reset, it sends character codes. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECKPM, 81, ALWAYS_RESET) - -MODE_FIXED(DECTHAISCM, 90, ALWAYS_RESET) /* Thai Space Compensating Mode, from VT382-Thai */ - -/* - * DECNCSM - no clear screen on DECOLM - * If set, the screen is not cleared when the column mode changes - * by DECCOLM. - * Note that this does not affect DECSCPP. - * - * Default: set - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECNCSM, 95, ALWAYS_RESET) - -/* - * DECRLCM - RTL copy mode - * If set, copy/paste from RTL; if reset, from LTR. - * Only enabled when the keyboard language is set to hebrew. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECRLCM, 96, ALWAYS_RESET) - -/* - * DECCRTSM - CRT save mode - * When set, blanks the terminal after the inactivity timeout - * (set with DECCRTST). - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECRCRTSM, 97, ALWAYS_RESET) - -/* - * DECARSM - auto resize mode - * Sets whether changing page arrangements automatically - * changes the lines per screen. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECARSM, 98, ALWAYS_RESET) - -/* - * DECMCM - modem control mode - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECMCM, 99, ALWAYS_RESET) - -/* - * DECAAM - auto answerback mode - * - * Default: reset - * - * References: VT525 - */ -MODE_FIXED(DECAAM, 100, ALWAYS_RESET) - -/* - * DECCANSM - conceal answerback message mode - * - * Default: reset - * - * References: VT525 - * - * Unimplemented, since we don't support answerback at all. - */ -MODE_FIXED(DECANSM, 101, ALWAYS_RESET) - -/* - * DECNULM - null mode - * If set, pass NUL to the printer; if reset, discard NUL. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECNULM, 102, ALWAYS_RESET) - -/* - * DECHDPXM - half-duplex mode - * Whether to use half-duplex (set) or full-duplex (reset) mode. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECHDPXM, 103, ALWAYS_RESET) - -/* - * DECESKM - enable secondary keyboard language mode - * If set, use the secondary keyboard mapping (group 2); if reset, - * use the primary (group 1). - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECESKM, 104, ALWAYS_RESET) - -/* - * DECOSCNM - overscan mode - * (monochrome terminal only) - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECOSCNM, 106, ALWAYS_RESET) - -/* - * DECNUMLK - num lock mode - * - * Set the num lock state as if by acting the NumLock key. - * Set means NumLock on; reset means off. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECNUMLK, 108, ALWAYS_RESET) - -/* - * DECCAPSLK - caps lock mode - * - * Set the caps lock state as if by acting the CapsLock key. - * Set means CapsLock on; reset means off. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECCAPSLK, 109, ALWAYS_RESET) - -/* - * DECKLHIM - keyboard LED host indicator mode - * If set, the keyboard LEDs show the state from the host - * (see DECLL); if reset, the local state. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECKLHIM, 110, ALWAYS_RESET) - -/* - * DECFWM - framed window mode - * If set, session window frames are drawn with frame border and icon. - * - * Default: reset - * - * References: VT525 - * - * VTE does not support sessions. - */ -MODE_FIXED(DECFWM, 111, ALWAYS_RESET) - -/* - * DECRPL - review previous lines mode - * If set, allows to view the scrollback. - * - * Default: set (VTE) - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECRPL, 112, ALWAYS_SET) - -/* - * DECHWUM - host wake-up mode - * If set, the terminal exits CRT save and energy save mode - * when a character is received from the host. - * - * Default: ? - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECHWUM, 113, ALWAYS_RESET) - -/* - * DECTCUM - alternate text color underline mode - * - * If set, text with the undeerline attribute is underlined as - * well as being displayed in the alternate coolor (if - * specified); if reset, it is only displayed in the - * alternate color. - * - * Default: ? - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECATCUM, 114, ALWAYS_RESET) - -/* - * DECTCBM - alternate text color blink mode - * - * If set, text with the blink attribute blinks as well - * as being displayed in the alternate color (if - * specified); if reset, it is only displayed in the - * alternate color. - * - * Default: ? - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECATCBM, 115, ALWAYS_RESET) - -/* - * DECBBSM - bold and blink style mode - * - * If set, the bold or blink attributes affect both foreground - * and background color; if reset, those affect only the foreground - * color. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECBBSM, 116, ALWAYS_RESET) - -/* - * DECECM - erase color mode - * - * If set, erased text or new cells appearing on the screen by scrolling - * are assigned the screen background color; if reset, they are assigned - * the text background color. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECECM, 117, ALWAYS_RESET) - -/* DRCSTerm */ -/* Modes 8800…8804 */ - -/* KITTY */ - -MODE_FIXED(KITTY_STYLED_UNDERLINES, 2016, ALWAYS_SET) -MODE_FIXED(KITTY_EXTENDED_KEYBOARD, 2017, ALWAYS_RESET) - -/* MinTTY */ - -MODE_FIXED(MINTTY_REPORT_CJK_AMBIGUOUS_WIDTH, 7700, ALWAYS_RESET) -MODE_FIXED(MINTTY_REPORT_SCROLL_MARKER_IN_CURRENT_LINE, 7711, ALWAYS_RESET) -MODE_FIXED(MINTTY_APPLICATION_ESCAPE, 7727, ALWAYS_RESET) -MODE_FIXED(MINTTY_ESCAPE_SENDS_FS, 7728, ALWAYS_RESET) -MODE_FIXED(MINTTY_SIXEL_SCROLLING_END_POSITION, 7730, ALWAYS_RESET) -MODE_FIXED(MINTTY_SCROLLBAR, 7766, ALWAYS_RESET) -MODE_FIXED(MINTTY_REPORT_FONT_CHANGES, 7767, ALWAYS_RESET) -MODE_FIXED(MINTTY_SHORTCUT_OVERRIDE, 7783, ALWAYS_RESET) -MODE_FIXED(MINTTY_ALTBUF_MOUSEWHEEL_TO_CURSORKEYS, 7786, ALWAYS_RESET) -MODE_FIXED(MINTTY_MOUSEWHEEL_APPLICATION_KEYS, 7787, ALWAYS_RESET) -MODE_FIXED(MINTTY_BIDI_DISABLE_IN_CURRENT_LINE, 7796, ALWAYS_RESET) -MODE_FIXED(MINTTY_SIXEL_SCROLL_CURSOR_RIGHT, 8452, ALWAYS_RESET) -/* MinTTY also knows mode 77096 'BIDI disable", and 77000..77031 - * "Application control key" which are outside of the supported range - * for CSI parameters. - */ - -/* RLogin */ - -/* RLogin appears to use many modes - * [https://github.com/kmiya-culti/RLogin/blob/master/RLogin/TextRam.h#L131]: - * 1406..1415, 1420..1425, 1430..1434, 1436, 1452..1481, - * 8400..8406, 8416..8417, 8428..8429, 8435, 8437..8443, - * 8446..8458, - * and modes 7727, 7786, 8200 (home cursor on [ED 2]), - * 8800 (some weird Unicode plane 17 mapping?), 8840 (same as 8428). - * - * We're not going to implement them, but avoid these ranges - * when assigning new mode numbers. - * - * The following are the ones from RLogin that MLTerm knows about: - */ - -/* MODE_FIXED(RLOGIN_APPLICATION_ESCAPE, 7727, ALWAYS_RESET) */ -/* MODE_FIXED(RLOGIN_MOUSEWHEEL_TO_CURSORKEYS, 7786, ALWAYS_RESET) */ - -/* Ambiguous-width characters are wide (reset) or narrow (set) */ -MODE_FIXED(RLOGIN_AMBIGUOUS_WIDTH_CHARACTERS_NARROW, 8428, ALWAYS_RESET) - -/* MODE_FIXED(RLOGIN_CURSOR_TO_RIGHT_OF_SIXEL, 8452, ALWAYS_RESET) */ - -/* XTERM also knows this one */ -/* MODE_FIXED(RLOGIN_SIXEL_SCROLL_CURSOR_RIGHT, 8452, ALWAYS_RESET) */ - -/* RXVT */ - -MODE_FIXED(RXVT_TOOLBAR, 10, ALWAYS_RESET) -MODE_FIXED(RXVT_SCROLLBAR, 30, ALWAYS_RESET) -/* MODE_FIXED(RXVT_SHIFT_KEYS, 35, ALWAYS_RESET) ! Conflicts with DECHEBM */ -MODE_FIXED(RXVT_SCROLL_OUTPUT, 1010, ALWAYS_RESET) -MODE_FIXED(RXVT_SCROLL_KEYPRESS, 1011, ALWAYS_RESET) -MODE_FIXED(RXVT_MOUSE_EXT, 1015, ALWAYS_RESET) -/* Bold/blink uses normal (reset) or high intensity (set) colour */ -MODE_FIXED(RXVT_INTENSITY_STYLES, 1021, ALWAYS_SET) - -/* Wyse */ - -/* - * WYTEK - TEK 4010/4014 personality - * If set, switches to TEK 4010/4014 personality. - * - * Default: reset - * - * References: WY370 - */ -MODE_FIXED(WYTEK, 38, ALWAYS_RESET) - -/* - * WY161 - 161 column mode - * If set, switches the terminal to 161 columns; if reset, - * to 80 columns. - * - * Default: reset - * - * References: WY370 - */ -/* MODE_FIXED(WY161, 80, ALWAYS_RESET) ! Conflicts with DECSDM */ - -/* - * WY52 - 52 lines mode - * If set, switches the terminal to 52 lines; if reset, - * to 24 lines. - * - * Default: reset - * - * References: WY370 - */ -MODE_FIXED(WY52, 83, ALWAYS_RESET) - -/* - * WYENAT - enable separate attributes - * If set, SGR attributes may be set separately for eraseable - * and noneraseable characters. If reset, the same SGR attributes - * apply to both eraseable and noneraseable characters. - * - * - * Default: reset - * - * References: WY370 - */ -MODE_FIXED(WYENAT, 84, ALWAYS_RESET) - -/* - * WYREPL - replacement character color - * - * Default: reset - * - * References: WY370 - */ -MODE_FIXED(WYREPL, 85, ALWAYS_RESET) - -/* XTERM */ - -MODE_FIXED(XTERM_ATT610_BLINK, 12, ALWAYS_RESET) -MODE_FIXED(XTERM_CURSOR_BLINK, 13, ALWAYS_RESET) -MODE_FIXED(XTERM_CURSOR_BLINK_XOR, 14, ALWAYS_RESET) -MODE_FIXED(XTERM_CURSES_HACK, 41, ALWAYS_RESET) -MODE_FIXED(XTERM_MARGIN_BELL, 44, ALWAYS_RESET) -MODE_FIXED(XTERM_REVERSE_WRAP, 45, ALWAYS_RESET) -MODE_FIXED(XTERM_LOGGING, 46, ALWAYS_RESET) -MODE_FIXED(XTERM_MOUSE_EXT, 1005, ALWAYS_RESET) -MODE_FIXED(XTERM_8BIT_META, 1034, ALWAYS_RESET) -MODE_FIXED(XTERM_NUMLOCK, 1035, ALWAYS_RESET) -MODE_FIXED(XTERM_DELETE_IS_DEL, 1037, ALWAYS_RESET) -MODE_FIXED(XTERM_ALT_SENDS_ESCAPE, 1039, ALWAYS_RESET) -MODE_FIXED(XTERM_KEEP_SELECTION, 1040, ALWAYS_RESET) -MODE_FIXED(XTERM_KEEP_CLIPBOARD, 1044, ALWAYS_RESET) -MODE_FIXED(XTERM_SELECT_TO_CLIPBOARD, 1041, ALWAYS_RESET) -MODE_FIXED(XTERM_BELL_URGENT, 1042, ALWAYS_RESET) -MODE_FIXED(XTERM_PRESENT_ON_BELL, 1043, ALWAYS_RESET) -MODE_FIXED(XTERM_ALLOW_ALTBUF, 1046, ALWAYS_SET) -MODE_FIXED(XTERM_FKEYS_TERMCAP, 1050, ALWAYS_RESET) -MODE_FIXED(XTERM_FKEYS_SUN, 1051, ALWAYS_RESET) -MODE_FIXED(XTERM_FKEYS_HP, 1052, ALWAYS_RESET) -MODE_FIXED(XTERM_FKEYS_SCO, 1053, ALWAYS_RESET) -MODE_FIXED(XTERM_FKEYS_LEGACY, 1060, ALWAYS_RESET) -MODE_FIXED(XTERM_FKEYS_VT220, 1061, ALWAYS_RESET) -MODE_FIXED(XTERM_READLINE_BUTTON1_MOVE_POINT, 2001, ALWAYS_RESET) -MODE_FIXED(XTERM_READLINE_BUTTON2_MOVE_POINT, 2002, ALWAYS_RESET) -MODE_FIXED(XTERM_READLINE_DBLBUTTON3_DELETE, 2003, ALWAYS_RESET) -MODE_FIXED(XTERM_READLINE_PASTE_QUOTE, 2005, ALWAYS_RESET) -MODE_FIXED(XTERM_READLINE_PASTE_LITERAL_NL, 2006, ALWAYS_RESET) - -/* Contour */ - -MODE_FIXED(CONTOUR_BATCHED_RENDERING, 2026, ALWAYS_RESET) diff --git a/src/modes.hh b/src/modes.hh index 3688c19b..76bb5100 100644 --- a/src/modes.hh +++ b/src/modes.hh @@ -189,12 +189,12 @@ public: #define MODE(name,param) e##name, #define MODE_FIXED(name,param,value) -#include "modes-private.hh" +#include "modes-dec.hh" #undef MODE #undef MODE_FIXED #define MODE(name,param) #define MODE_FIXED(name,param,value) e##name, -#include "modes-private.hh" +#include "modes-dec.hh" #undef MODE #undef MODE_FIXED }; @@ -204,7 +204,7 @@ public: switch (param) { #define MODE(name,param) case param: return e##name; #define MODE_FIXED(name,param,value) case param: return e##value; -#include "modes-private.hh" +#include "modes-dec.hh" #undef MODE #undef MODE_FIXED default: @@ -220,7 +220,7 @@ public: case eALWAYS_RESET: return "ALWAYS_RESET"; #define MODE(name,param) case e##name: return #name; #define MODE_FIXED(name,param,value) -#include "modes-private.hh" +#include "modes-dec.hh" #undef MODE #undef MODE_FIXED default: @@ -230,7 +230,7 @@ public: #define MODE(name,param) MODE_ACCESSOR(name) #define MODE_FIXED(name,param,value) MODE_FIXED_ACCESSOR(name, e##value == eALWAYS_SET) -#include "modes-private.hh" +#include "modes-dec.hh" #undef MODE #undef MODE_FIXED diff --git a/src/modes.py b/src/modes.py new file mode 100755 index 00000000..9c308875 --- /dev/null +++ b/src/modes.py @@ -0,0 +1,1335 @@ +#!/usr/bin/env python3 +# +# Copyright © 2018, 2020 Christian Persch +# +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library. If not, see <https://www.gnu.org/licenses/>. + + +import argparse +import enum +import inspect +import pathlib +import sys +import typing + +from dataclasses import dataclass, field + +# Types + +class Type(enum.IntEnum): + ECMA = enum.auto() # CSI n [h|l] + WHAT = enum.auto() # CSI ? n [h|l] + GT = enum.auto() # CSI > n [h|l] + +class Flags(enum.Flag): + NONE = 0 + WRITABLE = enum.auto() + +class Source(enum.Enum): + CONTOUR = enum.auto() + DEC = enum.auto(), + DRCSTERM = enum.auto(), + ECMA48 = enum.auto() # eq ISO 6429 + HP = enum.auto() + KITTY = enum.auto() + ITERM2 = enum.auto() + RLOGIN = enum.auto() + SCO = enum.auto() + VTE = enum.auto() + WYSE = enum.auto() + XDG = enum.auto() + XTERM = enum.auto() + + @classmethod + def from_name(cls, name): + if name.startswith('CONTOUR'): + return cls.CONTOUR + elif name.startswith('DEC') or name.endswith('_DEC'): + return cls.DEC + elif name.startswith('DRCS'): + return cls.DRCSTERM + elif name.endswith('_ECMA'): + return cls.ECMA35 + elif name.startswith('HP') or name.endswith('_HP'): + return cls.HP + elif name.startswith('KITTY'): + return cls.KITTY + elif name.startswith('ITERM'): + return cls.ITERM2 + elif name.startswith('RLOGIN'): + return cls.RLOGIN + elif name.startswith('SCO'): + return cls.SCO + elif name.startswith('VTE'): + return cls.VTE + elif name.startswith('WY'): + return cls.WYSE + elif name.startswith('XDG'): + return cls.XDG + elif name.startswith('XTERM'): + return cls.XTERM + else: + return cls.ECMA48 + #raise ValueError(f'Could not determine source for mode {name}') + +# Control Sequence + +@dataclass(eq=True, order=True) +class NamedMode: + ''' A named mode ''' + mtype: Type + number: int + name: str + default: bool + flags: Flags=Flags.NONE + source: typing.Optional[Source]=None + alias: typing.Optional[typing.List[str]]=None + comment: str=None + sloc_file: str=None + sloc_line: int=-1 + + def __post_init__(self): + + if self.source is None: + self.source = Source.from_name(self.name) + + if self.sloc_file is None or self.sloc_line == -1: + fname = f'mode_{self.mtype.name}' + stack = inspect.stack() + depth = -1 + for _frame in stack: + depth += 1 + if _frame.function == fname: + depth += 1 + break + + if depth == -1 or depth >= len(stack): + raise ValueError('{self.name} source location not found') + else: + frame = stack[depth] + self.sloc_file = frame.filename + self.sloc_line = frame.lineno + + del stack + + +def mode_ECMA(name, number, **kwargs): + return NamedMode(mtype=Type.ECMA, + name=name, + number=number, + **kwargs) + +def mode_WHAT(name, number, **kwargs): + return NamedMode(mtype=Type.WHAT, + name=name, + number=number, + **kwargs) + +def mode_GT(name, number, **kwargs): + return NamedMode(mtype=Type.GT, + name=name, + number=number, + **kwargs) + +# All known modes, ordered by type, source, and number + +modes = [ + + # Modes for SM_ECMA/RM_ECMA (CSI n [h|l]) + # + # Most of these are not implemented in VTE. + # + # References: ECMA-48 § 7 + # WY370 + + mode_ECMA('GATM', 1, default=False), + mode_ECMA('KAM', 2, default=False), + mode_ECMA('CRM', 3, default=False), + + # IRM - insertion replacement mode + # + # Default: reset + # + # References: ECMA-48 § 7.2.10 + # VT525 + # + mode_ECMA('IRM', 4, default=False, flags=Flags.WRITABLE), + + mode_ECMA('SRTM', 5, default=False), + mode_ECMA('ERM', 6, default=False), + mode_ECMA('VEM', 7, default=False), + + # BDSM - Bi-Directional Support Mode + # + # Reset state is explicit mode, set state is implicit mode + # + # References: ECMA-48 + # ECMA TR/53 + # Terminal-wg/bidi + # + # Default in ECMA: reset + # Default in Terminal-wg/bidi and VTE: set + # + mode_ECMA('BDSM', 8, default=True, flags=Flags.WRITABLE), + + # DCSM defaults to RESET in ECMA, forced to SET in Terminal-wg/bidi# + mode_ECMA('DCSM', 9, default=True), + + mode_ECMA('HEM', 10, default=False), + + # ECMA-48 § F.4.1 Deprecated + mode_ECMA('PUM', 11, default=False), + + # SRM - local echo send/receive mode + # If reset, characters entered by the keyboard are shown on the + # screen as well as being sent to the host; if set, the + # keyboard input is only sent to the host. + # + # Default: set + # + # References: ECMA-48 § 7.2.15 + # VT525 + # + # Removed in VTE 0.60: issue #69 + # + mode_ECMA('SRM', 12, default=True), + + mode_ECMA('FEAM', 13, default=False), + mode_ECMA('FETM', 14, default=False), + mode_ECMA('MATM', 15, default=False), + mode_ECMA('TTM', 16, default=False), + mode_ECMA('SATM', 17, default=False), + mode_ECMA('TSM', 18, default=False), + + # ECMA-48 § F.5.1 Removed + mode_ECMA('EBM', 19, default=False), + + # LNM - line feed/newline mode + # If set, the cursor moves to the first column on LF, FF, VT, + # and a Return key press sends CRLF. + # If reset, the cursor column is unchanged by LF, FF, VT, + # and a Return key press sends CR only. + # + # Default: reset + # + # References: ECMA-48 § F.5.2 Removed! + # VT525 + # + mode_ECMA('LNM', 20, default=False), + + mode_ECMA('GRCM', 21, default=True), + + # ECMA-48 § F.4.2 Deprecated + mode_ECMA('ZDM', 22, default=False), + + # WYDSCM - display disable mode + # If set, blanks the screen; if reset, shows the data. + # + # Default: reset + # + # References: WY370 + # + mode_ECMA('WYDSCM', 30, default=False), + + # WHYSTLINM - status line display mode + # + # Default: reset (set-up) + # + # References: WY370 + # + mode_ECMA('WYSTLINM', 31, default=False), + + # WYCRTSAVM - screen saver mode + # Like DECCRTSM. + # + # Default: reset (set-up) + # + # References: WY370 + # + mode_ECMA('WYCRTSAVM', 32, default=False), + + # WYSTCURM - steady cursor mode + # + # Default: reset (set-up) + # + # References: WY370 + # + mode_ECMA('WYSTCURM', 33, default=False), + + # WYULCURM - underline cursor mode + # + # Default: reset (set-up) + # + # References: WY370 + # + mode_ECMA('WYULCURM', 34, default=False), + + # WYCLRM - width change clear disable mode + # If set, the screen is not cleared when the column mode changes + # by DECCOLM or WY161. + # Note that this does not affect DECSCPP. + # This is the same as DECNCSM mode. + # + # Default: set (set-up) + # + # References: WY370 + # + mode_ECMA('WYCLRM', 35, default=True), + + # WYDELKM - delete key definition + # + # Default: reset (set-up) + # + # References: WY370 + # + # Note: Same as DECBKM + mode_ECMA('WYDELKM', 36, default=False), + + # WYGATM - send characters mode + # If set, sends all characters; if reset, only erasable characters. + # Like GATM above. + # + # Default: reset (set-up) + # + # References: WY370 + # + mode_ECMA('WYGATM', 37, default=False), + + # WYTEXM - send full screen/scrolling region to printer + # Like DECPEX mode. + # + # Default: reset (set-up) + # + # References: WY370 + # + mode_ECMA('WYTEXM', 38, default=False), + + # WYEXTDM - extra data line + # If set, the last line of the screen is used as data line and not + # a status line; if reset, the last line of the screen is used + # as a status line. + # + # Default: reset + # + # References: WY370 + # + mode_ECMA('WYEXTDM', 40, default=True), + + # WYASCII - WY350 personality mode + # If set, switches to WY350 personality. + # + # Default: reset (set-up) + # + # References: WY370 + # + mode_ECMA('WYASCII', 42, default=True), + + # ************************************************************************ + + # Modes for SM_DEC/RM_DEC (CSI ? n [h|l]) + # + # Most of these are not implemented in VTE. + # + # References: VT525 + # XTERM + # KITTY + # MINTTY + # MLTERM + # RLogin + # URXVT + # WY370 + # + + # DEC: + + # DECCKM - cursor keys mode + # + # Controls whether the cursor keys send cursor sequences, or application + # sequences. + # + # Default: reset + # + # References: VT525 + # + mode_WHAT('DEC_APPLICATION_CURSOR_KEYS', 1, default=False, flags=Flags.WRITABLE), + + # DECCOLM: 132 column mode + # + # Sets page width to 132 (set) or 80 (reset) columns. + # + # Changing this mode resets the top, bottom, left, right margins; + # clears the screen (unless DECNCSM is set); resets DECLRMM; and clears + # the status line if host-writable. + # + # Default: reset + # + # References: VT525 + # + mode_WHAT('DEC_132_COLUMN', 3, default=False, flags=Flags.WRITABLE), + + # DECANM - ansi-mode + # Resetting this puts the terminal into VT52 compatibility mode. + # To return to ECMA-48 mode, use ESC < (1/11 3/12). + # + # Default: set + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECANM', 2, default=True), + + # DECSCLM - scrolling mode + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECSCLM', 4, default=False), + + # DECSCNM - screen mode + # If set, displays reverse; if reset, normal. + # + # Default: reset + # + # References: VT525 + # + mode_WHAT('DEC_REVERSE_IMAGE', 5, default=False, flags=Flags.WRITABLE), + + # DECOM - origin mode + # If set, the cursor is restricted to within the page margins. + # + # On terminal reset, DECOM is reset. + # + # Default: reset + # + # References: VT525 + # + mode_WHAT('DEC_ORIGIN', 6, default=False, flags=Flags.WRITABLE), + + # DECAWM - auto wrap mode + # + # Controls whether text wraps to the next line when the + # cursor reaches the right margin. + # + # Default: reset + # + # References: VT525 + # + mode_WHAT('DEC_AUTOWRAP', 7, default=False, flags=Flags.WRITABLE), + + # DECARM - autorepeat mode + # Controls whether keys auytomatically repeat while held pressed + # for more than 0.5s. + # Note that /some/ keys do not repeat regardless of this setting. + # + # Default: set + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECARM', 8, default=True), + + mode_WHAT('XTERM_MOUSE_X10', 9, default=False, flags=Flags.WRITABLE), + mode_WHAT('DECLTM', 11, default=False), + mode_WHAT('DECEKEM', 16, default=False), + + # DECPFF - print FF mode + # Controls whether the terminal terminates a print command by + # sending a FF to the printer. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECCPFF', 18, default=False), + + # DECPEX - print extent mode + # If set, print page prints only the scrolling region; + # if reset, the complete page. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECPEX', 19, default=False), + + # DECTCEM - text cursor enable + # If set, the text cursor is visible; if reset, invisible. + # + # Default: set + # + # References: VT525 + # + mode_WHAT('DEC_TEXT_CURSOR', 25, default=True, flags=Flags.WRITABLE), + + # DECLRM - RTL mode + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECRLM', 34, default=False), + + # DECHEBM - hebrew/north-american keyboard mapping mode + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECHEBM', 35, default=False), + + # DECHEM - hebrew encoding mode + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECHEM', 36, default=False), + + mode_WHAT('XTERM_DECCOLM', 40, default=False, flags=Flags.WRITABLE), + + # DECNRCM - NRCS mode + # Operates in 7-bit (set) or 8-bit (reset) mode. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECNRCM', 42, default=False), + + # DECGEPM - Graphics Expanded Print Mode + # + # Default: reset + # + # References: VT330 + # + mode_WHAT('DECGEPM', 43, default=False), + + # DECGPCM - Graphics Print Colour Mode + # + # Default: reset + # + # References: VT330 + # + # Note: Conflicts with XTERM_MARGIN_BELL + # + #mode_WHAT('DECGPCM', 44, default=False), + + # DECGCPS - Graphics Print Colour Syntax + # + # Default: reset + # + # References: VT330 + # + # Note: conflicts with XTERM_REVERSE_WRAP + # + #mode_WHAT('DECGPCS', 45, default=False), + + # DECGPBM - Graphics Print Background Mode + # + # Default: reset + # + # References: VT330 + # + # Note: conflicts with XTERM_LOGGING (which VTE does not implement) + # + #mode_WHAT('DECGPBM', 46, default=False), + + # DECGRPM - Graphics Rotated Print Mode + # + # Default: reset + # + # References: VT330 + # + # Note: conflicts with XTERM_ALTBUF + # + #mode_WHAT('DECGRPM', 47, default=False), + + mode_WHAT('XTERM_ALTBUF', 47, default=False, flags=Flags.WRITABLE), + + mode_WHAT('DEC131TM', 53, default=False), + + # DECNAKB - greek/north-american keyboard mapping mode + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECNAKB', 57, default=False), + + # DECIPEM - enter/return to/from pro-printer emulation mode + # Switches the terminal to (set)/from (reset) the ibm pro + # printer protocol. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECIPEM', 58, default=False), + + # Kanji/Katakana Display Mode, from VT382-Kanji + mode_WHAT('DECKKDM', 59, default=True), + + # DECHCCM - horizontal cursor coupling mode + # Controls what happens when the cursor moves out of the left or + # right margins of the window. + # If set, the window pans to keep the cursor in view; if reset, + # the cursor disappears. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECHCCM', 60, default=False), + + # DECVCCM - vertical cursor coupling mode + # Controls what happens when the cursor moves out of the top or + # bottom of the window, When the height of the window is smaller + # than the page. + # If set, the window pans to keep the cursor in view; if reset, + # the cursor disappears. + # + # Default: set + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECVCCM', 61, default=True), + + # DECPCCM - page cursor coupling mode + # + # Default: set + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECPCCM', 64, default=True), + + # DECNKM - numeric/application keypad mode + # Controls whether the numeric keypad sends application (set) + # or keypad (reset) sequences. + # + # Default: reset + # + # References: VT525 + # + mode_WHAT('DEC_APPLICATION_KEYPAD', 66, default=False, flags=Flags.WRITABLE), + + # DECBKM - backarrow key mode + # WYDELKM + # + # If set, the Backspace key works as a backspace key + # sending the BS control; if reset, it works as a Delete + # key sending the DEL control. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECBKM', 67, default=False, alias=['WYDELKM']), + + # DECKBUM - typewriter/data rpocessing keys mode + # + # If set, the keyboard keys act as data processing keys; + # if reset, as typewriter keys. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECKBUM', 68, default=False), + + # DECLRMM - vertical split-screen mode + # Controls whether a DECSLRM is executed. + # On set, resets line attributes to single width and single height, + # and while set, the terminal ignores any changes to line attributes. + # + # Default: reset + # + # References: VT525 + # + # Needs to be implemented if DECSLRM is implemented, to resolve a + # conflict between DECSLRM and SCOSC. + # + # aka DECVSSM + # + mode_WHAT('DECLRMM', 69, default=False), + + # DECXRLM - transmit rate limit + # If set, limits the transmit rate; if reset, the rate is + # unlimited. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECXRLM', 73, default=False), + + # DECSDM - sixel display mode (scrolling) + # + # Default: set + # + # References: ? + # + # Note: Conflicts with WY161 + # + mode_WHAT('DECSDM', 80, default=True, flags=Flags.WRITABLE), + + # DECKPM - key position mode + # If set, the keyboard sends extended reports (DECEKBD) that include + # the key position and modifier state; if reset, it sends character codes. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECKPM', 81, default=False), + + # Thai Space Compensating Mode, from VT382-Thai + mode_WHAT('DECTHAISCM', 90, default=False), + + # DECNCSM - no clear screen on DECOLM + # If set, the screen is not cleared when the column mode changes + # by DECCOLM. + # Note that this does not affect DECSCPP. + # + # Default: set + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECNCSM', 95, default=False), + + # DECRLCM - RTL copy mode + # If set, copy/paste from RTL; if reset, from LTR. + # Only enabled when the keyboard language is set to hebrew. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECRLCM', 96, default=False), + + # DECCRTSM - CRT save mode + # When set, blanks the terminal after the inactivity timeout + # (set with DECCRTST). + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECRCRTSM', 97, default=False), + + # DECARSM - auto resize mode + # Sets whether changing page arrangements automatically + # changes the lines per screen. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECARSM', 98, default=False), + + # DECMCM - modem control mode + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECMCM', 99, default=False), + + # DECAAM - auto answerback mode + # + # Default: reset + # + # References: VT525 + # + mode_WHAT('DECAAM', 100, default=False), + + # DECCANSM - conceal answerback message mode + # + # Default: reset + # + # References: VT525 + # + # Unimplemented, since we don't support answerback at all. + # + mode_WHAT('DECANSM', 101, default=False), + + # DECNULM - null mode + # If set, pass NUL to the printer; if reset, discard NUL. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECNULM', 102, default=False), + + # DECHDPXM - half-duplex mode + # Whether to use half-duplex (set) or full-duplex (reset) mode. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECHDPXM', 103, default=False), + + # DECESKM - enable secondary keyboard language mode + # If set, use the secondary keyboard mapping (group 2); if reset, + # use the primary (group 1). + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECESKM', 104, default=False), + + # DECOSCNM - overscan mode + # (monochrome terminal only) + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECOSCNM', 106, default=False), + + # DECNUMLK - num lock mode + # + # Set the num lock state as if by acting the NumLock key. + # Set means NumLock on; reset means off. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECNUMLK', 108, default=False), + + # DECCAPSLK - caps lock mode + # + # Set the caps lock state as if by acting the CapsLock key. + # Set means CapsLock on; reset means off. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECCAPSLK', 109, default=False), + + # DECKLHIM - keyboard LED host indicator mode + # If set, the keyboard LEDs show the state from the host + # (see DECLL); if reset, the local state. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECKLHIM', 110, default=False), + + # DECFWM - framed window mode + # If set, session window frames are drawn with frame border and icon. + # + # Default: reset + # + # References: VT525 + # + # VTE does not support sessions. + # + mode_WHAT('DECFWM', 111, default=False), + + # DECRPL - review previous lines mode + # If set, allows to view the scrollback. + # + # Default: set (VTE) + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECRPL', 112, default=True), + + # DECHWUM - host wake-up mode + # If set, the terminal exits CRT save and energy save mode + # when a character is received from the host. + # + # Default: ? + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECHWUM', 113, default=False), + + # DECTCUM - alternate text color underline mode + # + # If set, text with the undeerline attribute is underlined as + # well as being displayed in the alternate coolor (if + # specified); if reset, it is only displayed in the + # alternate color. + # + # Default: ? + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECATCUM', 114, default=False), + + # DECTCBM - alternate text color blink mode + # + # If set, text with the blink attribute blinks as well + # as being displayed in the alternate color (if + # specified); if reset, it is only displayed in the + # alternate color. + # + # Default: ? + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECATCBM', 115, default=False), + + # DECBBSM - bold and blink style mode + # + # If set, the bold or blink attributes affect both foreground + # and background color; if reset, those affect only the foreground + # color. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECBBSM', 116, default=False), + + # DECECM - erase color mode + # + # If set, erased text or new cells appearing on the screen by scrolling + # are assigned the screen background color; if reset, they are assigned + # the text background color. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECECM', 117, default=False), + + # Contour: + + mode_WHAT('CONTOUR_BATCHED_RENDERING', 2026, default=False), + + # DRCSTerm: + + # DRCSMM_V1 + # Whether to enable DRCSMMv1 unicode mapping + # + # Default: reset + # + # References: DRCSTerm + # + mode_WHAT('DRCSMM_V1', 8800, default=False), + + # KiTTY: + + mode_WHAT('KITTY_STYLED_UNDERLINES', 2016, default=True), + mode_WHAT('KITTY_EXTENDED_KEYBOARD', 2017, default=False), + + # MinTTY: + + mode_WHAT('MINTTY_REPORT_CJK_AMBIGUOUS_WIDTH', 7700, default=False), + mode_WHAT('MINTTY_REPORT_SCROLL_MARKER_IN_CURRENT_LINE', 7711, default=False), + mode_WHAT('MINTTY_APPLICATION_ESCAPE', 7727, default=False), + mode_WHAT('MINTTY_ESCAPE_SENDS_FS',7728, default=False), + + # MINTTY_SIXEL_SCROLL_END_POSITION: + # If set, sixel scrolling moves the cursor to the left margin on the + # next line; if reset, moves the cursor to the right of the inserted + # graphic. + # + # Default: reset + # + # References: MinTTY + mode_WHAT('MINTTY_SIXEL_SCROLL_END_POSITION',7730, default=False), + + mode_WHAT('MINTTY_SCROLLBAR', 7766, default=False), + mode_WHAT('MINTTY_REPORT_FONT_CHANGES', 7767, default=False), + mode_WHAT('MINTTY_SHORTCUT_OVERRIDE', 7783, default=False), + mode_WHAT('MINTTY_ALTBUF_MOUSEWHEEL_TO_CURSORKEYS', 7786, default=False), + mode_WHAT('MINTTY_MOUSEWHEEL_APPLICATION_KEYS', 7787, default=False), + mode_WHAT('MINTTY_BIDI_DISABLE_IN_CURRENT_LINE', 7796, default=False), + + # MINTTY_SIXEL_SCROLL_CURSOR_RIGHT: + # If set, sixel scrolling moves the cursor to the right of the + # inserted graphic; if reset, MINTTY_SIXEL_SCROLL_END_POSITION + # takes effect. + # + # Default: reset + # + # References: MinTTY + mode_WHAT('MINTTY_SIXEL_SCROLL_CURSOR_RIGHT', 8452, default=False, + alias=['RLOGIN_SIXEL_SCROLL_CURSOR_RIGHT']), + + # MinTTY also knows mode 77096 "BIDI disable", and 77000..77031 + # "Application control key", all of which are outside of the supported + # range CSI parameters in VTE, so we don't list them here and VTE will + # never support them. + + # RLogin: + + # RLogin has many private modes + # [https://github.com/kmiya-culti/RLogin/blob/master/RLogin/TextRam.h#L131]: + # 1406..1415, 1420..1425, 1430..1434, 1436, 1452..1481, + # 8400..8406, 8416..8417, 8428..8429, 8435, 8437..8443, + # 8446..8458, + # and modes 7727, 7786, 8200 (home cursor on [ED 2]), + # 8800 (DRCSMM_V1), 8840 (same as 8428). + # + # We're not going to implement them, but avoid these ranges + # when assigning new mode numbers. + # + # The following are the ones from RLogin that MLTerm knows about: + + #mode_WHAT('RLOGIN_APPLICATION_ESCAPE', 7727, default=False) + #mode_WHAT('RLOGIN_MOUSEWHEEL_TO_CURSORKEYS', 7786, default=False) + + # Ambiguous-width characters are wide (reset) or narrow (set) + mode_WHAT('RLOGIN_AMBIGUOUS_WIDTH_CHARACTERS_NARROW', 8428, default=False), + + # XTERM also knows this one + #mode_WHAT('RLOGIN_SIXEL_SCROLL_CURSOR_RIGHT', 8452, default=False), + + # [u]RXVT: + + mode_WHAT('RXVT_TOOLBAR', 10, default=False), + mode_WHAT('RXVT_SCROLLBAR', 30, default=False), + + # Conflicts with DECHEBM + #mode_WHAT('RXVT_SHIFT_KEYS', 35, default=False), + + mode_WHAT('RXVT_SCROLL_OUTPUT', 1010, default=False), + mode_WHAT('RXVT_SCROLL_KEYPRESS', 1011, default=False), + mode_WHAT('RXVT_MOUSE_EXT', 1015, default=False), + + # Bold/blink uses normal (reset) or high intensity (set) colour + mode_WHAT('RXVT_INTENSITY_STYLES', 1021, default=True), + + # WYSE: + + # WYTEK - TEK 4010/4014 personality + # If set, switches to TEK 4010/4014 personality. + # + # Default: reset + # + # References: WY370 + # + mode_WHAT('WYTEK', 38, default=False, alias=['DECTEK']), + + # WY161 - 161 column mode + # If set, switches the terminal to 161 columns; if reset, + # to 80 columns. + # + # Default: reset + # + # References: WY370 + # + # Note: Conflicts with DECSDM + #mode_WHAT('WY161', 80, default=False), + + # WY52 - 52 lines mode + # If set, switches the terminal to 52 lines; if reset, + # to 24 lines. + # + # Default: reset + # + # References: WY370 + # + mode_WHAT('WY52', 83, default=False), + + # WYENAT - enable separate attributes + # If set, SGR attributes may be set separately for eraseable + # and noneraseable characters. If reset, the same SGR attributes + # apply to both eraseable and noneraseable characters. + # + # + # Default: reset + # + # References: WY370 + # + mode_WHAT('WYENAT', 84, default=False), + + # WYREPL - replacement character color + # + # Default: reset + # + # References: WY370 + # + mode_WHAT('WYREPL', 85, default=False), + + # VTE: + + # Whether to swap the Left and Right arrow keys if the cursor + # stands over an RTL paragraph. + # + # Default: set + # + # Reference: Terminal-wg/bidi + # + mode_WHAT('VTE_BIDI_SWAP_ARROW_KEYS', 1243, default=True, flags=Flags.WRITABLE), + + # Whether box drawing characters in the U+2500..U+257F range + # are to be mirrored in RTL context. + # + # Default: reset + # + # Reference: Terminal-wg/bidi + # + mode_WHAT('VTE_BIDI_BOX_MIRROR', 2500, default=False, flags=Flags.WRITABLE), + + # Whether BiDi paragraph direction is autodetected. + # + # Default: reset + # + # Reference: Terminal-wg/bidi + # + mode_WHAT('VTE_BIDI_AUTO', 2501, default=False, flags=Flags.WRITABLE), + + # XTERM: + + mode_WHAT('XTERM_ATT610_BLINK', 12, default=False), + mode_WHAT('XTERM_CURSOR_BLINK', 13, default=False), + mode_WHAT('XTERM_CURSOR_BLINK_XOR', 14, default=False), + mode_WHAT('XTERM_CURSES_HACK', 41, default=False), + mode_WHAT('XTERM_MARGIN_BELL', 44, default=False), + mode_WHAT('XTERM_REVERSE_WRAP', 45, default=False), + mode_WHAT('XTERM_LOGGING', 46, default=False), + + mode_WHAT('XTERM_MOUSE_VT220', 1000, default=False, flags=Flags.WRITABLE), + mode_WHAT('XTERM_MOUSE_VT220_HIGHLIGHT', 1001, default=False, flags=Flags.WRITABLE), + mode_WHAT('XTERM_MOUSE_BUTTON_EVENT', 1002, default=False, flags=Flags.WRITABLE), + mode_WHAT('XTERM_MOUSE_ANY_EVENT', 1003, default=False, flags=Flags.WRITABLE), + mode_WHAT('XTERM_FOCUS', 1004, default=False, flags=Flags.WRITABLE), + + mode_WHAT('XTERM_MOUSE_EXT', 1005, default=False), + + mode_WHAT('XTERM_MOUSE_EXT_SGR', 1006, default=False, flags=Flags.WRITABLE), + mode_WHAT('XTERM_ALTBUF_SCROLL', 1007, default=True, flags=Flags.WRITABLE), + + mode_WHAT('XTERM_8BIT_META', 1034, default=False), + mode_WHAT('XTERM_NUMLOCK', 1035, default=False), + + mode_WHAT('XTERM_META_SENDS_ESCAPE', 1036, default=True, flags=Flags.WRITABLE), + + mode_WHAT('XTERM_DELETE_IS_DEL', 1037, default=False), + mode_WHAT('XTERM_ALT_SENDS_ESCAPE', 1039, default=False), + mode_WHAT('XTERM_KEEP_SELECTION', 1040, default=False), + mode_WHAT('XTERM_SELECT_TO_CLIPBOARD', 1041, default=False), + mode_WHAT('XTERM_BELL_URGENT', 1042, default=False), + mode_WHAT('XTERM_PRESENT_ON_BELL', 1043, default=False), + mode_WHAT('XTERM_KEEP_CLIPBOARD', 1044, default=False), + mode_WHAT('XTERM_ALLOW_ALTBUF', 1046, default=True), + + mode_WHAT('XTERM_OPT_ALTBUF', 1047, default=False, flags=Flags.WRITABLE), + mode_WHAT('XTERM_SAVE_CURSOR', 1048, default=False, flags=Flags.WRITABLE), + mode_WHAT('XTERM_OPT_ALTBUF_SAVE_CURSOR', 1049, default=False, flags=Flags.WRITABLE), + + mode_WHAT('XTERM_FKEYS_TERMCAP', 1050, default=False), + mode_WHAT('XTERM_FKEYS_SUN', 1051, default=False), + mode_WHAT('XTERM_FKEYS_HP', 1052, default=False), + mode_WHAT('XTERM_FKEYS_SCO', 1053, default=False), + mode_WHAT('XTERM_FKEYS_LEGACY', 1060, default=False), + mode_WHAT('XTERM_FKEYS_VT220', 1061, default=False), + + # XTERM_SIXEL_PRIVATE_COLOR_REGISTERS: + # When set, each SIXEL graphic uses newly initialised colour registers. + # When reset, changes to colour registers from one SIXEL image are + # saved and used for the next SIXEL graphic. + # + # Default: set + # + # References: XTERM + # + mode_WHAT('XTERM_SIXEL_PRIVATE_COLOR_REGISTERS', 1070, default=True, flags=Flags.WRITABLE), + + mode_WHAT('XTERM_READLINE_BUTTON1_MOVE_POINT', 2001, default=False), + mode_WHAT('XTERM_READLINE_BUTTON2_MOVE_POINT', 2002, default=False), + mode_WHAT('XTERM_READLINE_DBLBUTTON3_DELETE', 2003, default=False), + + # Whether to surround pasted text with CSI ~ sequences + # + # Default: reset + # + # References: XTERM + # + mode_WHAT('XTERM_READLINE_BRACKETED_PASTE', 2004, default=False, flags=Flags.WRITABLE), + + mode_WHAT('XTERM_READLINE_PASTE_QUOTE', 2005, default=False), + mode_WHAT('XTERM_READLINE_PASTE_LITERAL_NL', 2006, default=False), + + # ************************************************************************ + + # Modes for SM_HP/RM_HP (CSI > n [h|l]) + # + # None of these are not implemented in VTE. + # + # References: HP 2397A + + # HP: + + # HP_MULTIPAGE: + # If set, the terminal has multiple pages of 24 lines of display memory. + # If reset, the terminal only has one page of 24 lines of display memory + # + # Default: reset + # + # References: HP 2397A + mode_GT('HP_MULTIPAGE', 1, default=False), + + # HP_MEMLOCK: + # + # Default: reset + # + # References: HP 2397A + mode_GT('HP_MEMLOCK', 2, default=False), + +] + +# Output generator + +''' Write copyright header ''' +def write_header(outfile): + outfile.write(''' +/* Generated by modes.py; do not edit! */ + +/* + * Copyright © 2018, 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see <https://www.gnu.org/licenses/>. + */ +''') + + +''' Write sequences ''' +def write_modes(output, mtype): + outfile = open(output.as_posix(), 'w') + write_header(outfile) + outfile.write(''' +#if !defined(MODE) || !defined(MODE_FIXED) +#error "Must define MODE and MODE_FIXED before including this file" +#endif + +''') + + for m in sorted([m for m in modes if m.mtype == mtype], key=lambda m: m.number): + + if m.flags & Flags.WRITABLE: + outfile.write(f'MODE(' + f'{m.name}, ' + f'{m.number})\n') + else: + value = 'ALWAYS_SET' if m.default else 'ALWAYS_RESET' + outfile.write(f'MODE_FIXED(' + f'{m.name}, ' + f'{m.number}, ' + f'{value})\n') + + +# main + +''' main ''' +if __name__ == '__main__': + + parser = argparse.ArgumentParser(description='modes include file generator') + parser.add_argument('--destdir', + type=pathlib.Path, + default=pathlib.PosixPath('.'), + help='Output directory') + + try: + args = parser.parse_args() + except Exception as e: + print(f'Failed to parse arguments: {e}') + sys.exit(1) + + write_modes(args.destdir / "modes-ecma.hh", Type.ECMA) + write_modes(args.destdir / "modes-dec.hh", Type.WHAT) + # write_modes(args.destdir / "modes-hp.hh", Type.GT) |