Keyhacでキーバインドをカスタマイズ 02

in tools
  1. 環境
  2. 補足
  3. CapsLockとCtrlを入れ替えて、CapsLockをソフト起動のホットキーに使用できるようにする
  4. クリップボード監視を無効
  5. 文字選択
  6. 文字削除
  7. exe名とclass名を指定したソフトのみで有効にする
  8. 纏めてexe指定
  9. 纏めてclass指定
  10. 纏めて除外 exe指定
  11. 設定ファイル
  12. 追記

前回と変わったので、違う部分をメインに纏めておきます。

Pythonを使ってカスタマイズしますが、相変わらず、Pythonをよく分かっておりません。
そのうち覚えられたらいいな。

環境

補足

CapsLockとCtrlを入れ替えて、CapsLockをソフト起動のホットキーに使用できるようにする

前はCapsLockだけをCtrlにしましたが、ホットキーとして使えるようにします。
KeySwap for XPなどで、左下のCtrlCapsLockと入れ替えた後、KeyhacでCapsLockを、キーコード255LU0として、ユーザモディファイアキーの定義をします。
自分は、Magic Keyboardを使っているので、有料のAppleK Pro for 10 64bitで変更しています。
さらに、RWinCtrl(RCtrl)に変更しています。

ちなみに、ユーザモディファイアキーは、いつの間にか4つまで定義できるようになっています。

LU0-cでChrome起動

config.py

    # キーの単純な置き換え
    keymap.replaceKey( "Caps", 255 )

    # ユーザモディファイアキーの定義
    keymap.defineModifier( 255, "LU0" )

    # --------------------------------------------------------------------
    # どのウインドウにフォーカスがあっても効くキーマップ
    if 1:
        keymap_global = keymap.defineWindowKeymap()

        # LU0-c : Google Chrome Portable 起動
        keymap_global["LU0-c"] = keymap.ShellExecuteCommand(None, "R:/GoogleChromePortable64/GoogleChromePortable.exe", "", "")

CapsLockがonになった

上記の設定をした後にCapsLockを押してon(点灯)になったときは、Keyhacが動かないソフトのことが多いです。
CapsLockをoffに戻すには、下記のどちらかを試して下さい。

クリップボード監視を無効

Keyhac 1.74にて、クリップボード監視の 有効/無効 の切り替えができるようになりました。
デフォルトは有効ですので、無効にする時に設定します。

    # クリップボード監視を無効
    keymap.clipboard_history.enableHook(False)

文字選択

テキストエディタなどで、キーボードのみで操作している時に便利だと思います。
マウスを使ったほうが早い時もありますが、マウスを持ち替えるのが面倒なときにも。

        # LW- y/u/i/o : カーソル位置からカーソル1回分の文字列選択
        keymap_global["LW-y"] = "S-Left"
        keymap_global["LW-u"] = "S-Down"
        keymap_global["LW-i"] = "S-Up"
        keymap_global["LW-o"] = "S-Right"

        # LW-LC- y/u/i/o : カーソル位置からカーソル5回分の文字列選択
        keymap_global["LW-LC-y"] = ["S-Left"] * 5
        keymap_global["LW-LC-u"] = ["S-Down"] * 5
        keymap_global["LW-LC-i"] = ["S-Up"] * 5
        keymap_global["LW-LC-o"] = ["S-Right"] * 5

文字削除

LW-LC- b/w : 一単語ごとに Back/Delete も割り当てていますが、日本語だと思った通りにいかないことが多いので、5回分の文字削除を追加してみましたが、いい感じです。

        # LW- ;/d : Back/Delete
        keymap_global["LW-Semicolon"] = "Back"
        keymap_global["LW-d"        ] = "Delete"

        # LW-LC- ;/d : 5回分の Back/Delete
        keymap_global["LW-LC-Semicolon"] = ["Back"] * 5
        keymap_global["LW-LC-d"]         = ["Delete"] * 5

exe名とclass名を指定したソフトのみで有効にする

今までは、keymap_globalという名前で設定していました。
今度は、keymap_の後に名前をつけて、exe名とclass名を指定したソフトのみで有効にする設定です。

exe名とclass名のどちらかだけでも動きますが、指定したソフトの一部分だけで有効にしたい場合はclass名を指定しないと、ソフト全体でも効いてしまいます。
ただし、一部分のみで有効にしたいのに、名前が一緒で上手く設定できないこともありますが。

exe名とclass名の調べ方

タスクバーのKeyhacを右クリック > 内部ログONをクリック > タスクバーのKeyhacをクリック > 黒いウィンドウが表示される 指定したいソフト上で何かキーを押すと、黒いウィンドウ上で押したキー情報と、exe名やclass名が表示されます。

Evernoteの検索ボックスで#を入力すると、半角スペース tag: と文字入力

tag:と打ってからタグ検索するのは面倒ですので、少し楽になると思います。
半角スペースが入っているので、2つ以上のタグを連続で検索するときも少し楽だと思います。

1.どこかでIMEの関数を定義しておく

IMEの切り替えは他でも使用しているので、作っておきます。

    # IME切り替え
    def ime_on():
        keymap.wnd.setImeStatus(1)

    def ime_off():
        keymap.wnd.setImeStatus(0)

2.Evernoteのexeとclassを指定して、検索で文字入力するときにIME offにしてからタグ検索

    # Evernote
    if 1:
        keymap_evernote_search = keymap.defineWindowKeymap(exe_name="Evernote.exe", class_name="ENAutoCompleteEditCtrl")

        # RS-3 : 検索でIME offして文字入力 : 半角スペース tag:
        def evernote_search_tag():
            ime_off()
            keymap.InputTextCommand(" tag:")()
        keymap_evernote_search["RS-3"] = evernote_search_tag

纏めてexe指定

NeeViewやNeeViewSで、gg押すと最初に移動

    # 纏めてexe指定 gg
    def is_gexe_target(window):
        if window.getProcessName() in ("NeeView.exe",
                                       "NeeViewS.exe"):
            return True
        return False

    if 1:
        keymap_gexe = keymap.defineWindowKeymap(check_func=is_gexe_target)

        # g : マルチストローク1段
        # gg: Home
        keymap_gexe["g"] = keymap.defineMultiStrokeKeymap("g")
        keymap_gexe["g"]["g"] = "Home"

纏めてclass指定

指定したclass名の場所で、gg押すと最初に移動

    # 纏めてclass指定 gg
    def is_gclass_target(window):
        if window.getClassName() in ("TFenrirListView",    # FenrirFs
                                     "TF811202_MassiGra_Main",    # MassiGra
                                     "SUMATRA_PDF_FRAME"):    # Sumatra PDF
            return True
        return False

    if 1:
        keymap_gclass = keymap.defineWindowKeymap(check_func=is_gclass_target)

        # g : マルチストローク1段
        # gg: Home
        keymap_gclass["g"] = keymap.defineMultiStrokeKeymap("g")
        keymap_gclass["g"]["g"] = "Home"

纏めて除外 exe指定

纏めてexe指定と違う部分は、TrueFalseを逆にしているだけです。

日本語入力中によく使う半角記号を打ちやすく

日本語入力中にIME offにして、半角記号打つのが面倒に感じることがたまにありました。
全角記号を殆ど使わないので、IME offにしなくてもよく使う半角記号を打てるようになるので、少し楽になるかなと。
記号の後に日本語打つことが多いなら、IME onにする処理を入れるとさらに楽になりそうです。

    # 纏めて除外 exe指定
    def is_exclude_exe_target(window):
        if window.getProcessName() in ("Nox.exe"):
            return False
        return True

    if 1:
        keymap_exclude_exe = keymap.defineWindowKeymap(check_func=is_exclude_exe_target)

        # IME offして半角記号入力 日本語入力中によく使う半角記号を打ちやすく
        # 短い間隔でShift2回押しても問題ない環境 全角記号あまり使わない用
        # Boostnoteの検索ウィンドウで効かない
        # ` : `
        def symbol_1byte_backquote():
            ime_off()
            keymap.InputTextCommand("`")()
        keymap_exclude_exe["BackQuote"] = symbol_1byte_backquote

        # RS- 1/3 : !/#
        def symbol_1byte_exclamation():
            ime_off()
            keymap.InputTextCommand("!")()
        keymap_exclude_exe["RS-1"] = symbol_1byte_exclamation

        def symbol_1byte_number():
            ime_off()
            keymap.InputTextCommand("#")()
        keymap_global["RS-3"] = symbol_1byte_number

        # LS- 8/9/0 : */(/)
        def symbol_1byte_asterisk():
            ime_off()
            keymap.InputTextCommand("*")()
        keymap_exclude_exe["LS-8"] = symbol_1byte_asterisk

        def symbol_1byte_left_parenthesis():
            ime_off()
            keymap.InputTextCommand("(")()
        keymap_exclude_exe["LS-9"] = symbol_1byte_left_parenthesis

        def symbol_1byte_right_parenthesis():
            ime_off()
            keymap.InputTextCommand(")")()
        keymap_exclude_exe["LS-0"] = symbol_1byte_right_parenthesis

        # LS-- : _
        def symbol_1byte_underscore():
            ime_off()
            keymap.InputTextCommand("_")()
        keymap_exclude_exe["LS-Minus"] = symbol_1byte_underscore

        # LS-. : >
        def symbol_1byte_greater_than():
            ime_off()
            keymap.InputTextCommand(">")()
        keymap_exclude_exe["LS-Period"] = symbol_1byte_greater_than

        # LS-/ : ?
        def symbol_1byte_question_mark():
            ime_off()
            keymap.InputTextCommand("?")()
        keymap_exclude_exe["LS-Slash"] = symbol_1byte_question_mark

        # LW-- : - 半角スペース
        def symbol_1byte_minus_space():
            ime_off()
            keymap.InputTextCommand("- ")()
        keymap_exclude_exe["LW-Minus"] = symbol_1byte_minus_space

設定ファイル

config.py

追記

2017-12-28

2018-02-18

2018-03-18

2018-04-19

2018-04-22

2018-11-30

2019-04-26

2019-05-03