将Super + hjkl映射到X下的箭头键


23

我正在尝试映射:

Super+h -> Left
Super+j -> Down
Super+k -> Up
Super+l -> Right

这个想法是我不想离开经常使用箭头键的主行,所以我将使用Super修饰符+ hjkl来模拟X下的箭头键。有什么方法可以做到这一点?

我尝试过的一件事是使用此配置的xbindkeys + xte:

"xte 'keydown Up' 'keyup Up'"
  Mod4+k

"xte 'keydown Down' 'keyup Down'"
  Mod4+j

"xte 'keydown Left' 'keyup Left'"
  Mod4+h

"xte 'keydown Right' 'keyup Right'"
  Mod4+l

但是在我按下键和注意到任何结果之间似乎有很大的延迟,并且在大多数情况下根本没有任何反应。

有没有更优雅的方法可以立即有效地起作用呢?


2
发现这样做非常适合执行以下操作:code.google.com/p/autokey
Tom Power,

什么是操作系统?我也认为使用Control-Super或类似的组合可能会更好。
harrymc

Answers:


15

Capslock + HJKL至箭头键

  1. 创建〜/ .Xmodmap并将其放入其中:

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. 添加LeftDownUpRight作为第三项的H,J,K,L键在条目/usr/share/X11/xkb/symbols/us(第一部分):

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
    
  3. xmodmap ~/.Xmodmap

备选方案:将Capslock用作Control,并将Control_L + HJKL用作箭头键

这是我当前的设置。我未将Control_L映射为控制键,并将其用作特殊修饰符(ISO_Level3_Shift),该修饰符/usr/share/X11/xkb/symbols/us与hjkl映射文件中的第三个条目相对应。

  1. 我像以前一样修改了/ usr / share / X11 / xkb / symbols / us的第一个节:

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
    
  2. 然后将其放在我的〜/ .Xmodmap文件中:

    clear Control
    keycode 66 = Control_L
    add Control = Control_L
    add Control = Control_R
    keycode 37 = ISO_Level3_Shift
    

keycode 66是大写锁定,keycode 37并且处于左控制

  1. 运行xmodmap〜/ .Xmodmap

通过此设置,我可以将箭头键与Control_L + hjkl一起使用,也可以跳过带有Control_L + caps + hl的单词。简单!


1
这也可以在Arch Linux上使用,但不能在xmodmap命令之后立即使用。重新启动后,几乎可以正常工作。只是不能用CTRL + SHIFT + CAPS + hjkl来做CTRL + SHIFT +箭头,通常是用于单词的筛选。任何想法如何做到这一点?
koss 2012年

嗯,您是对的,最好的办法是将“左”,“下”,“上”,“右”再次添加到另一列中。这不会使突出显示起作用,但会像平常一样跳过单词。我将不得不对此进行更多研究。
威廉·卡萨林

这对我来说足够好了。我唯一的问题是,它在Chrome中不起作用,这很麻烦。
心情2012年

您可能需要清除其中的缓存xkb文件,/var/lib/xkb/*.xkm以使更改/usr/share/X11/xkb/symbols/us生效。
2015年

1
这适用于Ubuntu 14.04。我必须制作xmodmap /home/alex/.Xmodmap一个启动应用程序,并从/ var / lib / xkb中删除所有* .xkm文件。警告:我在最后一步中删除了一个Ubuntu VM,然后我的键盘根本无法工作,因此请小心并准备好备份:-) Shift + Control + Caps + hjkl选择文本在Firefox和雷鸟,但在一些它没有(铬例如)应用
亚历山大Rechsteiner

8

/ usr / share / X11 / xkb / symbols / us中的上述更改对我不起作用:
加载新键盘说明时出错

但是,在研究了许多相互矛盾的方法之后,我提出了一个解决方案,该方案将结合hjkl的左超级键(左Windows键/ Mod4)映射到Left,Down,Up,Right。这是系统范围的设置。

(前右此块添加到首节结束};)您的在/ usr /共享/ X11 / XKB /符号/我们

//hjkl
//AltGr + hjkl
key <AC06> {        [         h, H, Left            ]       };
key <AC07> {        [         j, J, Down            ]       };
key <AC08> {        [         k, K, Up              ]       };
key <AC09> {        [         l, L, Right           ]       };
//Super_L -> Alt Gr
key <LWIN> { [ ISO_Level3_Shift ] }; //see below!

第一条关键线将AltGr + h映射到Left。
最后一个键行使左超级键的行为类似于AltGr。
干得好:

Super + h->左
Super + j-> Down
Super + k-> Up
Super + l-> Right

为了应用新设置,请运行setxkbmap或重新启动系统。

重要说明:显然,这会禁用超级键,因此,如果您实际上将超级键用于其他目的(即,将窗口移至另一个工作区),则不应像这样重新映射它。
为了使用Caps Lock而不是Super,请使用以下命令更改最后一个按键行:

key <CAPS> { [ ISO_Level3_Shift ] };

这是我的配置文件的完整第一部分:

default
partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {

    name[Group1]= "English (US)";

    // Alphanumeric section
    key <TLDE> {        [     grave,    asciitilde      ]       };
    key <AE01> {        [         1,    exclam          ]       };
    key <AE02> {        [         2,    at              ]       };
    key <AE03> {        [         3,    numbersign      ]       };
    key <AE04> {        [         4,    dollar          ]       };
    key <AE05> {        [         5,    percent         ]       };
    key <AE06> {        [         6,    asciicircum     ]       };
    key <AE07> {        [         7,    ampersand       ]       };
    key <AE08> {        [         8,    asterisk        ]       };
    key <AE09> {        [         9,    parenleft       ]       };
    key <AE10> {        [         0,    parenright      ]       };
    key <AE11> {        [     minus,    underscore      ]       };
    key <AE12> {        [     equal,    plus            ]       };

    key <AD01> {        [         q,    Q               ]       };
    key <AD02> {        [         w,    W               ]       };
    key <AD03> {        [         e,    E               ]       };
    key <AD04> {        [         r,    R               ]       };
    key <AD05> {        [         t,    T               ]       };
    key <AD06> {        [         y,    Y               ]       };
    key <AD07> {        [         u,    U               ]       };
    key <AD08> {        [         i,    I               ]       };
    key <AD09> {        [         o,    O               ]       };
    key <AD10> {        [         p,    P               ]       };
    key <AD11> {        [ bracketleft,  braceleft       ]       };
    key <AD12> {        [ bracketright, braceright      ]       };

    key <AC01> {        [         a,    A               ]       };
    key <AC02> {        [         s,    S               ]       };
    key <AC03> {        [         d,    D               ]       };
    key <AC04> {        [         f,    F               ]       };
    key <AC05> {        [         g,    G               ]       };
    key <AC06> {        [         h,    H               ]       };
    key <AC07> {        [         j,    J               ]       };
    key <AC08> {        [         k,    K               ]       };
    key <AC09> {        [         l,    L               ]       };
    key <AC10> {        [ semicolon,    colon           ]       };
    key <AC11> {        [ apostrophe,   quotedbl        ]       };

    key <AB01> {        [         z,    Z               ]       };
    key <AB02> {        [         x,    X               ]       };
    key <AB03> {        [         c,    C               ]       };
    key <AB04> {        [         v,    V               ]       };
    key <AB05> {        [         b,    B               ]       };
    key <AB06> {        [         n,    N               ]       };
    key <AB07> {        [         m,    M               ]       };
    key <AB08> {        [     comma,    less            ]       };
    key <AB09> {        [    period,    greater         ]       };
    key <AB10> {        [     slash,    question        ]       };

    key <BKSL> {        [ backslash,         bar        ]       };
    // End alphanumeric section

    //hjkl
    //AltGr + hjkl
    key <AC06> {        [         h, H, Left            ]       };
    key <AC07> {        [         j, J, Down            ]       };
    key <AC08> {        [         k, K, Up              ]       };
    key <AC09> {        [         l, L, Right           ]       };
    //Super_L -> Alt Gr
    key <LWIN> { [ ISO_Level3_Shift ] };


};

我希望这可以帮助某人...

如果有人有更好的解决方案,请告诉我。

编辑:在Fedora上测试。


我已经自己完成了这种方法,但是它不适用于所有应用程序!xev清楚地说Left,它适用于大多数应用程序。但是某些程序仅对“真实”箭头键做出反应,例如sublime文本编辑器等。
塔拉许2012年

1
按照Redhat 6.2所述工作。我的手腕酸痛,谢谢!
BuckFilledPlatypus

谢谢basic6,它可以按照以下步骤在Ubuntu上运行。在Ubuntu上(在Ubuntu 14.04上测试),没有重新编译.xkm文件的问题,因此/ usr / share / X11 / xkb / symbols / *中的更改无效。为了改善它,从/ var / lib / xkb中删除所有* .xkm文件并重新启动系统。之后,将重新编译* .xkm文件。有关更多信息,请查看:ubuntuforums.org/showthread.php?t=1589744
MPtr

3

我自己还没有尝试过,但是xkb可能可以满足您的要求http://en.wikipedia.org/wiki/X_keyboard_extension

我在Ubuntu中有一个名为x11-xkb-utils的软件包,听起来很有希望:)


xkb不能与超级键一起用作修饰符。xkb仅适用于(按顺序)未修改,Shift,AltGr,Shift-AltGr。也可以分配更高级别的修饰符(例如在Bill Casarin的CapsLock示例中),但是它们不是标准键盘上的。将Super映射到更高的修饰符会将其从Super中移除(如basic6的示例)。
dotancohen 2012年

3

不需要sudo(源自此处),经过修改以使其与结合使用时也能正常工作Alt

创建file以下内容:

! remove Caps Lock
clear lock
! remove Lock = Caps_Lock
! remove Shift = Caps_Lock
keycode 66 = NoSymbol NoSymbol
keycode 66 = ISO_Level3_Shift

keysym h = h H NoSymbol NoSymbol Left Left
keysym j = j J NoSymbol NoSymbol Down Down
keysym k = k K NoSymbol NoSymbol Up Up
keysym l = l L NoSymbol NoSymbol Right Right

! some sugar
keysym o = o O NoSymbol NoSymbol BackSpace NoSymbol
keysym i = i I NoSymbol NoSymbol Delete NoSymbol`

调用

xmodmap file

它映射AltGr到,Caps而不是Super,因此您可能宁愿设置

keycode 66 = Super_L

(或watever可以xev帮助您击中Super

糖部分将退格键和Del作为i和o的特殊分配,您可以忽略它,或者将其视为增加或自行扩展/调整的奖励或动力;)

PS:如果进行实验,请通过调用重置“默认”映射

setxkbmap

这对我没有用,但让我走上了正确的道路。这个工作对我来说:github.com/sblask/dotfiles/commit/...
塞巴斯蒂安·布拉斯克

2

最后,看来我找到了适用于所有修饰符(Ctrl +,Shift +,Ctrl + Shift +)和Sublime Text 2的解决方案。

所有的荣耀都归功于我最近在http://www.spinics.net/lists/xorg/msg35931.html上找到的这个gem配置。它描述了ijkl箭头,但可以轻松修改以进行hjkl导航。您需要更新您的键盘布局文件/ usr / share / X11 / xkb / symbols / *(个人而言,我使用/ usr / share / X11 / xkb / symbols / typo,我将其包含在Xkb的键盘布局中选项“ misc:typo”,因此适用于任何键盘布局)。配置假定修改器键发送ISO_Level3_Shift(有很多方法可以将Super或Alt绑定到ISO_Level3_Shift)。

键定义应该看起来像(如果要修改../symbols/typo,请使用NoSymbol):

key <AC07> {    
    type="MOD5_NAV",
    [NoSymbol, NoSymbol, Down, Down],   
    actions[Group1] = [NoAction(), NoAction(), RedirectKey(key=<DOWN>, clearmods=ISO_Level3_Shift)]
};

另外,您还需要编辑/ usr / share / X11 / types / basic并声明类型“ MOD5_NAV”:

type "MOD5_NAV" {
    modifiers = Shift+Mod5;
    map[None] = level1;
    map[Shift] = level2;
    map[Mod5] = level3;
    map[Mod5+Shift] = level3;
    level_name[Level1] = "Base";
    level_name[Level2] = "Caps";
    level_name[Level3] = "Arrows";
};

至于Sublime Text 2,该解决方案更加棘手和棘手。如上所述,Sublime Text 2直接从设备读取键控代码,因此忽略了Xkb的某些功能(带箭头的xkb技巧无效)。有一个几乎被遗弃但仍在工作的项目Gizmo Daemon http://gizmod.sourceforge.net/。经过一番苦苦挣扎之后,我成功地在Debian Wheezy上编译了它。然后,我创建了这个gizmod脚本并将其放置到〜/ .gizmod / modules.d / 010-KeyboardViMode-SublimeText2.py http://pastebin.com/HNQgGEwD

PS在Linux上,我有时会错过KeyboardRemap4MacBook。OS X软件如此强大的功能,只需很少的复选框即可启用此类导航(以及许多其他功能)。


1

我是Debian / Ubuntu上的HHKB用户,该解决方案适用于我。

用于Left Ctrl激活密钥。

$ vi ~/.Xmodmap
keycode 37 = ISO_Level3_Shift

将此代码添加到/ usr / share / X11 / xkb / symbols / us// End alphanumeric section中的基本块下

//hjkl
//Ctrl + hjkl
key <AC06> {    [   h,  H,  Left    ]   };
key <AC07> {    [   j,  J,  Down    ]   };
key <AC08> {    [   k,  K,  Up      ]   };
key <AC09> {    [   l,  L,  Right   ]   };

现在,你应该能够使用左,下,上,右按键Ctrl+ hjkl

顺便说一句,如果您在Firefox上使用过pentadactyl,则可以将此代码添加到〜/ .pentadactylrc

map -modes=i,c <C-down> <down>
map -modes=i,c <C-up> <up>


1

这个在Arch上为我工作。它将Caps + hjkl重映射到箭头键,将Shift + Caps重映射到Caps。

将以下内容放入~/.Xmodmap

! Remap caps lock to special modifier, but still allow shift+caps to 
toggle caps lock
clear lock
clear mod5
add lock = Mode_switch
keycode 66 = Mode_switch Caps_Lock NoSymbol NoSymbol
keycode 43 = h H Left Left
keycode 44 = j J Down Down
keycode 45 = k K Up Up
keycode 46 = l L Right Right

重新启动或设置 xmodmap ~/.Xmodmap

如果出现类似以下错误:

X Error of failed request:  BadValue (integer parameter out of range for operation)

这可能意味着您需要清除除mod5(当前设置为Mode_switch)以外的任何内容。使用来检查当前的修饰符映射xmodmap

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.