Skip to content

Instantly share code, notes, and snippets.

@r4ai
Last active May 13, 2023 12:35
Show Gist options
  • Save r4ai/3e6de7a694ad23e4d40c3187823d817f to your computer and use it in GitHub Desktop.
Save r4ai/3e6de7a694ad23e4d40c3187823d817f to your computer and use it in GitHub Desktop.
keyhacの設定ファイル
import json
import re
import os
# MEMO
# CapsLock → F21
# F21 → 132
def configure(keymap):
# *---jsonファイルの読み込み
with open('keymaps.json', encoding="utf-8") as f:
raw_data = f.read()
raw_data_comments_ignored = re.sub(r'/\*[\s\S]*?\*/|//.*', '', raw_data)
df :dict = json.loads(raw_data_comments_ignored)
modifiers :dict = df["modifier"]
hotkeys :dict = df["hotkeys"]
# *---Modifierの設定
for key, value in modifiers.items():
keymap.defineModifier(key, value)
# *---hotkeyの設定
keymap_global = keymap.defineWindowKeymap()
def blind(key :str, value :str) -> None:
default_modifiers_list = (
"", "S-", "C-", "C-S-", "A-", "A-S-", "A-C-", "A-C-S-", "W-",
"W-S-", "W-C-", "W-C-S-", "W-A-", "W-A-S-", "W-A-C-", "W-A-C-S-"
)
for modifier in default_modifiers_list:
keymap_global[modifier + key] = modifier + value
def send(key: str, value: str) -> None:
keymap_global[key] = value
for genre in hotkeys.keys():
for key, value in hotkeys[genre].items():
if genre == "IME":
send(key, value)
else:
blind(key, value)
{
"modifier": {
/*
User0 ~ User3 まで登録可能
U0- ~ U3- で呼び出し
*/
"132": "User0" // CapsLock(F21) → U0-
},
"hotkeys": {
"IME": {
"U0-Space": "(243)"
},
"cursorMove": {
"U0-k": "Up",
"U0-j": "Down",
"U0-h": "Left",
"U0-l": "Right",
"U0-n": "Ctrl-Left",
"U0-m": "Ctrl-Right",
"U0-Comma": "Home",
"U0-Period": "End",
"U0-i": "PageUp",
"U0-u": "PageDown"
},
"controlKey": {
"U0-C": "Ctrl-C",
"U0-V": "Ctrl-V",
"U0-F": "Ctrl-F"
},
"functionKey": {
"U0-1": "F1",
"U0-2": "F2",
"U0-3": "F3",
"U0-4": "F4",
"U0-5": "F5",
"U0-6": "F6",
"U0-7": "F7",
"U0-8": "F8",
"U0-9": "F9",
"U0-0": "F10",
"U0-Minus": "F11",
"U0-Plus": "F12"
},
"mac-command": {
"U0-Tab": "Ctrl-Tab",
"Ctrl-Tab": "Alt-Tab"
},
"others": {
"U0-Back": "Delete"
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment