Handle certain enteries as key combo

This commit is contained in:
2025-12-06 03:38:41 -06:00
parent c969c6056b
commit b446887ccc
3 changed files with 39 additions and 19 deletions

View File

@@ -34,9 +34,9 @@ class MissingConfigError(Exception):
class Pyautogui_Controller(ControlMixin): class Pyautogui_Controller(ControlMixin):
def __init__(self): def __init__(self):
self.isCtrlOn = False self.isCtrlOn = False
self.isShiftOn = False self.isShiftOn = False
self.isAltOn = False self.isAltOn = False
@@ -57,7 +57,7 @@ keys_json = {
}, },
"row4": { "row4": {
"pKeys": ['z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '?'], "pKeys": ['z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '?'],
"sKeys": ['', '', '\\<', '>', '[', ']', '(', ')', '{', '}'] "sKeys": ['', '', '<|shift+,', '>', '[', ']', '(', ')', '{', '}']
}, },
} }
} }

View File

@@ -54,9 +54,9 @@ class Keys_Column(Gtk.Box):
row_box = self.add_row() row_box = self.add_row()
if len(pKeys) == len(sKeys): if len(pKeys) == len(sKeys):
for i in range(10): for i in range(10):
pkey = pKeys[i] pKey = pKeys[i]
sKey = sKeys[i] sKey = sKeys[i]
row_box.add(Key(pkey, sKey)) row_box.add(Key(pKey, sKey))
else: else:
raise KeyboardRowMatchError("A row in keys_json has missmatched pKeys to sKeys lengths.") raise KeyboardRowMatchError("A row in keys_json has missmatched pKeys to sKeys lengths.")

View File

@@ -10,30 +10,46 @@ from gi.repository import GLib
class Key(Gtk.Button or Gtk.ToggleButton): class Key(Gtk.Button or Gtk.ToggleButton):
def __init__(self, primary = "NULL", secondary = "NULL", iscontrol=False): def __init__(self, primary = "NULL", secondary = "NULL", iscontrol = False):
super(Key, self).__init__() super(Key, self).__init__()
self.timer_id = None self.timer_id = None
self.iscontrol = iscontrol self.iscontrol = iscontrol
self._primary_symbol = primary self._primary_symbol = primary
self._secondary_symbol = secondary self._secondary_symbol = secondary[0] if secondary else ""
self._alt_symbol = ''
self._is_upper = False self._is_upper = False
self._is_symbol = False self._is_symbol = False
self._is_emoji = False self._is_emoji = False
self.isShiftOn = False
self._setup_styling()
self._setup_signals()
self._subscribe_to_events()
self._set_if_keycombo(secondary)
def _setup_styling(self):
self.set_label(self._primary_symbol) self.set_label(self._primary_symbol)
self.setup_custom_signals()
self.setup_signals()
def setup_custom_signals(self): def _setup_signals(self):
event_system.subscribe("toggle_caps", self.toggle_caps)
event_system.subscribe("toggle_symbol_keys", self.toggle_symbol_keys)
def setup_signals(self):
self.connect("button-press-event", self._do_press) self.connect("button-press-event", self._do_press)
self.connect("button-release-event", self._do_release) self.connect("button-release-event", self._do_release)
self.connect("toggle-emoji-keys", self.toggle_emoji_keys) self.connect("toggle-emoji-keys", self.toggle_emoji_keys)
def _subscribe_to_events(self):
event_system.subscribe("toggle_caps", self.toggle_caps)
event_system.subscribe("toggle_symbol_keys", self.toggle_symbol_keys)
def _set_if_keycombo(self, secondary: str):
if len(secondary) > 1 and '|' in secondary:
parts = secondary.split("|")[1].split("+")
for part in parts:
if "shift" == part.lower():
self.isShiftOn = True
self._alt_symbol = parts[-1]
def _do_press(self, widget = None, eve = None): def _do_press(self, widget = None, eve = None):
if self.timer_id: if self.timer_id:
GLib.source_remove(self.timer_id) GLib.source_remove(self.timer_id)
@@ -44,14 +60,18 @@ class Key(Gtk.Button or Gtk.ToggleButton):
def _do_type(self, widget = None, eve = None): def _do_type(self, widget = None, eve = None):
key = self.get_label().strip() key = self.get_label().strip()
if not self._is_emoji: if self._is_emoji:
typwriter.type(key)
else:
typwriter.set_clipboard_data(key, "utf-16") typwriter.set_clipboard_data(key, "utf-16")
typwriter.isCtrlOn = True typwriter.isCtrlOn = True
typwriter.type('v') typwriter.type('v')
typwriter.isCtrlOn = False typwriter.isCtrlOn = False
return True
typwriter.isShiftOn = self.isShiftOn
typwriter.type(key if not self._alt_symbol else self._alt_symbol)
typwriter.isShiftOn = False
return True return True
def _do_release(self, widget = None, eve = None): def _do_release(self, widget = None, eve = None):