結論から
背景
あまり
この
要件
JIS配列の
1. HHKB風キーマップ・キーバインド
US配列に
CapsLock
→Ctrl
- 私たちは
A
の隣の 特等席を CapsLock
に渡して やれる ほど 寛大ではないので。
- 私たちは
Alt
、Esc
、バッククォートの 位置を 変更 Alt
は最下列両端、 Esc
は(JIS配列で いう) 全角 / 半角
の位置、 バッククォートは 最上列右端。
- 「裏」キーバインド
( Fn
)- HHKBに
おいて 修飾キー ( Fn
)押下時に 利用できる (矢印キー等)の キーバインドの こと。 これを 通常の キーボードで エミュレートするには、 JIS配列に おける 無変換
や かな/カナ
のような余剰キーに 修飾キーの 機能を 割り振る 作業が 必要。 - (以下では
Thinkpadに 搭載の Fn
キーと 区別する ため、 この 修飾キーを Mod
と呼称する)
- HHKBに
- 最下段に
Mod
とSuper
- これは
公式仕様に よらない 私の カスタム。 HHKB の 最下段に ある 左右の Metaキーを どう 使うかに 対応している。
- これは
2. US配列
私はEnter
3. 非ラテン文字の 入力
さらに、
解決策
最終的な 変更の 一覧
key | remap / role |
---|---|
CapsLock | Ctrl |
左右Ctrl | Alt |
Delete | バッククォート |
かな/カナ | Super |
無変換 | Mod |
半角/全角 | Esc |
Super + Space | 言語配列切り替え |
Mod + misc | 色々 |
ディレクトリ構成
├── compat│ └── mycompat├── keymap│ └── hhkb├── symbols│ ├── mysymbol1│ └── mysymbol2└── types └── mytypes
設定ファイルと その 説明
全体をkeymap/hhkb
に
xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete+mytypes(hhkb)" }; xkb_compat { include "complete+mycompat(hhkb)" }; xkb_symbols { include "pc+us+ru:2+hr:3+inet(evdev)+group(win_space_toggle)+ctrl(nocaps)+jp(hztg_escape)+ctrl(rctrl_ralt)+ctrl(swap_lalt_lctl)+mysymbol1(hhkb)+mysymbol2(mhkn)" }; xkb_geometry { include "pc(pc105)" };};
今回影響するのはxkb_types
、xkb_compat
、xkb_symbols
の行。xkb_symbols
の行で
項目 | 備考 |
---|---|
us+ru:2+hr:3 | 利用したい言語配列を略号で記載する。n 個目(n>=2)の言語は+<lang>:n のように記載するのがミソ3。 |
group(win_space_toggle) | 上で記載した配列間をsuper + space キーで切り替える。 |
ctrl(nocaps) | CapsLock →Ctrl 。 |
jp(hztg_escape) | 不要な半角/全角 キーをEsc にマップ。 |
ctrl(rctrl_ralt) , ctrl(swap_lalt_lctl) | 左右それぞれのAlt とCtrl を入れ替え |
おわかりかとMod
compat
まずcompat。無変換
をMod5
xkb_compatibility "hhkb" { interpret Muhenkan+AnyOfOrNone(all) { action = SetMods(modifiers=Mod5); };};
types
次にMUHENKAN
とShift
Mod5
を
xkb_types "hhkb" { type "MUHENKAN" { modifiers = Shift+Mod5; map[Shift] = Level2; map[Mod5] = Level3; map[Shift+Mod5] = Level3; level_name[Level1] = "Base"; level_name[Level2] = "Shift"; level_name[Level3] = "Muhenkan"; };};
symbols
最後に
下手なus
, ru
, hr
)に、[]
の中の
xkb_symbols "hhkb" { # Hiragana-Katakana => Super key <HKTG> { [ Super_R ] }; key <HENK> { [ Super_R ] };
# JIS => US key <AE13> { [ backslash, bar ] }; key <DELE> { [ grave, asciitilde ] }; key <AC12> { [ Return ] }; # modifier_map Super { <HKTG>, <HENK> }};
xkb_symbols "mhkn" { key <AD07> { type[group1]= "MUHENKAN", type[group2]= "MUHENKAN", type[group3]= "FOUR_LEVEL_SEMIALPHABETIC", symbols[Group1]= [ u, U, Prior ], symbols[Group2]= [ Cyrillic_ghe, Cyrillic_GHE, Prior ], symbols[Group3]= [ u, U, downarrow, uparrow ] }; key <AD08> { type[group1]= "MUHENKAN", type[group2]= "MUHENKAN", type[group3]= "FOUR_LEVEL_SEMIALPHABETIC", symbols[Group1]= [ i, I, Up ], symbols[Group2]= [ Cyrillic_sha, Cyrillic_SHA, Up ], symbols[Group3]= [ i, I, rightarrow, idotless ] }; key <AD09> { type[group1]= "MUHENKAN", type[group2]= "MUHENKAN", type[group3]= "FOUR_LEVEL_ALPHABETIC", symbols[Group1]= [ o, O, Next ], symbols[Group2]= [ Cyrillic_shcha, Cyrillic_SHCHA, Next ], symbols[Group3]= [ o, O, oslash, Oslash ] }; key <AC07> { type[group1]= "MUHENKAN", type[group2]= "MUHENKAN", type[group3]= "FOUR_LEVEL_SEMIALPHABETIC", symbols[Group1]= [ j, J, Left ], symbols[Group2]= [ Cyrillic_o, Cyrillic_O, Left ], symbols[Group3]= [ j, J, dead_hook, dead_horn ] }; key <AC08> { type[group1]= "MUHENKAN", type[group2]= "MUHENKAN", type[group3]= "FOUR_LEVEL_SEMIALPHABETIC", symbols[Group1]= [ k, K, Down ], symbols[Group2]= [ Cyrillic_el, Cyrillic_EL, Down ], symbols[Group3]= [ k, K, lstroke, ampersand ] }; key <AC09> { type[group1]= "MUHENKAN", type[group2]= "MUHENKAN", type[group3]= "FOUR_LEVEL_ALPHABETIC", symbols[Group1]= [ l, L, Right ], symbols[Group2]= [ Cyrillic_de, Cyrillic_DE, Right ], symbols[Group3]= [ l, L, lstroke, Lstroke ] }; key <AB07> { type[group1]= "MUHENKAN", type[group2]= "MUHENKAN", type[group3]= "FOUR_LEVEL_SEMIALPHABETIC", symbols[Group1]= [ m, M, Home ], symbols[Group2]= [ Cyrillic_softsign, Cyrillic_SOFTSIGN, Home ], symbols[Group3]= [ m, M, section, masculine ] }; key <AB08> { type[group1]= "MUHENKAN", type[group2]= "MUHENKAN", type[group3]= "FOUR_LEVEL", symbols[Group1]= [ comma, less, Menu ], symbols[Group2]= [ Cyrillic_be, Cyrillic_BE, Menu ], symbols[Group3]= [ comma, semicolon, less, multiply ] }; key <AB09> { type[group1]= "MUHENKAN", type[group2]= "MUHENKAN", type[group3]= "FOUR_LEVEL", symbols[Group1]= [ period, greater, End ], symbols[Group2]= [ Cyrillic_yu, Cyrillic_YU, End ], symbols[Group3]= [ period, colon, greater, division ] };};
設定の 適用
以上の~/.config/xkb/
~/.xkb/
とか
type:keyboard { xkb_file ~/.xkb/keymap/hhkb}
おわりに
いかがでしたか?
書いた
この 設定ファイルが どのように 編み出されたかに 関する 付記
このxkbcomp $DISPLAY output.xkb
が