プログラミング

ubuntuでブラウザ使用時にemacsキーバインドを利用する

プログラミング
この記事は約5分で読めます。

カーソル移動などにC-f, C-b, C-p, C-n, C-a, C-eなどを使用するユーザにとってC-fなどのショートカットをとってしまうブラウザでの文字編集作業は大変。 今回はそれを解決するためにキーリマっぱを導入したので、その導入、設定について解説します。

まとめ

  • OSはubuntu 20 (linux)
  • 利用したツールはxkeysnail
  • 利用目的はwordpressなどのブラウザでemacsキーバインドをとられないようにする(正確にはemacsキーバインドのショートカットを変換する)
  • これでWordpressでC-a, C-f, C-bなどのemacsショートカットが使えるようになるはずです。

導入

xkeysnailを利用 (作成者によるQita記事)

$ sudo apt install python3-pip
$ sudo pip3 install xkeysnail
$ which xkeysnail
/usr/local/bin/xkeysnail
$ xkeysnail -h

pythonで作られたツールなのでpipでインストール可能

詳しくはこちらのサイトが詳しかったです。

xmodmapとxcapeで消耗するのはもうやめよう

使い方

$ sudo xkeysnail xkeysnail/example/config.py

これで実行できるがおそらく以下のエラーがでると思われる

Xlib.error.DisplayConnectionError: Can't connect to display ":0": b'No protocol specified\n'

これはpython3-xlibのエラーで下記コマンドで直る

$ xhost +SI:localuser:root

設定

emacsキーバインドにしたい場合基本的にデフォルトのexample/config.pyで問題ない

検索ショートカット

個人的にブラウザでのページ内検索はfindのイメージが強くなってしまっていたため、以下のように設定した。
LSuper-FはWindowsキーボードのWindowsキーに該当

    # Find                                                                                                                                              
    K("LSuper-F"): with_mark(K("F3")),
    K("M-f"): with_mark(K("F3")),

対象アプリケーションの変更

デフォルトのconfig.pyではemacs以外のアプリケーション全てに対して、キーリマップを行う設定になってしまっていたが、これだとシェルなどについても適用されてしまい、「emacs -nw」で編集する際にリマップが行われて「C-x C-s」で保存ができなかったり、シェルを「C-d」で閉じられなくなってしまう。

基本的にリマップしたかったのはブラウザだけだったので、以下のように修正

修正前

// Emacs-like keybindings in non-Emacs applications
define_keymap(lambda wm_class: wm_class not in ("Emacs"),

修正後

// Emacs-like keybindings in non-Emacs applications
define_keymap(lambda wm_class: wm_class in ("Google-Chrome"),

貼り付け

個人的にemacsキーバインドの貼り付けは余り使わないので、C-vはリマップしないように設定
(以下のようにコメントアウト)

     #K("C-v"): with_mark(K("page_down")),   

C-wで「タブを閉じる」

C-wで「タブを閉じる」もブラウザで使用したいショートカットなので、リマップしないように設定
(上記「貼り付け」と同様にコメントアウト)

C-spaceで半角/全角変換

MacにあるC-spaceで半角/全角変換が便利なので利用
以下のようにset_markを上書きするので、これを使用したい人は別のものにする必要がある

   # Mark 
#K("C-space"): set_mark(True),

define_keymap(lambda wm_class: wm_class not in ("nothing"), {
# hankaku/zenkaku switch
K("C-space"): K("GRAVE"),
}

キーの名前の調べ方

バックグラウンドでなくフォアグラウンド実行すると以下のようにどのキーを押しているか教えてくれるので、このようにすると手っ取り早い。
以下のログは「半角/全角」キーのキー名を調べた様子。
複数立ち上げるとおかしな挙動になるので、新しく立ち上げる前に現在動いているプロセスがあればkillする必要がある。

WM_CLASS 'Google-chrome' | active keymaps = [Firefox and Chrome, Emacs-like keys, Emacs-like keys for all]
GRAVE

注意

xkeysnail使用中にキーボードの接続を切断してしまうと、動作が終了してしまう。
自分は2台のPCを切り替えスイッチを用いて、1つのキーボード、マウスを使って使用しているため、この現象が発生した。

現在、対応策があるか検討中。

コメント

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