60 lines
2.0 KiB
Python
Executable File
60 lines
2.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import re
|
|
from pathlib import Path
|
|
|
|
# Define the file path using Path and expand user directory
|
|
file_path = Path("~/dotfiles/.config/qtile/modules/keys.py").expanduser()
|
|
|
|
# Initialize a flag for header printing
|
|
header_printed = False
|
|
|
|
def capitalize_first_letter(s):
|
|
"""Capitalize the first letter of each key."""
|
|
return s.capitalize() if s else ""
|
|
|
|
def replace_keys(key):
|
|
"""Replace Mod and Control with Super and Ctrl."""
|
|
if key == "mod":
|
|
return "Super"
|
|
if key == "xf86calculator":
|
|
return "Calculator"
|
|
elif key == "control":
|
|
return "Ctrl"
|
|
return key
|
|
|
|
with open(file_path, 'r') as file:
|
|
for line in file:
|
|
# Skip lines that contain "# Key("
|
|
if '# Key(' in line:
|
|
continue
|
|
|
|
# Check for KB_GROUP headers
|
|
if '# KB_GROUP-' in line:
|
|
if header_printed:
|
|
print("") # Add a blank line before the next header
|
|
# Print the header in bold yellow, removing "KB_GROUP-"
|
|
print(f"\n\033[1;33m{line.strip().replace('KB_GROUP-', '').strip()}\033[0m\n")
|
|
header_printed = True
|
|
|
|
# Check for Key bindings
|
|
match = re.search(r'Key\(\[(.*?)\], "(.*?)", lazy\..*, desc="(.*)"\)', line)
|
|
if match:
|
|
# Get the modifier keys
|
|
keys = match.group(1).replace("'", "").replace('"', '').split(', ')
|
|
# Get the main key
|
|
key = match.group(2)
|
|
# Get the description
|
|
description = match.group(3)
|
|
|
|
# Prepare the key strings for each key position
|
|
mod1 = capitalize_first_letter(replace_keys(keys[0])) if len(keys) > 0 else ""
|
|
mod2 = capitalize_first_letter(replace_keys(keys[1])) if len(keys) > 1 else ""
|
|
key_str = capitalize_first_letter(key) # The main key
|
|
|
|
# Print the keys in their respective columns
|
|
print(f" {mod1:<6} {mod2:<8} {key_str:<30}{description}")
|
|
|
|
# Wait for user input before exiting
|
|
input("Press [Enter] to exit...")
|
|
|