From 36ee23c00d15fe608403fd71aa85244ff9c76a50 Mon Sep 17 00:00:00 2001 From: fiftydinar <65243233+fiftydinar@users.noreply.github.com> Date: Tue, 26 Dec 2023 08:19:17 +0100 Subject: [PATCH] feat(gnome): Fix caps-lock input delay (#630) * feat: Fix caps-lock input delay This is one of the 1st issues which ex-Windows users notice when they switch to Linux. I am one of those users who uses Caps-Lock instead of Shift for uppercase letters. This will get rid of input delay, while the "light indicator" delay is still the same (I mentioned this distinction to not confuse you if you don't "see" any changes). To test, type "Helo" repeatedly using Caps Lock. You will no longer see "HElo" in your texts. Fix took from here: https://forum.manjaro.org/t/caps-lock-behaviour-wayland/79868/8 * Add needed dconf for caps-lock delay fix * Place this in desktop/silverblue, since it is for Gnome only for now --------- Co-authored-by: Kyle Gospodnetich --- .../etc/dconf/db/local.d/02-bazzite-global | 3 + .../usr/share/X11/xkb/symbols/capslock | 85 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 system_files/desktop/silverblue/usr/share/X11/xkb/symbols/capslock diff --git a/system_files/desktop/silverblue/usr/etc/dconf/db/local.d/02-bazzite-global b/system_files/desktop/silverblue/usr/etc/dconf/db/local.d/02-bazzite-global index 67b00e93..b2b9f498 100644 --- a/system_files/desktop/silverblue/usr/etc/dconf/db/local.d/02-bazzite-global +++ b/system_files/desktop/silverblue/usr/etc/dconf/db/local.d/02-bazzite-global @@ -4,6 +4,9 @@ switch-applications-backward = ['Tab'] switch-windows = ['Tab'] switch-windows-backward = ['Tab'] +[org/gnome/desktop/input-sources] +xkb-options=['caps:ctrl_modifier'] + [org/gnome/desktop/peripherals/keyboard] numlock-state=true diff --git a/system_files/desktop/silverblue/usr/share/X11/xkb/symbols/capslock b/system_files/desktop/silverblue/usr/share/X11/xkb/symbols/capslock new file mode 100644 index 00000000..6bb0fbc2 --- /dev/null +++ b/system_files/desktop/silverblue/usr/share/X11/xkb/symbols/capslock @@ -0,0 +1,85 @@ +default hidden partial modifier_keys +xkb_symbols "capslock" { + replace key { [ Caps_Lock ], type[group1] = "ONE_LEVEL" }; + modifier_map Lock { Caps_Lock }; +}; + +hidden partial modifier_keys +xkb_symbols "shiftlock" { + replace key { [ Shift_Lock ], type[group1] = "ONE_LEVEL" }; + modifier_map Shift { Shift_Lock }; +}; + +hidden partial modifier_keys +xkb_symbols "swapescape" { + key { [ Escape ], type[group1] = "ONE_LEVEL" }; + key { [ Caps_Lock ] }; +}; + +hidden partial modifier_keys +xkb_symbols "escape" { + key { [ Escape ], type[group1] = "ONE_LEVEL" }; +}; + +hidden partial modifier_keys +xkb_symbols "escape_shifted_capslock" { + key { + type[Group1] = "TWO_LEVEL", + symbols[Group1] = [ Escape, Caps_Lock ], + actions[Group1] = [ NoAction(), LockMods(modifiers = Lock) ] + }; +}; + +hidden partial modifier_keys +xkb_symbols "escape_shifted_compose" { + key { + type[Group1] = "TWO_LEVEL", + symbols[Group1] = [ Escape, Multi_key ], + actions[Group1] = [ NoAction(), NoAction() ] + }; +}; + +hidden partial modifier_keys +xkb_symbols "backspace" { + key { [ BackSpace ], type[group1] = "ONE_LEVEL" }; +}; + +hidden partial modifier_keys +xkb_symbols "super" { + key { [ Super_L ], type[group1] = "ONE_LEVEL" }; + modifier_map Mod4 { }; +}; + +hidden partial modifier_keys +xkb_symbols "hyper" { + key { [ Hyper_L ], type[group1] = "ONE_LEVEL" }; + modifier_map Mod4 { }; +}; + +hidden partial modifier_keys +xkb_symbols "menu" { + key { [ Menu ], type[group1] = "ONE_LEVEL" }; +}; + +hidden partial modifier_keys +xkb_symbols "numlock" { + key { [ Num_Lock ], type[group1] = "ONE_LEVEL" }; +}; + +// This changes the key to become a Control modifier, +// but it will still produce the Caps_Lock keysym. +hidden partial modifier_keys +xkb_symbols "ctrl_modifier" { + key { + type="ALPHABETIC", + repeat=No, + symbols[Group1]= [ Caps_Lock, Caps_Lock ], + actions[Group1]= [ LockMods(modifiers=Lock), + LockMods(modifiers=Shift+Lock,affect=unlock) ] + }; +}; + +hidden partial modifier_keys +xkb_symbols "none" { + key { [ VoidSymbol ], type[group1] = "ONE_LEVEL" }; +};