menu
書いてる野郎
orebike@gmail.com
キーバインドを色々イジる。
Mac には Karabiner とか Windows には Autohotkey 等のほぼなんでも出来る系のキーカスタムツールがあったが、Linuxデスクトップには長らく無くて xmodmap をゴニョゴニョやったりしてたのだが、決定版的なツールがいつのまにか出来てたのでそれを使う
GitHub - mooz/xkeysnail: Yet another keyboard remapping tool for X environment
この Xkeysnail というツールでかなり自由な設定ができる。 なかなかやりにくかったワンショットモデファイアも設定できるし、Emacs的な2ストロークも設定できる。
出来ない点として、2019-08-07 現在では自由なコンビネーションキーが設定できない。 つまり自由なキーを2つ同時押しで何かするということができない。同時押し用のモデファイアキーと通常の入力のキーは明確に区別されている。
他にも全く独自のモディファイアキーを作ることができない。なので既存の操作に完全にバッティングしないレイヤー的操作を実装できない。
低レイヤーでキーを変換するので問題が起きにくいがその代わり root 権限が必要になる。
Linux Mint 19.1 にインストールするには公式の手順以外にもいくつか設定が必要になる。
多分こんな感じ
$ sudo apt install python3-pip $ sudo apt install python3-dev $ sudo pip3 install setuptools $ sudo pip3 install xkeysnail
設定ファイルを書く。~/.config/xkeysnail/config.py
な感じに書く。
つまりこいつは Python のスクリプトとして設定ファイルを書く。なのでやりたいほうだいできるということ。
自分は今こんな感じにしている
import re from xkeysnail.transform import * # モデファイアキーの設定 define_modmap({ # Capslock を Ctrl として使う Key.CAPSLOCK: Key.LEFT_CTRL }) # ワンショットモデファイアキーの設定 define_multipurpose_modmap({ # セミコロン(右小指)単押しでセミコロン、組み合わせると右Windowsキー(物理キーとしては無い) に設定する Key.SEMICOLON: [Key.SEMICOLON, Key.RIGHT_META] }) # キーマッピング None 指定なのでグローバルの設定 define_keymap(None, { K("C-h"): K("BACKSPACE"), # Ctrl + h が常に BS になるようにする # 右Win + r で Ctrl + F12 を出す。 # C-F12 Fcitx で IME切り替えのキーバインドに割り当ててある # 右Win は↑でワンショットモデファイアにしてあるので実際にはセミコロン + r で発動する K("RSuper-r"): K("C-F12"), # 一連のホームポジション維持カーソル移動 K("RSuper-a"): K("HOME"), K("RSuper-g"): K("END"), K("RSuper-e"): K("UP"), K("RSuper-s"): K("LEFT"), K("RSuper-f"): K("RIGHT"), K("RSuper-d"): K("DOWN"), # esc のショートカットをキー1個分近づける K("C-p"): K("ESC"), # 右小指の働きを抑止するためエンターを人差し指担当にする K("C-m"): K("ENTER"), # タッチパッドの中ボタンが暴走気味なので何も動作しないようにする K("BTN_MIDDLE"): lambda: None })
このへんのキーの名前は https://github.com/mooz/xkeysnail/blob/master/xkeysnail/key.py このへんを見ればよい。
この設定ファイルをこのように起動すればよい
$ sudo xkeysnail ~/.config/xkeysnail/config.py