Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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
share|improve this question
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
    
Nope...but thank you. –  schultkl Feb 21 '13 at 3:22
    
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. –  schultkl Feb 24 '13 at 3:33
    
Possible other answer: superuser.com/questions/469004/remap-superarrow-key-to-home-end –  schultkl Feb 24 '13 at 3:59

1 Answer 1

up vote 4 down vote accepted

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 and ~/.xkb/symbols/mysymbols files. in the mytypes one put the following:

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 mysybols 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).

now, edit the ~/.xkb/keymap/mykbd file to load the snippets we wrote; in the xkb_types line add "+mytypes(super_level2)", and change the xkb_symbols line to add "+mysymbols(super_arrows_home_end)"

finally, you can load it with xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY

Now, test your left/right keys, they should work as you wanted. Enjoy.

share|improve this answer
    
Thank you Pablo –  schultkl Feb 25 '13 at 7:08

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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