Chapter 03

全般的なキーリマップ

AWtnb
AWtnb
2021.12.30に更新

まずは基本設定。

keymap.defineWindowKeymap() を引数無しで実行し、その結果に辞書形式でキーを指定することでグローバルに有効なキー割り当てを定義できます。

config.py
   
   # すべてのアプリ上で有効になるキー
    keymap_global = keymap.defineWindowKeymap()

    # クリップボードメニュー
    keymap_global["LC-LS-X"] = keymap.command_ClipboardList

    # キーマクロの実行/登録/削除
    keymap_global["U0-Z"] = keymap.command_RecordPlay
    keymap_global["U0-0"] = keymap.command_RecordToggle
    keymap_global["U1-0"] = keymap.command_RecordClear

ループで割り当てる方法を学びました。

config.py
    # モディファイアキーとの組み合わせをループで定義
    for mod_mntr in ("", "S-", "C-", "A-", "C-S-", "C-A-", "S-A-", "C-A-S-"):
        for key, value in {
            # カーソル異動
            "H": "Left",
            "J": "Down",
            "K": "Up",
            "L": "Right",
            # Home / End
            "A": "Home",
            "E": "End",
            # Enter
            "Space": "Enter",
        }.items():
            keymap_global[mod_mntr+"U0-"+key] = mod_mntr+value

        for stat in ("D-", "U-"):
            # capslock を徹底的に無視したい
            keymap_global[mod_mntr+stat+"Capslock"] = lambda : None
            # カタカナひらがなローマも無視
            for keycode in ("240", "241", "242", "245", "246"):
                keymap_global[mod_mntr+stat+keycode] = lambda : None

    for key, value in {
        # BackSpace / Delete
        "U0-D": ["Delete"],
        "U0-B": ["Back"],
        "C-U0-D": ["C-Delete"],
        "C-U0-B": ["C-Back"],

        # 1行選択
        "U1-A": ["End", "S-Home"],

        # 再変換
        "U0-R": ["LWin-Slash"],

        # 1字削除
        "LC-H": ["Back"],

        # 下に1行追加
        "U0-I": ["End", "Enter"],

        # escape
        "O-(235)": ["Esc"],
        "U0-X": ["Esc"],

        # ウィンドウ一覧
        "U0-W": ["LCtrl-LAlt-Tab", "U-LAlt"],

        # タスクバーにフォーカス
        "U0-T": ["LWin-T"],

        # 半角英数字で確定
        "U1-N": ["F10", "(243)"],

        # コンテキストメニューの表示
        "U0-C": ["Apps"],
        "S-U0-C": ["S-F10"],

        # リネーム
        "U0-N": ["F2", "Right"],
        "S-U0-N": ["F2", "C-Home"],
        "C-U0-N": ["F2"],

    }.items():
        keymap_global[key] = value

ただ、Python の for ループはスコープを作らないので迂闊に keyvalue といった変数を使用しようとすると思いがけない値が入っていたりするので要注意です。