mirror of
https://github.com/rbreaves/kinto.git
synced 2025-08-02 17:16:39 +02:00
308 lines
9.9 KiB
Python
Executable File
308 lines
9.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# pip3 install pynput
|
|
# pip3 install --no-deps pynput
|
|
|
|
from pynput.keyboard import Key, Listener
|
|
import sys, subprocess, time
|
|
delay=3
|
|
|
|
class color:
|
|
PURPLE = '\033[95m'
|
|
CYAN = '\033[96m'
|
|
DARKCYAN = '\033[36m'
|
|
BLUE = '\033[94m'
|
|
GREEN = '\033[92m'
|
|
YELLOW = '\033[93m'
|
|
RED = '\033[91m'
|
|
BOLD = '\033[1m'
|
|
UNDERLINE = '\033[4m'
|
|
END = '\033[0m'
|
|
|
|
def countdown(secs):
|
|
for i in range(0,secs):
|
|
print(secs-i, end="\r", flush=True)
|
|
time.sleep(1)
|
|
|
|
def on_press(key):
|
|
print('{0} pressed'.format(key))
|
|
|
|
def on_release(key):
|
|
# print('{0} release'.format(key))
|
|
if key == Key.esc:
|
|
# Stop listener
|
|
return False
|
|
|
|
def yn_choice(message, default='y'):
|
|
choices = 'Y/n' if default.lower() in ('y', 'yes') else 'y/N'
|
|
choice = input("%s (%s) " % (message, choices))
|
|
values = ('y', 'yes', '') if choices == 'Y/n' else ('y', 'yes')
|
|
return choice.strip().lower() in values
|
|
|
|
modifier_keys = {
|
|
"primary":"",
|
|
"secondary":"",
|
|
"rprimary":"",
|
|
"rsecondary":"",
|
|
"capslock":"",
|
|
"capswap":""
|
|
}
|
|
|
|
def set_key(key):
|
|
global modifiery_keys
|
|
print("\nWhich key would you like to set?\n")
|
|
|
|
while True:
|
|
try:
|
|
keytype = int(input(
|
|
"1) Ctrl\n" +
|
|
"2) Alt\n" +
|
|
"3) Super/Win/Cmd/Chrome search key\n"))
|
|
if keytype < 4 and keytype > 0:
|
|
break
|
|
except:
|
|
print("That's not a valid option!")
|
|
print("")
|
|
if keytype == 1:
|
|
modifier_keys[key] = "Ctrl"
|
|
elif keytype == 2:
|
|
modifier_keys[key] = "Alt"
|
|
elif keytype == 3:
|
|
modifier_keys[key] = "Cmd"
|
|
|
|
def set_cap():
|
|
global modifiery_keys
|
|
print("\nWhich key would you like to swap?\n")
|
|
|
|
while True:
|
|
try:
|
|
keytype = int(input(
|
|
"1) Ctrl (swap)\n" +
|
|
"2) Ctrl (duplicate)\n" +
|
|
"3) Esc (swap)\n"))
|
|
if keytype < 4 and keytype > 0:
|
|
break
|
|
except:
|
|
print("That's not a valid option!")
|
|
print("")
|
|
if keytype == 1:
|
|
modifier_keys["capslock"] = "Ctrl-swap"
|
|
elif keytype == 2:
|
|
modifier_keys["capslock"] = "Ctrl-dup"
|
|
elif keytype == 3:
|
|
modifier_keys["capswap"] = "Esc"
|
|
|
|
def is_primary(key):
|
|
global modifiery_keys
|
|
if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Esc"):
|
|
print(str(key).replace("Key.", "").title() + " will be remapped to Ctrl, the Cmd ⌘ key position.")
|
|
# countdown(3)
|
|
modifier_keys["primary"] = str(key).replace("Key.", "").title()
|
|
return False
|
|
elif str(key).replace("Key.", "").title() == "Esc":
|
|
modifier_keys["primary"] = "Esc"
|
|
# countdown(3)
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
def is_secondary(key):
|
|
global modifiery_keys
|
|
if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Esc"):
|
|
print(str(key).replace("Key.", "").title() + " will be remapped to Alt, the Option ⌥ key position.")
|
|
# countdown(3)
|
|
modifier_keys["secondary"] = str(key).replace("Key.", "").title()
|
|
return False
|
|
elif str(key).replace("Key.", "").title() == "Esc":
|
|
modifier_keys["secondary"] = "Esc"
|
|
# countdown(3)
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
def is_rprimary(key):
|
|
global modifiery_keys
|
|
if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Esc"):
|
|
print(str(key).replace("Key.", "").title() + " will be remapped to Ctrl, the Cmd ⌘ key position.")
|
|
# countdown(3)
|
|
modifier_keys["rprimary"] = str(key).replace("Key.", "").title()
|
|
return False
|
|
elif str(key).replace("Key.", "").title() == "Esc":
|
|
modifier_keys["rprimary"] = "Esc"
|
|
# countdown(3)
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
def is_rsecondary(key):
|
|
global modifiery_keys
|
|
if not (str(key).replace("Key.", "").title() == "Enter" or str(key).replace("Key.", "").title() == "Esc"):
|
|
print(str(key).replace("Key.", "").title() + " will be remapped to Alt, the Option ⌥ key position.")
|
|
# countdown(3)
|
|
modifier_keys["rsecondary"] = str(key).replace("Key.", "").title()
|
|
return False
|
|
elif str(key).replace("Key.", "").title() == "Esc":
|
|
modifier_keys["rsecondary"] = "Esc"
|
|
# countdown(3)
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
|
|
print(color.UNDERLINE + color.YELLOW + "\n\nPlease ignore the FN key." + color.END + " FN cannot be remapped by software, some Thinkpads can swap it with Ctrl in the BIOS.\n")
|
|
input("Press Enter to continue...\n\n")
|
|
print(chr(27) + "[2J")
|
|
|
|
while True:
|
|
global modifiery_keys
|
|
|
|
|
|
print(color.UNDERLINE + color.YELLOW + "\n\nPress the 1st key Left of the spacebar" + color.END + " (Press Esc to set manaully)\n")
|
|
print(" 👇 \n")
|
|
print(" □ □ ▣ ░░░░░░░\n")
|
|
with Listener(
|
|
on_release=is_primary,suppress=True) as listener:
|
|
try:
|
|
listener.join()
|
|
except MyException as e:
|
|
print('{0} was pressed'.format(e.args[0]))
|
|
|
|
if modifier_keys["primary"] != "Esc":
|
|
choice = yn_choice("Is this correct?")
|
|
if(choice):
|
|
print("Left Physical " + modifier_keys["primary"] + " = Ctrl/Cmd ⌘")
|
|
# listener.stop()
|
|
break
|
|
else:
|
|
set_key("primary")
|
|
print("Left Physical " + modifier_keys["primary"] + " = Ctrl/Cmd ⌘\n")
|
|
# listener.stop()
|
|
input("Press Enter to continue...\n\n")
|
|
break
|
|
|
|
print(chr(27) + "[2J")
|
|
|
|
print(listener)
|
|
|
|
while True:
|
|
global modifiery_keys
|
|
print(color.UNDERLINE + color.YELLOW + "\n\nPress the 2nd key Left of the spacebar" + color.END + " (Press Esc to set manaully)\n")
|
|
print(" 👇\n")
|
|
print(" □ ▣ □ ░░░░░░░\n")
|
|
|
|
with Listener(
|
|
on_release=is_secondary,suppress=True) as listener:
|
|
try:
|
|
listener.join()
|
|
except MyException as e:
|
|
print('{0} was pressed'.format(e.args[0]))
|
|
|
|
if modifier_keys["secondary"] != "Esc":
|
|
choice = yn_choice("Is this correct?")
|
|
if(choice):
|
|
# listener.stop()
|
|
# print("Left Physical " + modifier_keys["secondary"] + " = Alt/Option ⌥")
|
|
break
|
|
else:
|
|
set_key("secondary")
|
|
print("Left Physical " + modifier_keys["secondary"] + " = Alt/Option ⌥\n")
|
|
# listener.stop()
|
|
input("Press Enter to continue...\n\n")
|
|
break
|
|
|
|
print(chr(27) + "[2J")
|
|
|
|
while True:
|
|
global modifiery_keys
|
|
print(color.UNDERLINE + color.YELLOW + "\n\nPress the 1st key Right of the spacebar" + color.END + " (Press Esc to set manaully)\n")
|
|
print(" 👇 \n")
|
|
print(" ░░░░░░░ ▣ □ \n")
|
|
|
|
with Listener(
|
|
on_release=is_rprimary,suppress=True) as listener:
|
|
try:
|
|
listener.join()
|
|
except MyException as e:
|
|
print('{0} was pressed'.format(e.args[0]))
|
|
|
|
if modifier_keys["rprimary"] != "Esc":
|
|
choice = yn_choice("Is this correct?")
|
|
if(choice):
|
|
# listener.stop()
|
|
# print("Right Physical " + modifier_keys["rprimary"] + " = Ctrl/Cmd ⌘")
|
|
break
|
|
else:
|
|
set_key("rprimary")
|
|
print("Right Physical " + modifier_keys["rprimary"] + " = Ctrl/Cmd ⌘\n")
|
|
# listener.stop()
|
|
input("Press Enter to continue...\n\n")
|
|
break
|
|
|
|
print(chr(27) + "[2J")
|
|
|
|
while True:
|
|
print(color.UNDERLINE + color.YELLOW + "\n\nPress the 2nd key Right of the spacebar" + color.END + " (Press Esc to set manaully)\n")
|
|
print(" 👇\n")
|
|
print(" ░░░░░░░ □ ▣ \n")
|
|
|
|
|
|
|
|
with Listener(
|
|
on_release=is_rsecondary,suppress=True) as listener:
|
|
try:
|
|
listener.join()
|
|
except MyException as e:
|
|
print('{0} was pressed'.format(e.args[0]))
|
|
|
|
if modifier_keys["rsecondary"] != "Esc":
|
|
choice = yn_choice("Is this correct?")
|
|
if(choice):
|
|
# listener.stop()
|
|
# print("Right Physical " + modifier_keys["rsecondary"] + " = Alt/Option ⌥")
|
|
break
|
|
else:
|
|
set_key("rsecondary")
|
|
print("Right Physical " + modifier_keys["rsecondary"] + " = Alt/Option ⌥\n")
|
|
# listener.stop()
|
|
input("Press Enter to continue...\n\n")
|
|
break
|
|
|
|
print(chr(27) + "[2J")
|
|
|
|
if modifier_keys["secondary"] != "Ctrl":
|
|
print(color.UNDERLINE + color.YELLOW + "GUI Usage (Physical Ctrl key)\n"+ color.END)
|
|
print("Ctrl key will be mapped to Super. (Search key on chromebooks)\n")
|
|
print("👇\n")
|
|
print(" ▣ □ □ ░░░░░░░\n")
|
|
|
|
print("Note: Super may still activate Ctrl based shortcuts\n")
|
|
print("at times depending on application or system level shortcut.\n")
|
|
print("This will only be done to align shortcuts to their expected functionality.\n")
|
|
|
|
input("Press Enter to continue...\n\n")
|
|
# print(chr(27) + "[2J")
|
|
|
|
print(color.UNDERLINE + color.YELLOW + "Terminal Usage" + color.END + "\n")
|
|
print("Ctrl key will be the Ctrl key.\n")
|
|
print("👇\n")
|
|
print(" ▣ □ □ ░░░░░░░\n\n")
|
|
print("The Cmd ⌘ key position during terminal usage will usually be Ctrl+Shift.\n")
|
|
print(" 👇 \n")
|
|
print(" □ □ ▣ ░░░░░░░\n\n")
|
|
input("Press Enter to continue...\n\n")
|
|
else:
|
|
print("Chromebook detected.")
|
|
|
|
print(color.UNDERLINE + color.YELLOW + "Terminal Usage" + color.END + "\n")
|
|
print(" □ capslock/search key = Alt\n")
|
|
print(" shift\n")
|
|
print(" ▣ □ ░░░░░░░")
|
|
print("☝️\n")
|
|
|
|
input("Press Enter to continue...\n\n")
|
|
|
|
print(chr(27) + "[2J")
|
|
|
|
choice = yn_choice(color.UNDERLINE + color.YELLOW + "Do you want to swap Capslock with another key?" + color.END + "\n","n")
|
|
if(choice):
|
|
set_cap() |