macOSでもctrl + hでBackspaceにしている macOSでctrl+hでbackspaceにする - 人生シーケンスブレイク が、UbuntuでもBackspaceにしたくなった。
xkbでの実現方法
現在のxkbmapの設定を確認
$ setxkbmap -print
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us(dvorak)+us:2+inet(evdev)" };
xkb_geometry { include "pc(pc105)" };
};
今のxkb設定を書き出す
$ xkbcomp $DISPLAY default.xkb
$ cp default.xkb ctrlh2backspace.xkb
xkbファイル内の編集
先程コピーしたctrlh2backspace.xkbファイルを編集する。
グループの確認
xkb_symbols "pc+us(dvorak)+us:2+inet(evdev)" {
name[group1]="English (Dvorak)";
name[group2]="English (US)";
複数の配列を利用している場合には、groupも複数記述されている。
自分はDvorakユーザーなのでgroup1のみ編集する。
型の追加
既存の ALPHABETIC
にctrl時のlevelを追加した型を追加する。
type "ALPHABETIC" {
modifiers= Shift+Lock;
map[Shift]= Level2;
map[Lock]= Level2;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
};
type "ALPHABETIC_LEVEL3" {
modifiers= Shift+Lock+Control;
map[Shift]= Level2;
map[Lock]= Level2;
map[Control]= Level3;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
level_name[Level3]= "Control";
};
LControl
とすると、各アプリデフォルトのctrl+h(Chromeでいうとctrl+hで履歴画面表示など)をオーバーライドできないので Control
にした方が良かった。
ctrl + h時にBackspaceにする
各キーのlevelごとに、出力するキーを記述している箇所があるのでlevel3としてBackspaceをマッピングする。
key <AC06> {
type= "ALPHABETIC",
symbols[Group1]= [ d, D ],
symbols[Group2]= [ h, H ]
};
key <AC07> {
type= "ALPHABETIC_LEVEL3",
symbols[Group1]= [ h, H, BackSpace ],
symbols[Group2]= [ j, J ]
};
デフォルトのxkbとの差分
❯ diff ./default.xkb ctrlh2backspace.xkb
320a321,329
> type "ALPHABETIC_LEVEL3" {
> modifiers= Shift+Lock+Control;
> map[Shift]= Level2;
> map[Lock]= Level2;
> map[Control]= Level3;
> level_name[Level1]= "Base";
> level_name[Level2]= "Caps";
> level_name[Level3]= "Control";
> };
1309,1310c1318,1319
< type= "ALPHABETIC",
< symbols[Group1]= [ h, H ],
---
> type= "ALPHABETIC_LEVEL3",
> symbols[Group1]= [ h, H, BackSpace ],
適用する
$ xkbcomp ctrlh2backspace.xkb $DISPLAY
をすると即時反映される。
参考情報
丁寧に書いてあって非常に助かりました 🙏🏻
新たな悩みごと
ctrl+hをBackspaseとしたことで、Japanese(mozc)で日本語入力中にctrl+hしても後退してくれなくなった。
Backspace
した際には従来通り動作してくれるが、上手く認識しない様子。
こちらの解決方法も模索中。。。