keysyms: Add aliases for media keys

Part-of: <https://gitlab.freedesktop.org/xorg/proto/xorgproto/-/merge_requests/93>
This commit is contained in:
Pierre Le Marre 2025-07-20 20:26:36 +02:00
parent d466a25c87
commit 7fc33fe6d9
2 changed files with 27 additions and 14 deletions

View file

@ -108,6 +108,7 @@
#define XF86XK_ApplicationRight 0x1008ff51 /* switch to application, right*/ #define XF86XK_ApplicationRight 0x1008ff51 /* switch to application, right*/
#define XF86XK_Book 0x1008ff52 /* Launch bookreader */ #define XF86XK_Book 0x1008ff52 /* Launch bookreader */
#define XF86XK_CD 0x1008ff53 /* Launch CD/DVD player */ #define XF86XK_CD 0x1008ff53 /* Launch CD/DVD player */
#define XF86XK_MediaSelectCD 0x1008ff53 /* Alias for XF86XK_CD */
#define XF86XK_Calculater 0x1008ff54 /* Launch Calculater */ #define XF86XK_Calculater 0x1008ff54 /* Launch Calculater */
#define XF86XK_Clear 0x1008ff55 /* Clear window, screen */ #define XF86XK_Clear 0x1008ff55 /* Clear window, screen */
#define XF86XK_Close 0x1008ff56 /* Close window */ #define XF86XK_Close 0x1008ff56 /* Close window */
@ -275,6 +276,8 @@
* The format for #defines is strict: * The format for #defines is strict:
* *
* #define XF86XK_Foo<spaces>_EVDEVK(0xABC)<spaces> |* kver KEY_FOO *| * #define XF86XK_Foo<spaces>_EVDEVK(0xABC)<spaces> |* kver KEY_FOO *|
* #define XF86XK_Foo<spaces>_EVDEVK(0xABC)<spaces> |* Alias for XF86XK_Bar *|
* #define XF86XK_Foo<spaces>_EVDEVK(0xABC)<spaces> |* Deprecated alias for XF86XK_Bar *|
* *
* Where * Where
* - alignment by spaces * - alignment by spaces
@ -348,13 +351,14 @@
#define XF86XK_MediaSelectVCRPlus _EVDEVK(0x17c) /* v2.5.26 KEY_VCR2 */ #define XF86XK_MediaSelectVCRPlus _EVDEVK(0x17c) /* v2.5.26 KEY_VCR2 */
#define XF86XK_MediaSelectSatellite _EVDEVK(0x17d) /* v2.5.26 KEY_SAT */ #define XF86XK_MediaSelectSatellite _EVDEVK(0x17d) /* v2.5.26 KEY_SAT */
/* TODO: unclear media selector _EVDEVK(0x17e) v2.5.26 KEY_SAT2 */ /* TODO: unclear media selector _EVDEVK(0x17e) v2.5.26 KEY_SAT2 */
/* Use: XF86XK_CD _EVDEVK(0x17f) v2.5.26 KEY_CD */ /* Use: XF86XK_MediaSelectCD _EVDEVK(0x17f) v2.5.26 KEY_CD */
#define XF86XK_MediaSelectTape _EVDEVK(0x180) /* v2.5.26 KEY_TAPE */ #define XF86XK_MediaSelectTape _EVDEVK(0x180) /* v2.5.26 KEY_TAPE */
#define XF86XK_MediaSelectRadio _EVDEVK(0x181) /* v2.5.26 KEY_RADIO */ #define XF86XK_MediaSelectRadio _EVDEVK(0x181) /* v2.5.26 KEY_RADIO */
#define XF86XK_MediaSelectTuner _EVDEVK(0x182) /* v2.5.26 KEY_TUNER */ #define XF86XK_MediaSelectTuner _EVDEVK(0x182) /* v2.5.26 KEY_TUNER */
#define XF86XK_MediaPlayer _EVDEVK(0x183) /* v2.5.26 KEY_PLAYER */ #define XF86XK_MediaPlayer _EVDEVK(0x183) /* v2.5.26 KEY_PLAYER */
#define XF86XK_MediaSelectTeletext _EVDEVK(0x184) /* v2.5.26 KEY_TEXT */ #define XF86XK_MediaSelectTeletext _EVDEVK(0x184) /* v2.5.26 KEY_TEXT */
#define XF86XK_DVD _EVDEVK(0x185) /* v2.5.26 KEY_DVD */ #define XF86XK_DVD _EVDEVK(0x185) /* v2.5.26 KEY_DVD */
#define XF86XK_MediaSelectDVD _EVDEVK(0x185) /* Alias for XF86XK_DVD */
#define XF86XK_MediaSelectAuxilliary _EVDEVK(0x186) /* v2.5.26 KEY_AUX */ #define XF86XK_MediaSelectAuxilliary _EVDEVK(0x186) /* v2.5.26 KEY_AUX */
/* TODO: unclear media selector _EVDEVK(0x187) v2.5.26 KEY_MP3 */ /* TODO: unclear media selector _EVDEVK(0x187) v2.5.26 KEY_MP3 */
#define XF86XK_Audio _EVDEVK(0x188) /* v2.5.26 KEY_AUDIO */ #define XF86XK_Audio _EVDEVK(0x188) /* v2.5.26 KEY_AUDIO */

View file

@ -191,11 +191,14 @@ def verify(ns):
# This is the full pattern we expect. # This is the full pattern we expect.
expected_pattern = re.compile( expected_pattern = re.compile(
r"#define XF86XK_\w+ +_EVDEVK\(0x([0-9A-Fa-f]{3})\) +/\* (v[2-6]\.[0-9]+(\.[0-9]+)?)? +KEY_\w+ \*/" r"#define XF86XK_\w+ +_EVDEVK\(0x([0-9A-Fa-f]{3})\) +"
r"/\* (?:(?P<kernel_version>v[2-6]\.[0-9]+(\.[0-9]+)?)? +KEY_\w+|"
r"(?P<alias>Alias for XF86XK_\w+)) \*/"
) )
# This is the comment pattern we expect # This is the comment pattern we expect
expected_comment_pattern = re.compile( expected_comment_pattern = re.compile(
r"/\* Use: (?P<name>\w+) +_EVDEVK\(0x(?P<value>[0-9A-Fa-f]{3})\) + (v[2-6]\.[0-9]+(\.[0-9]+)?)? +KEY_\w+ \*/" r"/\* Use: (?P<name>\w+) +_EVDEVK\(0x(?P<value>[0-9A-Fa-f]{3})\) + "
r"(v[2-6]\.[0-9]+(\.[0-9]+)?)? +KEY_\w+ \*/"
) )
# Some patterns to spot specific errors, just so we can print useful errors # Some patterns to spot specific errors, just so we can print useful errors
@ -204,8 +207,11 @@ def verify(ns):
space_check = re.compile(r"#define \w+(\s+)[^\s]+(\s+)") space_check = re.compile(r"#define \w+(\s+)[^\s]+(\s+)")
hex_pattern = re.compile(r".*0x([a-f0-9]+).*", re.I) hex_pattern = re.compile(r".*0x([a-f0-9]+).*", re.I)
todo_pattern = re.compile(r"^/\* TODO.*\*/$") todo_pattern = re.compile(r"^/\* TODO.*\*/$")
comment_format = re.compile(r".*/\* ([^\s]+)?\s+(\w+)") comment_format = re.compile(
r".*/\* (?:(?:Deprecated a|A)lias for (\w+)|([^\s]+)?\s+(\w+))"
)
kver_format = re.compile(r"v[2-6]\.[0-9]+(\.[0-9]+)?") kver_format = re.compile(r"v[2-6]\.[0-9]+(\.[0-9]+)?")
alias_format = re.compile(r"(?:Deprecated a|A)lias for XF86XK_\w+")
in_evdev_codes_section = False in_evdev_codes_section = False
had_evdev_codes_section = False had_evdev_codes_section = False
@ -292,11 +298,14 @@ def verify(ns):
comment = re.match(comment_format, line) comment = re.match(comment_format, line)
if not comment: if not comment:
error("Invalid comment format", line) error("Invalid comment format", line)
kver = comment.group(1) if alias_target := comment.group(1):
if kver and not re.match(kver_format, kver): alias = True
else:
alias = False
if (kver := comment.group(2)) and not re.match(kver_format, kver):
error("Invalid kernel version format", line) error("Invalid kernel version format", line)
keyname = comment.group(2) keyname = comment.group(3)
if not keyname.startswith("KEY_") or keyname.upper() != keyname: if not keyname.startswith("KEY_") or keyname.upper() != keyname:
error("Kernel keycode name invalid", line) error("Kernel keycode name invalid", line)
@ -313,7 +322,7 @@ def verify(ns):
keycode = int(match.group(1), 16) keycode = int(match.group(1), 16)
if keycode < last_keycode: if keycode < last_keycode:
error("Keycode must be ascending", line) error("Keycode must be ascending", line)
if keycode == last_keycode: if keycode == last_keycode and not alias:
error("Duplicate keycode", line) error("Duplicate keycode", line)
# May cause a false positive for old libevdev if KEY_MAX is bumped # May cause a false positive for old libevdev if KEY_MAX is bumped