diff --git a/docs/changelog.rst b/docs/changelog.rst index bf55977bb..c5c15f9cc 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -9,6 +9,8 @@ Changelog - Fix setting background_opacity causing window margins/padding to be slightly different shade from background (:iss:`1221`) +- Linux: Handle keyboards with a "+" key (:iss:`1224`) + 0.13.1 [2018-12-06] ------------------------------ diff --git a/glfw/cocoa_window.m b/glfw/cocoa_window.m index b6c634884..8eb7cad6c 100644 --- a/glfw/cocoa_window.m +++ b/glfw/cocoa_window.m @@ -312,6 +312,7 @@ static int translateKey(unsigned int key, GLFWbool apply_keymap) K(';', SEMICOLON); K('[', LEFT_BRACKET); K(']', RIGHT_BRACKET); + K('+', PLUS); K('`', GRAVE_ACCENT); K('\\', BACKSLASH); #undef K @@ -2218,6 +2219,7 @@ GLFWAPI void glfwGetCocoaKeyEquivalent(int glfw_key, int glfw_mods, unsigned sho K(';', SEMICOLON); K('[', LEFT_BRACKET); K(']', RIGHT_BRACKET); + K('+', PLUS); K('`', GRAVE_ACCENT); K('\\', BACKSLASH); diff --git a/glfw/glfw3.h b/glfw/glfw3.h index e728023af..9bb691bdd 100644 --- a/glfw/glfw3.h +++ b/glfw/glfw3.h @@ -407,6 +407,7 @@ extern "C" { #define GLFW_KEY_GRAVE_ACCENT 96 /* ` */ #define GLFW_KEY_WORLD_1 161 /* non-US #1 */ #define GLFW_KEY_WORLD_2 162 /* non-US #2 */ +#define GLFW_KEY_PLUS 163 /* Function keys */ #define GLFW_KEY_ESCAPE 256 diff --git a/glfw/xkb_glfw.c b/glfw/xkb_glfw.c index e1d0ce76d..3c10adaae 100644 --- a/glfw/xkb_glfw.c +++ b/glfw/xkb_glfw.c @@ -46,6 +46,7 @@ S(bracketleft, LEFT_BRACKET); \ S(backslash, BACKSLASH); \ S(bracketright, RIGHT_BRACKET); \ + S(plus, PLUS); \ S(grave, GRAVE_ACCENT); \ S(Escape, ESCAPE); \ S(Return, ENTER); \ diff --git a/kitty/glfw-wrapper.h b/kitty/glfw-wrapper.h index cc06bd769..cbd6f6096 100644 --- a/kitty/glfw-wrapper.h +++ b/kitty/glfw-wrapper.h @@ -166,6 +166,7 @@ #define GLFW_KEY_GRAVE_ACCENT 96 /* ` */ #define GLFW_KEY_WORLD_1 161 /* non-US #1 */ #define GLFW_KEY_WORLD_2 162 /* non-US #2 */ +#define GLFW_KEY_PLUS 163 /* non-US #2 */ /* Function keys */ #define GLFW_KEY_ESCAPE 256 diff --git a/kitty/glfw.c b/kitty/glfw.c index cd5b10bce..b9c4861d5 100644 --- a/kitty/glfw.c +++ b/kitty/glfw.c @@ -1116,6 +1116,7 @@ init_glfw(PyObject *m) { ADDC(GLFW_KEY_GRAVE_ACCENT); ADDC(GLFW_KEY_WORLD_1); ADDC(GLFW_KEY_WORLD_2); + ADDC(GLFW_KEY_PLUS); // --- Function keys ----------------------------------------------------------- ADDC(GLFW_KEY_ESCAPE); diff --git a/kitty/key_encoding.py b/kitty/key_encoding.py index 6402604ae..2ffc4af48 100644 --- a/kitty/key_encoding.py +++ b/kitty/key_encoding.py @@ -127,7 +127,8 @@ ENCODING = { 'WORLD 2': 'x', 'X': 'p', 'Y': 'q', - 'Z': 'r' + 'Z': 'r', + 'PLUS': 'Bi' } KEY_MAP = { 32: 'A', @@ -180,6 +181,7 @@ KEY_MAP = { 96: 'v', 161: 'w', 162: 'x', + 163: 'Bi', 256: 'y', 257: 'z', 258: '0', @@ -250,10 +252,8 @@ KEY_MAP = { 346: 'Bg', 347: 'Bh' } - # END_ENCODING }}} - text_keys = string.ascii_uppercase + string.ascii_lowercase + string.digits + '`~!@#$%^&*()_-+=[{]}\\|<,>./?;:\'" ' @@ -324,28 +324,35 @@ mod_map = {c: i for i, c in enumerate('ABCDEFGHIJKLMNOP')} key_rmap = {} g = globals() config_key_map = {} -config_mod_map = {'SHIFT': SHIFT, 'ALT': ALT, 'OPTION': ALT, '⌥': ALT, '⌘': SUPER, 'CMD': SUPER, 'SUPER': SUPER, 'CTRL': CTRL, 'CONTROL': CTRL} +config_mod_map = { + 'SHIFT': SHIFT, + 'ALT': ALT, + 'OPTION': ALT, + '⌥': ALT, + '⌘': SUPER, + 'CMD': SUPER, + 'SUPER': SUPER, + 'CTRL': CTRL, + 'CONTROL': CTRL +} for key_name, enc in ENCODING.items(): key_name = key_name.replace(' ', '_') g[key_name] = config_key_map[key_name] = key_name key_rmap[enc] = key_name config_key_map.update({ - '`': g['GRAVE_ACCENT'], - '-': g['MINUS'], - '=': g['EQUAL'], - - '[': g['LEFT_BRACKET'], - ']': g['RIGHT_BRACKET'], - '\\': g['BACKSLASH'], - - ';': g['SEMICOLON'], - "'": g['APOSTROPHE'], - - ',': g['COMMA'], - '.': g['PERIOD'], - '/': g['SLASH'], - - 'ESC': g['ESCAPE'], + '`': g['GRAVE_ACCENT'], + '-': g['MINUS'], + '=': g['EQUAL'], + '[': g['LEFT_BRACKET'], + ']': g['RIGHT_BRACKET'], + '\\': g['BACKSLASH'], + ';': g['SEMICOLON'], + "'": g['APOSTROPHE'], + ',': g['COMMA'], + '.': g['PERIOD'], + '/': g['SLASH'], + 'ESC': g['ESCAPE'], + '+': g['PLUS'], }) enter_key = KeyEvent(PRESS, 0, g['ENTER'])