-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathfix-keymap.py
executable file
·86 lines (76 loc) · 2.31 KB
/
fix-keymap.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/python3
import re
import json
from argparse import ArgumentParser, FileType
def replace_key(key):
REPLACE_MAP = {
"": "plus",
"|": "bar",
"[": "bracket-left",
"]": "bracket-right",
"{": "brace-left",
"}": "brace-right",
":": "colon",
",": "comma",
"=": "equal",
"!": "exclam",
"`": "grave",
">": "greater",
"<": "less",
"-": "minus",
".": "period",
"?": "question",
";": "semicolon",
"'": "single-quote",
"/": "slash",
"~": "tilde",
"_": "underscore",
"\\": "backslash",
'"': "double-quote",
"pageup": "page-up",
"pagedown": "page-down",
"capslock": "caps-lock",
"scrolllock": "scroll-lock",
"printscreen": "print-screen",
"keypad enter": "num-enter",
"left gui": "left-windows",
}
REPLACE_MOUSE = {
"l": "left-button",
"r": "right-button",
"m": "middle-button",
"x": "x-button1",
"y": "x-button2",
}
if key in REPLACE_MAP:
return REPLACE_MAP[key]
elif "click" in key:
num_click, click_type = re.match("(\d*)([lrmxy]?)click", key).group(1, 2)
num_click = int(num_click) if num_click != "" else 1
click_type = click_type if click_type != "" else "l"
return ("" if num_click == 1 else str(num_click)) + REPLACE_MOUSE[click_type]
else:
return key
def main():
parser = ArgumentParser(
description="Converts the keymap into something pymdown can handle"
)
parser.add_argument(
"--version", help="The version of Lite XL this keymap is meant for"
)
parser.add_argument(
"input", type=FileType("r", encoding="utf-8"), help="Input keymap JSON file"
)
parser.add_argument(
"output", type=FileType("w", encoding="utf-8"), help="Output keymap JSON file"
)
args = parser.parse_args()
content = json.load(args.input)
for [entry, keys] in content:
for i in range(0, len(keys)):
keys[i] = "+".join(replace_key(key) for key in keys[i].split("+"))
keys.sort()
content.sort(key=lambda x: x[0])
json.dump({ "map": content, "version": args.version }, args.output)
if __name__ == "__main__":
main()