// Copyright (c) 2026 Storm Dragon // Authors: Storm Dragon, Angus Kola // SPDX-License-Identifier: GPL-3.0-or-later package input import "strconv" // ValidRemoteKeyName defines the shared logical-key vocabulary. It grants no // native capability and performs no layout/keycode lookup. func ValidRemoteKeyName(name string) bool { if len(name) == 1 && (name[0] >= 'a' && name[0] <= 'z' || name[0] >= '0' && name[0] <= '9') { return true } if len(name) >= 2 && len(name) <= 3 && name[0] == 'F' { number, err := strconv.Atoi(name[1:]) return err == nil && number >= 1 && number <= 24 && strconv.Itoa(number) == name[1:] } if len(name) == 4 && name[:3] == "KP_" && name[3] >= '0' && name[3] <= '9' { return true } switch name { case "BackSpace", "Tab", "Return", "Escape", "space", "Pause", "Print", "Menu", "Caps_Lock", "Num_Lock", "Scroll_Lock", "Shift_L", "Shift_R", "Control_L", "Control_R", "Alt_L", "Alt_R", "Super_L", "Super_R", "Page_Up", "Page_Down", "End", "Home", "Left", "Up", "Right", "Down", "Insert", "Delete", "KP_Begin", "KP_Enter", "KP_Page_Up", "KP_Page_Down", "KP_End", "KP_Home", "KP_Left", "KP_Up", "KP_Right", "KP_Down", "KP_Insert", "KP_Delete", "KP_Multiply", "KP_Add", "KP_Separator", "KP_Subtract", "KP_Decimal", "KP_Divide", "semicolon", "equal", "comma", "minus", "period", "slash", "grave", "bracketleft", "backslash", "bracketright", "apostrophe", // Browser, volume, media and launch keys (Windows VK 0xa6-0xb7). "XF86Back", "XF86Forward", "XF86Reload", "XF86Stop", "XF86Search", "XF86Favorites", "XF86HomePage", "XF86AudioMute", "XF86AudioLowerVolume", "XF86AudioRaiseVolume", "XF86AudioNext", "XF86AudioPrev", "XF86AudioStop", "XF86AudioPlay", "XF86Mail", "XF86AudioMedia", "XF86MyComputer", "XF86Calculator": return true } return false }