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.
70 lines
2.3 KiB
70 lines
2.3 KiB
#! /bin/python3 |
|
|
|
import openrazer.client |
|
import json |
|
from pathlib import Path |
|
from pynput import keyboard |
|
|
|
def get_keyboard(): |
|
devman = openrazer.client.DeviceManager() |
|
|
|
for device in devman.devices: |
|
if (device.name == "Razer BlackWidow Chroma V2"): |
|
return device |
|
|
|
return None |
|
|
|
def clear_all(kbd): |
|
# Set full keyboard to green |
|
for row in range(0,kbd_rows): |
|
for column in range(0, kbd_columns): |
|
kbd.fx.advanced.matrix[row,column] = [0, 0, 0] |
|
|
|
|
|
kbd = get_keyboard() |
|
if (kbd == None): |
|
print("No Razer device with devicename 'Razer Blackwidow Chroma V2' found.") |
|
exit() |
|
|
|
kbd_rows, kbd_columns = kbd.fx.advanced.rows, kbd.fx.advanced.cols |
|
|
|
|
|
last_key_pressed = None |
|
def on_press(key): |
|
global last_key_pressed |
|
last_key_pressed = key |
|
return False |
|
|
|
def get_key(): |
|
with keyboard.Listener(on_press=on_press) as listener: |
|
listener.join() |
|
|
|
def set_key_columns(keymap, column_range, prefix=""): |
|
for row in range(0,kbd_rows): |
|
for column in column_range: |
|
clear_all(kbd) |
|
kbd.fx.advanced.matrix[row,column] = [255, 255, 255] |
|
kbd.fx.advanced.draw() |
|
get_key() |
|
print('{} was pressed'.format(last_key_pressed)) |
|
keymap[prefix + str(last_key_pressed)] = row * kbd_columns + column |
|
|
|
def iter_keys(): |
|
keymap = dict() |
|
print("Make sure caps lock and numpad are disabled, if not, do it now and restart the script") |
|
print("This script will iterate over all keys, row by row. When a key lights up white, press it, and use the mouse to cancel any F-key effects. First, we'll skip the numpad. If no key lights up, press the bottom-right most key, excluding the numpad().") |
|
set_key_columns(keymap, range(0,18)) |
|
print("Now we'll iterate over the numpad, if no key lights up, press the bottom right key(enter)") |
|
set_key_columns(keymap, range(18,kbd_columns), "num_") |
|
return keymap |
|
|
|
def write_keymap_file(dictionary): |
|
keymap_json = json.dumps(keymap) |
|
path = Path.home() / '.config/openrazer_scripter/keymap.json' |
|
Path(path.parent).mkdir(parents=True, exist_ok=True) |
|
with open(path,'w') as keymap_file: |
|
keymap_file.write(keymap_json) |
|
|
|
keymap = iter_keys() |
|
write_keymap_file(keymap) |
|
print('Saved keymap to file (.config/openrazer_scripter/keymap.json)')
|
|
|