【keyhac】OSレベルのキー操作を『Emacs化』できるツール

OSレベルでのキーバインドをカスタマイズできるツールにkeyhacというものがあります。今回これをつかってみたので書いていきたいと思います。

keyhacの入手先とhowtoサイト

keyhacの入手先は以下になります。
craftware

keyhacのhowtoサイトは以下になります。
https://crftwr.github.io/keyhac/doc/ja/index.html

Keyhacの概要

keyhacはスクリプト言語 Python を使って、キーボード操作をカスタマイズするアプリケーションになります。アプリケーション自体は地味なのですが、めちゃくちゃ高機能なので詳しくは公式サイトをみていただいたほうがよいとは思います。keyhacを使うと〇〇キーをおしたら〇〇キーをおしたことにする。ということができます。キーボードをカスタマイズするときにはいろいろやり方があるとは思いますが、keyhacはソフトウェアでkeyを制御しているようです。

たまにレジストリをいじるようなソフトウェアもありますが、keyhacの場合はソフトが立ち上がっている時だけ設定したキーバインドが使えるようになっています。keyhacはキーバインドを変えるだけじゃなくて、クリップボードの履歴を表示したり、キーボードでマウスカーソルを動かすこともできます。

このようにめちゃくちゃ高機能なので既存のソフトや設定がいらなくなる可能性もあります。その他のキーボードカスタマイズツールを使っていたり。IMEの設定を変えたりしているのであればkeyhacを試してみてもよいでしょう。

keyhacの使いかた

keyhac.exeを起動するとタスクトレイに常駐化した状態になります。keyhacのアイコンを右クリックするとメニューがあらわれるので、設定を変えたい場合は「設定の編集」をクリックしてコードを編集していきます。
keyhac 設定の編集

keyhacはデフォルトでさまざまなkeybindが書かれているので、メモ帳などでコピーや貼り付けを普通に行おうとすると通常のキーバインドではなくなっているので困る可能性があります。そのためkeyhacが気に入らなかったら、keyhacアイコンを右クリックし『keyhacの終了』を選んでkeyhacを停止させます。keyhacの設定に関してはpythonのコードを読めなくても設定の編集は行うことはできますが、設定内容をみて理解するまでに少し時間を要するでしょう。でもこのソフトは使いこなせるようになるとものすごく便利なソフトであることには間違いありません。(個人的には使わなくもよいとは思いますが)

keyhacのキーバインド紹介

keyhacの設定の編集をクリックするとwindowsの場合はメモ帳が立ち上がります。気に入らないキーバインドはコメントアウトしたり、自分でキーバインドを追加することもできます。設定ファイルの中身をみればわかるのですが、メモ帳(notepad)でのみEmacsのキーバインドで動作するようにコードが書かれています。

# Customize Notepad as Emacs-ish
    # Because the keymap condition of keymap_edit overlaps with keymap_notepad,
    # both these two keymaps are applied in mixed manner.
    if 1:
        keymap_notepad = keymap.defineWindowKeymap( exe_name="notepad.exe", class_name="Edit" )

        # Define Ctrl-X as the first key of multi-stroke keys
        keymap_notepad[ "C-X" ] = keymap.defineMultiStrokeKeymap("C-X")

        keymap_notepad[ "C-P" ] = "Up"                  # Move cursor up
        keymap_notepad[ "C-N" ] = "Down"                # Move cursor down
        keymap_notepad[ "C-F" ] = "Right"               # Move cursor right
        keymap_notepad[ "C-B" ] = "Left"                # Move cursor left
        #keymap_notepad[ "C-A" ] = "Home"                # Move to beginning of line
        #keymap_notepad[ "C-E" ] = "End"                 # Move to end of line

        keymap_global[ "C-A" ] = "Home"                # Move to beginning of line
        keymap_global[ "C-E" ] = "End"                 # Move to end of line
        keymap_global[ "C-Q" ] = "Delete"                 # Delete
        keymap_global[ "C-Y" ] = "C-V"                 # Paste

        keymap_notepad[ "A-F" ] = "C-Right"             # Word right
        keymap_notepad[ "A-B" ] = "C-Left"              # Word left
        keymap_notepad[ "C-V" ] = "PageDown"            # Page down
        keymap_notepad[ "A-V" ] = "PageUp"              # page up
        keymap_notepad[ "A-Comma" ] = "C-Home"          # Beginning of the document
        keymap_notepad[ "A-Period" ] = "C-End"          # End of the document
        keymap_notepad[ "C-X" ][ "C-F" ] = "C-O"        # Open file
        keymap_notepad[ "C-X" ][ "C-S" ] = "C-S"        # Save
        keymap_notepad[ "C-X" ][ "C-W" ] = "A-F","A-A"  # Save as
        keymap_notepad[ "C-X" ][ "U" ] = "C-Z"          # Undo
        keymap_notepad[ "C-S" ] = "C-F"                 # Search
        keymap_notepad[ "A-X" ] = "C-G"                 # Jump to specified line number
        keymap_notepad[ "C-X" ][ "H" ] = "C-A"          # Select all
        keymap_notepad[ "C-W" ] = "C-X"                 # Cut
        keymap_notepad[ "A-W" ] = "C-C"                 # Copy
        keymap_notepad[ "C-Y" ] = "C-V"                 # Paste
        keymap_notepad[ "C-X" ][ "C-C" ] = "A-F4"       # Exit

Emacsのキーバインドに一度なれてしまうとC-AとC-Eが非常に便利であること気づきます。なのでkeymap_global[“C-A”] = “Home”としてWindowsでの操作すべてにこのキーバインドをわりあてました。global以外のkeymapははじめから書かれているので色々自分でいじってみるとよいでしょう。

正直筆者も全機能を把握しきれていない状態ですのでまずは自分で使ってみるのがよいでしょう