[vte] parser: modes: Generate modes-*.hh from script and data
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vte] parser: modes: Generate modes-*.hh from script and data
- Date: Sun, 31 Jan 2021 22:11:04 +0000 (UTC)
commit 38d9339917dbd2f84a57ff1cc2b28deaed3c86e7
Author: Christian Persch <chpe src gnome org>
Date: Sun Jan 31 23:10:29 2021 +0100
parser: modes: Generate modes-*.hh from script and data
src/meson.build | 16 +-
src/modes-ecma.hh | 218 ---------
src/modes-private.hh | 881 ---------------------------------
src/modes.hh | 10 +-
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.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)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]