Configure Caps Lock as AltGr and Arrows like in vim
Solution 1
1. add a new XKB partial file
sudo vi /usr/share/X11/xkb/symbols/altgr_vim
with this content:
partial keypad_keys
xkb_symbols "altgr-vim" {
# replace Caps with AltGr
key <CAPS> { [ ISO_Level3_Shift ] };
# Add vim cursor keys to be accessed with AltGr
key <AB02> { [ x, X, Delete, Delete ] };
key <AC02> { [ s, S, KP_Enter, KP_Enter ] };
key <AC03> { [ d, D, Next, Next ] };
key <AC04> { [ f, F, BackSpace, BackSpace ] };
key <AC06> { [ h, H , Left, Left ] };
key <AC07> { [ j, J, Down, Down ] };
key <AC08> { [ k, K, Up, Up ] };
key <AC09> { [ l, L, Right, Right ] };
key <AD07> { [ u, U, Prior, Prior ] };
key <AE03> { [ 3, section, Home, Home ] };
key <AE04> { [ 4, dollar, End, End ] };
};
2. include the partial in your language file
for example for german it is /usr/share/X11/xkb/symbols/de
(where /de
is your language) add this inside the first block (xkb_symbols "basic"
):
include "altgr_vim(altgr-vim)"
Note: This part has to be repeated after every distribution update
3. reload the window session
Press ALT+F2, enter "r" to reload the gnome session or just log out and in again. Now the new key compositions will be available
4. solve some problems
-
Some applications don't accept the settings, for example:
sublime
which can be replaced byatom
. -
Some applications need extra settings, e.g. in
yakuake
the key-bindings are set to "XFree 4", if you set them to "Linux" or "Solaris", then the XKB settings works there also:
remaining problems:
- some apps still don't accept those settings
- after an upgrade, where the symbols file is updated, you have to repeat step 2
Solution 2
in order to get AltGr+h, j,k,l or any other key without any application like Autokey to peform ←↓↑→ you can customize your keyboard layout found in /usr/share/X11/xkb/symbols/. At the moment I use the german layout "de". So first of all I would:
1- copy the standard layout
cp /usr/share/X11/xkb/symbols/de /usr/share/X11/xkb/symbols/de.bak
2- open your layout with your text editor of preference (here: gedit)
sudo gedit /usr/share/X11/xkb/symbols/de
there you gonna see something like:
key <AD03> { [ e, E, EuroSign, EuroSign ] };
key <AD06> { [ z, Z, leftarrow, yen ] };
key <AD11> { [udiaeresis, Udiaeresis, dead_diaeresis, dead_abovering ] };
....
....
key <AD12> { [ plus, asterisk, dead_tilde, macron ] };
key <AC02> { [ s, S, ssharp, U017F ] };
key <AC06> { [ h, H, Left, Left ] };
key <AC07> { [ j, J, Down, Down ] };
key <AC08> { [ k, K, Up, Up ] };
key <AC09> { [ l, L, Right, Right ] };
....
....
key <AB10> { [ minus, underscore, endash, emdash ] };
key <LSGT> { [ less, greater, bar, NoSymbol ] };
As you can see, AB, AC, AD, AE represents the row, and the number represents its position on the keyboard (there are some special keys, like the less/greater key, which can be remapped to other keys as well..
There you will not find all the keyboard, just the ones that is diferent that the layout the keyboard is based on. The german one is based on "latin(type4)" as you can see on the beggining of the file:
include "latin(type4)"
Then you just need to change according to your needs. It works like:
key { [ key, key+shift, key+AltGr, key+Shift+AltGr ] };
(its also possible the add 5th level modifiers, or more)
if you want to check the changes without restart; (changing "de" for your layout... here is a list with possible layouts )
setxkbmap -layout de
The arrows are labelled just like "Left, Right, Down, Up", as expeceted. Here is a good list of possible values.
here is a example of my custom layout. (but not in use at the moment)
Then, you would need to remap Capslock and AltGr, or did it work already following the question you posted??
If you also want to keep a "normal" german layout, you can do the changes to another layout you dont normally use, (or change the "german no dead keys" which you can find further down at the same "de" file...)
Source: link to a very comprehensive explanation of xbk and custom layouts.
link to a similar question with a good answer.
Related videos on Youtube
Comments
-
rubo77 over 1 year
1. How do I globally map Caps Lock to AltGr?
I don't need CapsLock and rather would like to have an easy access AltGr Key there
2. I want to map all movement keys to
vim
-like positions- AltGr+F = Backspace
- AltGr+H = LeftArr
- AltGr+J = DownArr
- AltGr+L = RightArr
- AltGr+K = UpArr
- AltGr+U = PgUp
- AltGr+D = PgDown
- AltGr+S = Enter
- AltGr+3 = Pos1
- AltGr+$ = End
- AltGr+X = Del
So I can easily walk through my code without moving the hand away from the 10-Finger-Position (like in
vim
editor)I found this answer: How do I remap the caps lock key to the backspace key?
suggesting usingxmodmap -e "keycode [code] = [new key]"
see: http://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap
But I cannot figure out, how to add this to a combination of for example AltGr+J
Another start would be to set the "Alternative Character Key" in
unity-control-center
->Keyboard->Shortcuts->Typing asCaps Lock
Update:
I found some solutions (see below) but all of them don't work in all applications, I guess it is a global setting called "XFree 4" that is used by some apps.1. How do I set the key bindings for XFree 4 also?
2. How do I make the changes upgrade-save?
-
Admin about 7 yearsI don't have an AltGr key, but you might find this similar question provides some clues.
-
quixotic about 7 years
xmodmap
is deprecated and discouraged. it still works in X11 environments but will not work in Wayland and other X11 replacements. using XKB-based solutions instead is highly encouraged. -
quixotic about 7 yearsin modern Ubuntu and derivatives, you can set XKB layouts and options in
/etc/default/keyboard
once these changes are made. seeman 5 keyboard
for details. i recommend adding new variants & options rather than changing existing ones. -
rubo77 about 7 yearsSo I guess, I have to add a new custom keyboard layout then? askubuntu.com/questions/482678/…
-
quixotic about 7 yearsadding a custom layout is one way, though you can probably get away with just making a custom option. in GNOME or Unity you may need to disable settings-daemon's keyboard plugin for your xmodmap customization to work, but if you make a new system-wide XKB layout/variant/option you can set them in
/etc/default/keyboard
. -
rubo77 about 7 yearsThis seems quite a lot of work, but will it solve the problem, that the new key combinations dont work in some apps?
-
quixotic about 7 yearsi strongly recommend using the XKB option
lv3:caps_switch
instead of changing the<CAPS>
definition as you show. see/usr/share/X11/xkb/symbols/level3
(where that option is defined). -
rubo77 about 7 years@quixotic: can you add a new answer with the configurations that would be needed? I could need a good complete answer here for the bounty ;)
-
mowwwalker about 6 yearsThis worked perfectly for me. Just a heads up though, might want to change "section" to "numbersign" for shift+3