Xの下の矢印キーへのSuper + hjklのマッピング


23

私はマップしようとしています:

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

Xの下でグローバルに。アイデアは、矢印キーを頻繁に使用するホーム行を離れたくないので、Xの下で矢印キーをエミュレートするためにスーパー修飾子+ hjklを使用します。これを行う方法はありますか?

私が試したものの1つは、この構成を使用した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
トム・パワー

OSとは何ですか?また、Control-Superまたはそのようなコンボを使用した方が良いかもしれません。
harrymc

回答:


15

Capslock + HJKLから矢印キー

  1. 〜/ .Xmodmapを作成し、これを内部に配置します。

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. 追加LeftDownUpRight3番目の項目のように、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を制御キーとしてマップ解除/usr/share/X11/xkb/symbols/usし、hjklマッピングのファイルの3番目のエントリに対応する特別な修飾子(ISO_Level3_Shift)として使用します。

  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 66capslockであり、keycode 37コントロールのままです

  1. xmodmap〜/ .Xmodmapを実行します

この設定では、Control_L + caps + hlで単語をスキップするだけでなく、Control_L + hjklで矢印キーを使用できます。簡単!


1
これはArch Linuxでも機能しますが、xmodmapコマンドの直後には機能しません。再起動後、ほぼ完全に動作します。CTRL + SHIFT + CAPS + hjklでCTRL + SHIFT + arrowを実行することはできません。通常は単語を選択するためです。これを行う方法はありますか?
コス

うーん、私ができる最善のことは、左、下、上、右を別の列に再度追加することです。これは強調表示を機能させませんが、通常のように単語をスキップします。これをもっと調べなければなりません。
ウィリアムカサリン

これで十分です。私が抱えている唯一の問題は、Chromeでは機能しないことであり、迷惑です。
気分

/var/lib/xkb/*.xkm変更を有効にするには、キャッシュされたxkbファイルをクリアする必要がある場合があります/usr/share/X11/xkb/symbols/us
ソロ

1
これはUbuntu 14.04で機能します。xmodmap /home/alex/.Xmodmapスタートアップアプリケーションを作成し、/ var / lib / xkbからすべての* .xkmファイルを削除する必要がありました。警告:この最後の手順を実行するUbuntu VMを1つ破棄したため、キーボードがまったく機能しなくなるため、注意してバックアップの準備をしてください:-) Shift + Control + Caps + hjklを使用してテキストを選択すると、Firefoxとサンダーバードが、それはしません(例えばクロム)一部のアプリケーションでは
アレクサンダーRechsteiner

8

/ 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のように動作させます。
どうぞ:

Super + h->左
Super + j->下
Super + k->上
Super + l->右

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

重要:これは明らかにスーパーキーを無効にするため、実際にスーパーキーを他の目的(ウィンドウを別のワークスペースに移動するなど)で使用している場合は、このように再マッピングしないでください。
Superの代わりに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でテスト済み。


私はこのアプローチを自分で行いましたが、すべてのアプリケーションで機能しているわけではありません!xevはっきり言ってLeft、それはほとんどのアプリケーションで動作します。しかし、崇高なテキストエディタや他のプログラムのように、一部のプログラムは「実際の」矢印キーにのみ反応します
タラッシュ

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?

3

私はこれを自分で試したことはありませんが、xkbはhttp://en.wikipedia.org/wiki/X_keyboard_extensionが望むことをするようです。

私は、有望に聞こえるx11-xkb-utilsというUbuntuのパッケージを持っています:)


xkbは、スーパーキーを修飾子として使用できません。xkbは、未変更、Shift、AltGr、Shift-AltGrでのみ(順番に)動作します。高レベルの修飾子を割り当てることもできます(Bill CasarinのCapsLockの例など)が、標準のキーボードにはありません。Superをより高い修飾子にマッピングすると、Superとして機能しなくなります(basic6の例のように)。
-dotancohen

3

いいえ須藤から誘導体化に必要な、ここでは、と組み合わせたとき、それはまた、動作させるために変更されません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れるので、むしろCapsSuper

keycode 66 = Super_L

(または打撃でxevあなたに与えるSuper

砂糖の部分は、バックスペースとDelをiとoへの特別な割り当てとして提供します。それを省略するか、自分で拡張/調整するためのボーナスまたは動機として見ることができます;)

PS:試してみる場合は、呼び出して「デフォルト」マッピングをリセットします

setxkbmap

これは私にはうまくいきませんでしたが、私は正しい道を歩みました。これは私の作品:github.com/sblask/dotfiles/commit/...
セバスチャンBlask

2

最後に、すべての修飾子(Ctrl +、Shift +、Ctrl + Shift +)およびSublime Text 2で機能するソリューションを見つけたようです。

すべての栄光は、最近見つけたこのgem構成http://www.spinics.net/lists/xorg/msg35931.htmlに行きます。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トリックは効果がありません)。ギズモデーモン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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.