10

How do I map key "Super" so, when combined with Left/Right, it produces keycode Home/End?

My current setxkbmap:

setxkbmap \
  -model pc105 \
  -layout 'us(dvorak-intl),us(alt-intl)' \
  -option \
  -option grp:lctrl_lshift_toggle \
  -option compose:rwin
3
  • 1
    Just FYI, Gedit honors the gtktextview shortcuts: Ctrl+Shift+PageUp and Ctrl+Shift+PageDown to select (or continue to select) all the way to the beginning and respectively the end of the line. I don't think that's what you're after, though... :) – don_crissti Feb 20 '13 at 12:25
  • I have updated this question so more specific to root of what I want...not just for gedit but as broadly as possible within X. – iokevins Feb 24 '13 at 3:33
  • Possible other answer: superuser.com/questions/469004/remap-superarrow-key-to-home-end – iokevins Feb 24 '13 at 3:59
14

You can't do it with just a setkxbmap option, as no default option does what you want.

But you can do it by defining key behaviour at a lower level.

The page http://madduck.net/docs/extending-xkb/ helped me to understand and find a way to do it.

Create a file ~/.xkb/keymap/mykbd where you put the output of setxkbmap, it will be your base keyboard definition; eg:

setxkbmap -print > ~/.xkb/keymap/mykbd

then we will create a ~/.xkb/types/mytypes file and put the following in:

partial
xkb_types "super_level2" {
    Virtual_modifiers Super;
    type "SUPER_LEVEL2" {
        modifiers= Super;
        map[Super]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Super";
    };
};

it defines a type SUPER_LEVEL2 that will allow to easily define symbols sent when a key is pressed with Super.

then, in the ~/.xkb/symbols/mysymbols put the following lines:

partial modifier_keys
xkb_symbols "super_arrows_home_end" {
    key <LEFT>  {
        type[Group1] = "SUPER_LEVEL2",
        symbols[Group1] = [    Left,   Home      ]
    };
    key <RGHT>  {
        type[Group1] = "SUPER_LEVEL2",
        symbols[Group1] = [    Right,  End       ]
    };
};

(note the use of the "SUPER_LEVEL2 type we defined, it means that the second (level 2) symbol on the symbols line is triggered when pressing Super key (instead of Shift key).

Finally, edit the ~/.xkb/keymap/mykbd file to load the snippets we wrote:

  • in the xkb_types line add +mytypes(super_level2) inside the quotes
  • in the xkb_symbols line add +mysymbols(super_arrows_home_end) in the quotes.

Now you can load it with

xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY

Test your left/right keys, they should work as you wanted.

7
  • 2
    Does not work on Ubuntu 16.04. Super key still opens the Dash Home. – Peter Dotchev Dec 30 '16 at 11:07
  • @PeterDotchev Your DE will always come first, so you have to disable or remap the keyboard shortcuts first. – owzim Apr 27 '20 at 18:45
  • 1
    You cannot map a key or combination of keys to a combination of keys. You can only map to another key (symbol of key); or to a string. If you happen to know a string (with escape codes and such) that is what you actually want to produce, then you can map to it. So, you should look at what is produced by shift+home on your current keyboard and map to that. Note however that modern programs that allow defining key shortcuts are likely to bypass that; on the other hand they usually let you redefine shortcuts by just typing whatever combination you like. – Pablo Saratxaga Apr 29 '20 at 12:27
  • 1
    I am getting the an error when following those instructions: syntax error: line 12 of mysymbols last scanned symbol is: End Error: Error interpreting include file "mysymbols" Exiting Abandoning symbols file "(null)" Error: success in unknown Couldn't write keyboard description to :0 I am running Linux Mint 19 (based of Ubuntu 18). I understand that the original answer is quite old, so probably something has changed in the format. Any hints are appreciated. – Alex Fedulov May 22 '20 at 13:00
  • 1
    It seems there is a trailing thing at the end of your file that causes a parsing error; how do you create the file ? you typed it yourself or did a cut and paste ? what if you try with an empty mysymbols file ? – Pablo Saratxaga May 27 '20 at 19:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.