マクロ – Super+hjklをXの下の矢印キーにマッピングする

keymap macros x-windows

地図を作ろうとしています

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

アイデアは、矢印キーを使用するためにそんなに頻繁にホームローから離れたくないので、スーパーモディファイア+ 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

しかし、私がキーを押してから結果に気づくまでの間に大きな遅れがあるようで、ほとんどの場合は何も起こりません

実際には遅延がなくてもうまくいく、もっとエレガントな方法はないのでしょうか?

  24  William Casarin  2010-01-15


ベストアンサー

キャップロック+ HJKLを矢印キーに

  1. ~/.Xmodmapを作成して、その中に入れます

    clear Lock
    keycode 66 = ISO_Level3_Shift
    
  2. Left, Down, Up, Rightを第3項目として、/usr/share/X11/xkb/symbols/us(第1節)のh,j,k,lのキーエントリに追加します

    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_L + HJKLを矢印キーに

これが私の現在の設定です。Control_Lをコントロールキーとしてアンマッピングし、それを特別な修飾子(ISO_Level3_Shift)として使用していますが、これはhjklマッピングのための/usr/share/X11/xkb/symbols/usファイルの3番目のエントリに対応しています

  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. run xmodmap ~/.Xmodmap

この設定では、Control_L + hjklで矢印キーを使ったり、Control_L + caps + hlで単語をスキップしたりすることができます。簡単です

15  William Casarin  2010-02-22


usr/share/X11/xkb/symbols/usの上記の変更は、私の場合は動作しません。 新しいキーボードの説明をロードする際にエラーが発生しました

しかし、多くの矛盾したハウツーに目を通した後、私は解決策を思いつきました。それは、左のスーパーキー (左のウィンドウズキー / Mod4) を hjkl と組み合わせて左、下、上、右にマップするというものです。これはシステム全体の設定です

このブロックを /usr/share/X11/xkb/symbols/us の最初のセクションの最後(};の直前)に追加します

//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 を左にマップします。 最後のキーラインは左のスーパーキーをAltGrのように動作させます。 さあ、どうぞ

スーパー+h-> 左スーパー+j-> 下スーパー+k-> 上スーパー+l-> 右

新しい設定を適用するには、setxkbmapを実行するか、システムを再起動してください

重要: これは明らかにスーパーキーを無効にしているので、実際にスーパーキーを他の目的(例えばウィンドウを別のワークスペースに移動させるなど)で使用している場合は、このようにリマップすべきではありません。 スーパーの代わりに Caps Lock を使用するには、最後のキー行を次のように変更します

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でテストしました

9  basic6  2012-02-02


私自身はこれを試していませんが、xkbはあなたが望むものをするかもしれないように見えます http://en.wikipedia.org/wiki/X_keyboard_extension

私はUbuntuにx11-xkb-utilsというパッケージを持っています。)

3  gacrux  2010-01-15


sudoは必要ありません。hereから派生したもので、Altと組み合わせても動作するように修正しました

以下の内容のfilewを作成します

! 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`

invoke

xmodmap file

AltGrSuperではなくCapsにマップしているので、むしろ設定した方がいいかもしれません

keycode 66 = Super_L

(またはワタクシxevが打つとSuperが与えてくれる)

砂糖の部分は、バックスペースとデルをiとoに特別に割り当てているので、それを省略してもいいし、ボーナスとして見てもいいし、自分で広げたり調整したりするモチベーションにもなるかもしれません。)

PS: 試しにやってみたら、起動してデフォルトのマッピングをリセットしてみてください

setxkbmap

3  Zeitvertreib  2016-05-14


ようやくすべての修飾子(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を使用しています。設定では、修飾キーがISO_Level3_Shiftを送信することを前提としています(ISO_Level3_ShiftにSuperやAltをバインドする方法はいろいろあります)

キーの定義は次のようになります ( ../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 に配置しました

P.S. LinuxではKeyboardRemap4MacBookが恋しくなることがあります。このOS Xのソフトウェアは、いくつかのチェックボックスだけでこのようなナビゲーション(と他の多くのもの)を可能にすることができます

2  sgtpep  2012-12-24


私は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 + h, j, k, lで左キー、下キー、上キー、右キーが使えるようになるはずです

ちなみに、Firefoxでpentadactylを使ったことがある人は、~/.pentadactylrcにこのコードを追加します

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

1  Chu-Saing Lai  2013-03-08


autokeyを見つけたのですが、マッピングにはこちらの方が良いようです

私はリンクkey binding – Emulate Keypad on Laptop – Ask Ubuntuがあなたを助けるかもしれないと信じています

1  Chu-Saing Lai  2013-04-12


これは 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 で確認してください

1  Huon Imberger  2018-01-24


タイトルとURLをコピーしました