summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Persch <chpe@src.gnome.org>2021-01-31 23:10:29 +0100
committerChristian Persch <chpe@src.gnome.org>2021-01-31 23:10:29 +0100
commit38d9339917dbd2f84a57ff1cc2b28deaed3c86e7 (patch)
tree66258c8ca004c0139419dc8e71e2f164b94e509d
parenteeb80ac1403546034478ce80d6f53cb9c43a735b (diff)
downloadvte-38d9339917dbd2f84a57ff1cc2b28deaed3c86e7.tar.gz
parser: modes: Generate modes-*.hh from script and data
-rw-r--r--src/meson.build16
-rw-r--r--src/modes-ecma.hh218
-rw-r--r--src/modes-private.hh881
-rw-r--r--src/modes.hh10
-rwxr-xr-xsrc/modes.py1335
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)