From 173e59cb9ecbbb1048ea33a70a6223e1c310d5a0 Mon Sep 17 00:00:00 2001 From: Pierre Le Marre Date: Sun, 1 Mar 2026 07:40:50 +0100 Subject: [PATCH 1/4] keysyms: Promote ISO_Group_Shift to canonical name Before this commit, `Mode_switch` was the canonical name and `ISO_Group_Shift` a mere alias. But `Mode_switch` is a legacy keysym from the *core* X protocol and its name refers to a group mechanism now obsoleted by XKB. Furthermore, `Mode_switch` does not have variants for latch and lock actions, contrary to `ISO_Group_Shift`. Therefore promote `ISO_Group_Shift` as the canonical name. Signed-off-by: Pierre Le Marre --- include/X11/keysymdef.h | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/include/X11/keysymdef.h b/include/X11/keysymdef.h index e75c402..247917e 100644 --- a/include/X11/keysymdef.h +++ b/include/X11/keysymdef.h @@ -271,8 +271,11 @@ SOFTWARE. #define XK_Cancel 0xff69 /* Cancel, stop, abort, exit */ #define XK_Help 0xff6a /* Help */ #define XK_Break 0xff6b -#define XK_Mode_switch 0xff7e /* Character set switch */ -#define XK_script_switch 0xff7e /* non-deprecated alias for Mode_switch */ +#ifdef XK_XKB_KEYS +#define XK_ISO_Group_Shift 0xff7e +#endif +#define XK_Mode_switch 0xff7e /* non-deprecated alias for ISO_Group_Shift */ +#define XK_script_switch 0xff7e /* non-deprecated alias for ISO_Group_Shift */ #define XK_Num_Lock 0xff7f /* Keypad functions, keypad numbers cleverly chosen to map to ASCII */ @@ -420,7 +423,7 @@ SOFTWARE. #define XK_ISO_Level5_Shift 0xfe11 #define XK_ISO_Level5_Latch 0xfe12 #define XK_ISO_Level5_Lock 0xfe13 -#define XK_ISO_Group_Shift 0xff7e /* non-deprecated alias for Mode_switch */ +/* XK_ISO_Group_Shift 0xff7e (see above) */ #define XK_ISO_Group_Latch 0xfe06 #define XK_ISO_Group_Lock 0xfe07 #define XK_ISO_Next_Group 0xfe08 @@ -1081,7 +1084,7 @@ SOFTWARE. #define XK_kana_N 0x04dd /* U+30F3 KATAKANA LETTER N */ #define XK_voicedsound 0x04de /* U+309B KATAKANA-HIRAGANA VOICED SOUND MARK */ #define XK_semivoicedsound 0x04df /* U+309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ -#define XK_kana_switch 0xff7e /* non-deprecated alias for Mode_switch */ +#define XK_kana_switch 0xff7e /* non-deprecated alias for ISO_Group_Shift */ #endif /* XK_KATAKANA */ /* @@ -1180,7 +1183,7 @@ SOFTWARE. #define XK_Arabic_farsi_yeh 0x10006cc /* deprecated alias for Farsi_yeh */ #define XK_Arabic_yeh_baree 0x10006d2 /* U+06D2 ARABIC LETTER YEH BARREE */ #define XK_Arabic_heh_goal 0x10006c1 /* U+06C1 ARABIC LETTER HEH GOAL */ -#define XK_Arabic_switch 0xff7e /* non-deprecated alias for Mode_switch */ +#define XK_Arabic_switch 0xff7e /* non-deprecated alias for ISO_Group_Shift */ #endif /* XK_ARABIC */ /* @@ -1412,7 +1415,7 @@ SOFTWARE. #define XK_Greek_chi 0x07f7 /* U+03C7 GREEK SMALL LETTER CHI */ #define XK_Greek_psi 0x07f8 /* U+03C8 GREEK SMALL LETTER PSI */ #define XK_Greek_omega 0x07f9 /* U+03C9 GREEK SMALL LETTER OMEGA */ -#define XK_Greek_switch 0xff7e /* non-deprecated alias for Mode_switch */ +#define XK_Greek_switch 0xff7e /* non-deprecated alias for ISO_Group_Shift */ #endif /* XK_GREEK */ /* @@ -1672,7 +1675,7 @@ SOFTWARE. #define XK_hebrew_shin 0x0cf9 /* U+05E9 HEBREW LETTER SHIN */ #define XK_hebrew_taw 0x0cfa /* U+05EA HEBREW LETTER TAV */ #define XK_hebrew_taf 0x0cfa /* deprecated */ -#define XK_Hebrew_switch 0xff7e /* non-deprecated alias for Mode_switch */ +#define XK_Hebrew_switch 0xff7e /* non-deprecated alias for ISO_Group_Shift */ #endif /* XK_HEBREW */ /* @@ -1789,7 +1792,7 @@ SOFTWARE. #define XK_Hangul_MultipleCandidate 0xff3d /* Multiple candidate */ #define XK_Hangul_PreviousCandidate 0xff3e /* Previous candidate */ #define XK_Hangul_Special 0xff3f /* Special symbols */ -#define XK_Hangul_switch 0xff7e /* non-deprecated alias for Mode_switch */ +#define XK_Hangul_switch 0xff7e /* non-deprecated alias for ISO_Group_Shift */ /* Hangul Consonant Characters */ #define XK_Hangul_Kiyeog 0x0ea1 /* U+3131 HANGUL LETTER KIYEOK */ From f2b124c888011116047e3731a46d3efba03b4da2 Mon Sep 17 00:00:00 2001 From: Pierre Le Marre Date: Tue, 3 Mar 2026 09:37:08 +0100 Subject: [PATCH 2/4] keysysm: Added SSHARP MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In Germany “ẞ” is the official upper case of “ß” when using all-caps. Therefore its keysym deserves a proper symbolic name. Signed-off-by: Pierre Le Marre --- include/X11/keysym.h | 1 + include/X11/keysymdef.h | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/include/X11/keysym.h b/include/X11/keysym.h index 0ffdde4..4c0ac5a 100644 --- a/include/X11/keysym.h +++ b/include/X11/keysym.h @@ -69,6 +69,7 @@ SOFTWARE. #define XK_MATHEMATICAL #define XK_BRAILLE #define XK_SINHALA +#define XK_GERMAN #include diff --git a/include/X11/keysymdef.h b/include/X11/keysymdef.h index 247917e..49c3403 100644 --- a/include/X11/keysymdef.h +++ b/include/X11/keysymdef.h @@ -2585,3 +2585,11 @@ SOFTWARE. #define XK_Sinh_luu2 0x1000df3 /* U+0DF3 SINHALA VOWEL SIGN DIGA GAYANUKITTA */ #define XK_Sinh_kunddaliya 0x1000df4 /* U+0DF4 SINHALA PUNCTUATION KUNDDALIYA */ #endif /* XK_SINHALA */ + +/* + * German + */ + +#ifdef XK_GERMAN +#define XK_SSHARP 0x1001e9e /* U+1E9E LATIN CAPITAL LETTER SHARP S */ +#endif /* XK_GERMAN */ From c04c810b0eaf255efbae543471c8290a76e67780 Mon Sep 17 00:00:00 2001 From: Pierre Le Marre Date: Tue, 3 Mar 2026 10:00:20 +0100 Subject: [PATCH 3/4] keysyms: Added dead_apostrophe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Aimed to substitute `dead_acute` in situations where `dead_acute + consonant` is expected to produce `’ + consonant`. Signed-off-by: Pierre Le Marre --- include/X11/keysymdef.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/X11/keysymdef.h b/include/X11/keysymdef.h index 49c3403..e06eaba 100644 --- a/include/X11/keysymdef.h +++ b/include/X11/keysymdef.h @@ -517,6 +517,7 @@ SOFTWARE. #define XK_dead_greek 0xfe8c #define XK_dead_hamza 0xfe8d +#define XK_dead_apostrophe 0xfe8e #define XK_First_Virtual_Screen 0xfed0 #define XK_Prev_Virtual_Screen 0xfed1 From ede93ddaa26fd8144364c563447a1d65942bf495 Mon Sep 17 00:00:00 2001 From: Pierre Le Marre Date: Tue, 3 Mar 2026 10:47:05 +0100 Subject: [PATCH 4/4] keysyms: Added single angle quotation marks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Single angle quotation marks ‹ and › are official or permissible secondary quotes in some languages, thus they deserve having symbolic names. See: https://en.wikipedia.org/wiki/Quotation_mark#Summary_table Signed-off-by: Pierre Le Marre --- include/X11/keysym.h | 1 + include/X11/keysymdef.h | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/include/X11/keysym.h b/include/X11/keysym.h index 4c0ac5a..a23722b 100644 --- a/include/X11/keysym.h +++ b/include/X11/keysym.h @@ -70,6 +70,7 @@ SOFTWARE. #define XK_BRAILLE #define XK_SINHALA #define XK_GERMAN +#define XK_GENERAL_PUNCTUATION #include diff --git a/include/X11/keysymdef.h b/include/X11/keysymdef.h index e06eaba..c76ae95 100644 --- a/include/X11/keysymdef.h +++ b/include/X11/keysymdef.h @@ -2594,3 +2594,12 @@ SOFTWARE. #ifdef XK_GERMAN #define XK_SSHARP 0x1001e9e /* U+1E9E LATIN CAPITAL LETTER SHARP S */ #endif /* XK_GERMAN */ + +/* + * General punctuation + */ + +#ifdef XK_GENERAL_PUNCTUATION +#define XK_leftsingleanglequotemark 0x1002039 /* U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK */ +#define XK_rightsingleanglequotemark 0x100203a /* U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */ +#endif /* XK_GENERAL_PUNCTUATION */ \ No newline at end of file