You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.4 KiB
43 lines
1.4 KiB
5 years ago
|
from pathlib import Path
|
||
|
import json
|
||
|
import math
|
||
|
|
||
|
class Keymap:
|
||
|
keymap_dir = Path.home() / '.config/openrazer_scripter/'
|
||
|
def __init__(self):
|
||
|
self.keys = dict()
|
||
|
pass
|
||
|
|
||
|
@classmethod
|
||
|
def get_keymap_path(cls, keyboard_name):
|
||
|
return cls.keymap_dir / f"keymap_{keyboard_name.replace(' ', '_')}.json"
|
||
|
|
||
|
def load_from_file(self, keyboard_name):
|
||
|
path = self.get_keymap_path(keyboard_name)
|
||
|
try:
|
||
|
with open(path,'r') as keymap_file:
|
||
|
self.keys = json.load(keymap_file)
|
||
|
except FileNotFoundError:
|
||
|
print(f"No such file: '{path}'. Run 'create_keyboard_map.py' to generate a keymap, or move an existing one to the directory.")
|
||
|
return False
|
||
|
return True
|
||
|
|
||
|
def write_keymap_file(self, keyboard_name):
|
||
|
keymap_json = json.dumps(self.keys)
|
||
|
path = self.get_keymap_path(keyboard_name)
|
||
|
Path(path.parent).mkdir(parents=True, exist_ok=True)
|
||
|
with open(path,'w') as keymap_file:
|
||
|
keymap_file.write(keymap_json)
|
||
|
|
||
|
def set_keys(self, keys):
|
||
|
self.keys = keys
|
||
|
|
||
|
def get_row_column(self, index):
|
||
|
row = math.floor(index / 22)
|
||
|
column = index % 22
|
||
|
return (row, column)
|
||
|
|
||
|
def get_location(self, key):
|
||
|
if key in self.keys.keys():
|
||
|
value = self.keys[key]
|
||
|
return self.get_row_column(value)
|