関連記事
クリップボード履歴付きキーボードユーティリティ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キーによるクリップボード履歴を装備していますが、この設定だとカーソルキーを使わずに履歴を貼り付けることができるので常駐ソフトを一つ増やす価値は十分にあるかと。