diff --git a/app/internal/xkb/xkb_unix.go b/app/internal/xkb/xkb_unix.go index 68b13291..eda120d8 100644 --- a/app/internal/xkb/xkb_unix.go +++ b/app/internal/xkb/xkb_unix.go @@ -267,33 +267,41 @@ func convertKeysym(s C.xkb_keysym_t) (string, bool) { case C.XKB_KEY_Page_Down: n = key.NamePageDown case C.XKB_KEY_F1: - n = "F1" + n = key.NameF1 case C.XKB_KEY_F2: - n = "F2" + n = key.NameF2 case C.XKB_KEY_F3: - n = "F3" + n = key.NameF3 case C.XKB_KEY_F4: - n = "F4" + n = key.NameF4 case C.XKB_KEY_F5: - n = "F5" + n = key.NameF5 case C.XKB_KEY_F6: - n = "F6" + n = key.NameF6 case C.XKB_KEY_F7: - n = "F7" + n = key.NameF7 case C.XKB_KEY_F8: - n = "F8" + n = key.NameF8 case C.XKB_KEY_F9: - n = "F9" + n = key.NameF9 case C.XKB_KEY_F10: - n = "F10" + n = key.NameF10 case C.XKB_KEY_F11: - n = "F11" + n = key.NameF11 case C.XKB_KEY_F12: - n = "F12" + n = key.NameF12 case C.XKB_KEY_Tab, C.XKB_KEY_KP_Tab, C.XKB_KEY_ISO_Left_Tab: n = key.NameTab case 0x20, C.XKB_KEY_KP_Space: n = key.NameSpace + case C.XKB_KEY_Control_L, C.XKB_KEY_Control_R: + n = key.NameCtrl + case C.XKB_KEY_Shift_L, C.XKB_KEY_Shift_R: + n = key.NameShift + case C.XKB_KEY_Alt_L, C.XKB_KEY_Alt_R: + n = key.NameAlt + case C.XKB_KEY_Super_L, C.XKB_KEY_Super_R: + n = key.NameSuper default: return "", false } diff --git a/app/os_android.go b/app/os_android.go index 9830f39d..4f46b24f 100644 --- a/app/os_android.go +++ b/app/os_android.go @@ -905,6 +905,14 @@ func convertKeyCode(code C.jint) (string, bool) { n = key.NameEnter case C.AKEYCODE_ENTER: n = key.NameEnter + case C.AKEYCODE_CTRL_LEFT, C.AKEYCODE_CTRL_RIGHT: + n = key.NameCtrl + case C.AKEYCODE_SHIFT_LEFT, C.AKEYCODE_SHIFT_RIGHT: + n = key.NameShift + case C.AKEYCODE_ALT_LEFT, C.AKEYCODE_ALT_RIGHT: + n = key.NameAlt + case C.AKEYCODE_META_LEFT, C.AKEYCODE_META_RIGHT: + n = key.NameSuper default: return "", false } diff --git a/app/os_js.go b/app/os_js.go index 5b1388cf..5debe9b3 100644 --- a/app/os_js.go +++ b/app/os_js.go @@ -677,6 +677,7 @@ func osMain() { func translateKey(k string) (string, bool) { var n string + switch k { case "ArrowUp": n = key.NameUpArrow @@ -706,8 +707,38 @@ func translateKey(k string) (string, bool) { n = key.NameTab case " ": n = key.NameSpace - case "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12": - n = k + case "F1": + n = key.NameF1 + case "F2": + n = key.NameF2 + case "F3": + n = key.NameF3 + case "F4": + n = key.NameF4 + case "F5": + n = key.NameF5 + case "F6": + n = key.NameF6 + case "F7": + n = key.NameF7 + case "F8": + n = key.NameF8 + case "F9": + n = key.NameF9 + case "F10": + n = key.NameF10 + case "F11": + n = key.NameF11 + case "F12": + n = key.NameF12 + case "Control": + n = key.NameCtrl + case "Shift": + n = key.NameShift + case "Alt": + n = key.NameAlt + case "OS": + n = key.NameSuper default: r, s := utf8.DecodeRuneInString(k) // If there is exactly one printable character, return that. diff --git a/app/os_macos.go b/app/os_macos.go index 4c754d62..3cbbcc3c 100644 --- a/app/os_macos.go +++ b/app/os_macos.go @@ -610,29 +610,29 @@ func convertKey(k rune) (string, bool) { case C.NSPageDownFunctionKey: n = key.NamePageDown case C.NSF1FunctionKey: - n = "F1" + n = key.NameF1 case C.NSF2FunctionKey: - n = "F2" + n = key.NameF2 case C.NSF3FunctionKey: - n = "F3" + n = key.NameF3 case C.NSF4FunctionKey: - n = "F4" + n = key.NameF4 case C.NSF5FunctionKey: - n = "F5" + n = key.NameF5 case C.NSF6FunctionKey: - n = "F6" + n = key.NameF6 case C.NSF7FunctionKey: - n = "F7" + n = key.NameF7 case C.NSF8FunctionKey: - n = "F8" + n = key.NameF8 case C.NSF9FunctionKey: - n = "F9" + n = key.NameF9 case C.NSF10FunctionKey: - n = "F10" + n = key.NameF10 case C.NSF11FunctionKey: - n = "F11" + n = key.NameF11 case C.NSF12FunctionKey: - n = "F12" + n = key.NameF12 case 0x09, 0x19: n = key.NameTab case 0x20: diff --git a/app/os_windows.go b/app/os_windows.go index ecbffb4d..50460d3f 100644 --- a/app/os_windows.go +++ b/app/os_windows.go @@ -739,6 +739,7 @@ func convertKeyCode(code uintptr) (string, bool) { return string(rune(code)), true } var r string + switch code { case windows.VK_ESCAPE: r = key.NameEscape @@ -765,29 +766,29 @@ func convertKeyCode(code uintptr) (string, bool) { case windows.VK_NEXT: r = key.NamePageDown case windows.VK_F1: - r = "F1" + r = key.NameF1 case windows.VK_F2: - r = "F2" + r = key.NameF2 case windows.VK_F3: - r = "F3" + r = key.NameF3 case windows.VK_F4: - r = "F4" + r = key.NameF4 case windows.VK_F5: - r = "F5" + r = key.NameF5 case windows.VK_F6: - r = "F6" + r = key.NameF6 case windows.VK_F7: - r = "F7" + r = key.NameF7 case windows.VK_F8: - r = "F8" + r = key.NameF8 case windows.VK_F9: - r = "F9" + r = key.NameF9 case windows.VK_F10: - r = "F10" + r = key.NameF10 case windows.VK_F11: - r = "F11" + r = key.NameF11 case windows.VK_F12: - r = "F12" + r = key.NameF12 case windows.VK_TAB: r = key.NameTab case windows.VK_SPACE: @@ -814,6 +815,14 @@ func convertKeyCode(code uintptr) (string, bool) { r = "]" case windows.VK_OEM_7: r = "'" + case windows.VK_CONTROL: + r = key.NameCtrl + case windows.VK_SHIFT: + r = key.NameShift + case windows.VK_MENU: + r = key.NameAlt + case windows.VK_LWIN, windows.VK_RWIN: + r = key.NameSuper default: return "", false } diff --git a/io/key/key.go b/io/key/key.go index b6af2a4c..ef8f9111 100644 --- a/io/key/key.go +++ b/io/key/key.go @@ -133,6 +133,22 @@ const ( NamePageDown = "⇟" NameTab = "⇥" NameSpace = "Space" + NameCtrl = "⌃" + NameShift = "⇧" + NameAlt = "⎇" + NameSuper = "⊞" + NameF1 = "F1" + NameF2 = "F2" + NameF3 = "F3" + NameF4 = "F4" + NameF5 = "F5" + NameF6 = "F6" + NameF7 = "F7" + NameF8 = "F8" + NameF9 = "F9" + NameF10 = "F10" + NameF11 = "F11" + NameF12 = "F12" ) // Contain reports whether m contains all modifiers