Currently running Antergos Linux. The set-up I would like to have is the following.
- Pressing and releasing CAPS sends ESC.
- The combinations of CAPS and any of CAPS+h, CAPS+j, CAPS+k, CAPS+l send Left, Down, Up, and Right respectively. Upon release of CAPS, ESC is not sent.
Of course, the goal here is to get some VIM-style bindings in programs which do not have them.
It seems that xcape would be useful here:
https://github.com/alols/xcape
But the examples do not get me quite as far as I would like.
Any help is appreciated.
EDIT: I came across a very useful answer here:
https://unix.stackexchange.com/a/163675/267068
Can anybody help me figure how to modify the procedure so that I get CAPS+hjkl as needed. Could I use Hyper_L, instead of the Super_L in that answer, and then map Hyper_L + hjkl to left, down, up, right?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
I wanted to do the exact same thing, and after some search and experiment, finally got it working.
Solution 1
See solution 2 below, which is potentially better.
-
Mapping Caps_lock + hjkl:
Follow this answer and add the config. You should add to the
usfile if you are using the US keyboard layout and skip the other keybindings that you’re not interested in. Then runsetxkbmap -layout us. -
Caps_lock as Esc:
Run
xcape -e 'ISO_Level3_Shift=Escape'. You can add this line to your/etc/profileso you don’t have to run it manually after reboot.
Solution 2 (probably better)
I was happy with solution 1, until I realized I couldn’t use the key bindings in IntelliJ, which is a big bummer. Eventually I figured out that I could just use xmodmap and xcape to do the job, while still being able to use them in IntelliJ!
-
Mapping Caps_lock + hjkl:
Create a file (say
~/.xmodmap) with the following content:keycode 66 = Mode_switch keysym h = h H Left keysym l = l L Right keysym k = k K Up keysym j = j J Down keysym u = u U Prior keysym i = i I Home keysym o = o O End keysym p = p P Next
Feel free to skip the last 4 lines. I pasted them because they might be useful to you as well. In fact I’m really hoping to get the caps_lock enhancement working in Linux.
Then, run
xmodmap ~/.xmodmap. -
Caps_lock as Esc:
Run
xcape -e 'Mode_switch=Escape'. -
Optional:
To avoid manually applying the keybindings, put the above 2 commands into your
/etc/profile.
Method 2
I was having trouble getting this to work properly with /etc/profile, so expanding on the answer from @matrinica I was able to achieve success (on ubuntu/gnome) with the following method:
Step 0 : install xclip and xcape
sudo apt install xclip sudo apt install xcape
Step 1 : create ~/.xmodmap
Copy the following text:
keycode 66 = Mode_switch keysym h = h H Left keysym l = l L Right keysym k = k K Up keysym j = j J Down
Create file with contents:
touch ~/.xmodmap xclip -o > ~/.xmodmap
Step 2 : create script
Copy the following text:
xmodmap ~/.xmodmap xcape -e 'Mode_switch=Escape'
Create file with contents:
touch ~/xmodmap.sh xclip -o > ~/xmodmap.sh
Make file executable:
chmod +x ~/xmodmap.sh
Step 3 : create autostart entry
Copy the following text:
[Desktop Entry] Type=Application Exec=sh -c "$HOME/xmodmap.sh" Hidden=false X-GNOME-Autostart-enabled=true Name=xmodmap Comment=xmodmap script
Create file with contents:
touch ~/.config/autostart/xmodmap.deskop xclip -o > ~/.config/autostart/xmodmap.deskop
Note:
This method does not work with Wayland and so is not futureproof. For Wayland compatible methods of achieving similar results please consult:
https://askubuntu.com/a/898462
https://wiki.archlinux.org/index.php/Keyboard_input
https://realh.co.uk/wp/linux-keymap-hacking/
If you are able to come up with a clean method which is Wayland compatible please post it here.
Method 3
I use 3rd layer symbols and assign arrows to letters hjkl
Install gnome-tweaks tool
Inside gnome-tweaks go to Additional Layout Options and choose Caps Look as a key to choose the 3rd level.
Then open your terminal and go to /usr/share/X11/xkb/symbols/ There are all keyboard layouts store on your computer
Make a backup of your layout
cp us us_old
Modify file as root
sudo nano us
Third values in arrays are your keys:
key <AC01> {[a,A,Home]};
key <AC02> {[s,S,BackSpace]};
key <AC03> {[d,D,Delete]};
key <AC04> {[f,F,End]};
key <AC05> {[g,G]};
key <AC06> {[h,H,Left]};
key <AC07> {[j,J,Down]};
key <AC08> {[k,K,Up]};
key <AC09> {[l,L,Right]};
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0