アプリごとに柔軟な設定ができるキーボードユーティリティkeyhac

関連記事

クリップボード履歴付きキーボードユーティリティkeyhac

keyhacはpythonファイルにより設定可能なキーボードユーティリティです。

XKeymacsなどより設定が煩雑ですが、クリップボード履歴やコマンド実行など単なるキーボードユーティリティに留まらない拡張性の高さが魅力。

migemoによりローマ字入力のままクリップボードの日本語検索ができるのも嬉しいところ。

とは言えmigemo+クリップボード管理ソフトと言う枠ではeclipの方が高機能ですが、常駐ソフトを減らしたい人にとっては強力なメイン機能以外にも魅力的な面があります。

migemoが動かない場合

Windows10 64bit環境で

OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません

と表示されてmigemoが動かなかったのですが、keyhacと同じフォルダーに32bit版のmigemo.dllを設置したら動きました。

keyhac/lib/フォルダーの中にもmigemo.dllが同梱されているので盲点でしたが、同じ症状の人がいたら試してみてください。

設定

import sys
import os
import datetime

import pyauto
from keyhac import *


def configure(keymap):

    keymap.setFont("Migu 1M", 14)

    global_exclude_target = [
        "bash.exe",
        "emacs.exe",
        "gvim.exe",
        "xyzzy.exe",
        "VirtualBox.exe",
        "putty.exe",
        "poderosa.exe",
        "explorer.exe",
    ]

    keymap_global = keymap.defineWindowKeymap(
        check_func=lambda window: not is_chrome(window)
        and not window.getProcessName() in global_exclude_target
    )

    # for global
    keymap_global["29"] = keymap.command_ClipboardList  # 無変換
    keymap_global["A-B"] = "C-Left"  # Word left
    keymap_global["A-S-Comma"] = "C-Home"  # Beginning of the document
    keymap_global["A-F"] = "C-Right"  # Word right
    keymap_global["A-S-Period"] = "C-End"  # End of the document
    keymap_global["A-V"] = "PageUp"  # page up
    keymap_global["A-W"] = "C-Insert"
    keymap_global["A-Y"] = keymap.command_ClipboardList
    keymap_global["C-A"] = "Home"  # Move to beginning of line
    keymap_global["C-B"] = "Left"  # Move cursor left
    keymap_global["C-D"] = "Delete"
    keymap_global["C-E"] = "End"  # Move to end of line
    keymap_global["C-F"] = "Right"  # Move cursor right
    keymap_global["C-G"] = "Esc"
    keymap_global["C-H"] = "Back"
    keymap_global["C-M"] = "Enter"
    keymap_global["C-N"] = "Down"  # Move cursor down
    keymap_global["C-OpenBracket"] = "Esc"
    keymap_global["C-P"] = "Up"  # Move cursor up
    keymap_global["C-Q"] = keymap.defineMultiStrokeKeymap("C-Q")
    keymap_global["C-Slash"] = "C-z"
    keymap_global["C-BackSlash"] = "C-z"
    keymap_global["C-V"] = "PageDown"  # Page down
    keymap_global["C-Y"] = "S-Insert"

    # 全てのキーをクオート
    for key in [chr(ord("A") + i) for i in range(26)]:
        keymap_global["C-Q"]["A-" + key] = "A-" + key
        keymap_global["C-Q"]["C-" + key] = "C-" + key

    # for Vivaldi
    def is_chrome(window):
        if window.getClassName() in ("Chrome_WidgetWin_1"):
            return True
        return False

    keymap_chrome = keymap.defineWindowKeymap(check_func=is_chrome)
    keymap_chrome["29"] = keymap.command_ClipboardList  # 無変換
    keymap_chrome["A-Y"] = keymap.command_ClipboardList
    keymap_chrome["C-M"] = "Enter"
    keymap_chrome["C-N"] = "Down"  # Move cursor down
    keymap_chrome["C-H"] = "Back"
    keymap_chrome["C-G"] = "Esc"
    keymap_chrome["C-P"] = "Up"  # Move cursor up
    keymap_chrome["C-Q"] = keymap.defineMultiStrokeKeymap("C-Q")
    # 全てのキーをクオート
    for key in [chr(ord("A") + i) for i in range(26)]:
        keymap_global["C-Q"]["A-" + key] = "A-" + key
        keymap_chrome["C-Q"]["C-" + key] = "C-" + key

VivaldiではcVimを使って概ね満足しているのですが、Enterキーの遠さやカーソルキーの上下を使わされることにストレスが溜まってきたので最低限のEmacsキーバインドを取り入れています。

ちなみにVivaldiは実行ファイル名vivaldi.exeだとkeyhacがうまく判別してくれないのでクラス名で指定。

Vivaldi以外のアプリケーションでは大々的にEmacsキーバインドを採用していますが、Explorerのインクリメンタルサーチ的な挙動はなかなか賢いので除外することに。

自分で追加した項目が分かりやすいように、サンプル設定ファイルのメモ帳の項目からコピペしたものはコメントを残してあります。

XKeymacsのC-q(quoted-insert)のように、C-qの後にキーバインドを実行することで元々のショートカットを呼び出すようにしているのでバッティングしても心配ありません。

無変換キーはShiftキーなどに割り当てても面白いと思いますが、長年クリップボード履歴管理ソフトに割り当てているのでkeyhacでもそのように設定しました。

Windows10は標準でWindows+Vキーによるクリップボード履歴を装備していますが、この設定だとカーソルキーを使わずに履歴を貼り付けることができるので常駐ソフトを一つ増やす価値は十分にあるかと。

関連記事

SNSでシェアする