†Linuxなんて大キライ†

AutoKeyによるキーカスタマイズ

作成開始日 2021.06.18
最終更新日 2024.04.16

AutoKeyはWindowsのAutoHotKeyと類似のツール。キーアサインの変更と言うより、キーコンビネーションに特定の機能を割り付けるもの。たとえば、Ctrl+H→Backspace、Ctrl+M→Enterのような割り付けが可能。xmodmapのように、単純にキーのアサインを切り替えるツールでは、こうしたことはできない(擬似的に実現できないこともないが…)。特徴は以下の通り;

機能はスクリプトとして記述される

たとえば、BackeSpaceは「keyboard.send_keys("<backspace>")」という1行で記述可能。無論、より複雑なスクリプトを記述することができる。試してはいないが、2ストロークキーのエミュレーションなんかも出来るんじゃないかと思う。

キー変更は特定アプリに対してのみ有効にできる

グローバルにも設定可能だが、VirtualBoxのゲストOSにまで影響が及び、V-OS/2のキー入力が異常動作をする(AutoKeyでの設定とも異なった異常状態になる)。なので、VirtualBoxを使用する以上、実質的に特定アプリとの紐付けが必須となる。

設定は少し面倒

実際の作業と言うより、考え方に慣れるのがちと面倒臭い。たとえば、AutoKeyのキー設定はフォルダで管理するのが一般的。なぜ、キー設定にフォルダが必要?と言う異和感は拭えないのだが、これはキー設定をグループ化するため。適用するアプリケーションごとにキー設定フォルダを作成すれば、アプリケーションによって異なったキー設定群を使用することができるし、使用環境によってキー設定を切り替えることも楽。

設定例(Xfce@Debian8の場合)

@インストール
まずは、パッケージマネージャからAutoKey(gtk+版)をインストールして起動する。Xfceの場合、メニューの「アクセサリ」項目の先頭に登録されるようだ。

A前準備
デフォルトで登録されているctrl+fやctrl+f7等を削除しておく。これらはグローバルに設定されていて、けっこう邪魔になる。画面左側の一覧でhotkeyが登録されている項目を選んで、右側のHotkeyの項目を[クリア]しておく。クリアのあとにツールバーにある[Save]をクリックして、変更を有効にする。

Bフォルダの作成
ツールバーの[新規|Folder]で新しいファイルを作成する。保存ダイアログが開くので、適当な場所(自分のルートディレクトリ?)に適当な名称をつけて作成する。

C新たなキーの作成
AutoKey上の作成された新規フォルダを選択した状態で[新規|Script]を選bび、スクリプトに適当な名称を付ける(ここでは仮に「BackSpace」とする)。

Dキーの登録
「BackSpace」を選択した状態で、ウィンドウの右パンのHotkeyの[Set]ボタンを押す。 次に、表示されたダイアログの[Press to set]を押し、登録したいキーコンビネーションを押す(例えばCtrl+h)(大文字小文字センシティブ?)。なお、最初にhのみを押して、後から[ctrl]ボタンを押してもctrl+hとなるようだ

E機能の登録
右パンの「#Enter script code」の下の行に、機能のスクリプトを記述する。たとえば、BackSpaceならば;

  #Enter script code
  keyboard.send_keys("<backspace>")

F対応アプリの登録
まず、事前に対象としたいアプリのウィンドウを開いておく。次に、AutoKeyの[Window Filter]の[Set]ボタンを押す。で、出て来たダイアログで[Detect Window Properties]ボタンを押す。更に、事前に立ち上げたアプリのウィンドウをクリックする。最後に、「Window class」を確認して[OK]ボタンを押す。けっこう面倒臭い。

G設定を有効にする
ツールバーの[Save]ボタンを押す。Saveしないと設定は有効にならない。

HAutoKeyを最小化する
[File|Close window]で最小化すれば邪魔にならない。パネル右端の通知領域にAutoKeyのアイコンが表示される

ctrl+mをEnterに割り付けた場合の問題点

AutoKeyとIME(Anthy)のキー設定がカブることによって、予期しない動作をすることがある。たとえば、AutoKeyでctrl+mをEnterに割り付けると、ctrl+mで「変換の確定」と「改行」の両方が実行されてしまう。そもそも、IME側でctrl+mを変換確定キーとして登録しているので、ctrl+mを押した段階で変換は確定し、さらにAutoKeyによってそれがEnterに置換されて改行してしまう。フックのタイミングの問題なのだが、原理的に防ぎようがない。

対処方法としては、IME側の設定を変更して、変換確定からctrl+mを外すと、想定通りの動作をしてくれる。ただし、それはAutoKeyが有効なアプリに限定される。それ以外のアプリでは、単にIMEのctrl+mキー設定が無効になるだけ。これはこれで不便なので、どうしたものかと…使用するアプリを片っ端から登録するのは非現実的だし、前述のようにグローバル設定にしてしまうと弊害が大きい。Anthyはデフォ設定でCtrl+Jでも確定可能なので、こちらを使うと言う選択肢もあるが…

ctrl+mをEnterに割り付けた場合の問題点(2)(2024.04.16)

その後、Ctrl+mに関しては別の問題が発生した。上記の設定をしても、Ctrl+mでの確定が不可能になった。それどころから、Anthyの変換確定キーとしてCtrl+mを登録しても、まったく機能しなくなってしまった。が、AutoKeyを終了すればCtrl+mで確定可能になる。これは今までは発生しなかった問題で、多分システムをリブートした後に発症している。現象的には、AutoKeyが生成したEnterのキーコードを、Anthyが受け取れなくなった、という事だと思うのだが…

とりあえず弥縫策;leafpad/mousepadでは、Enter/Ctrl+mの両方を出力すればよい。

#Enter script code
keyboard.send_keys("<enter>")
keyboard.send_keys("<ctrl>+m")
leafpad/mousepadには、ctrl+mに割り付けられている機能はない。したがって、Anthyが起動していない状態では、このコマンドは単に[Enter]として機能する。また、Anthyが起動している状況では[Enter]が無効化され、[Ctrl+m]=[確定]として機能する。


【Linuxなんて大キライ目次】 【ホーム】