Handle certain enteries as key combo
This commit is contained in:
@@ -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+,', '>', '[', ']', '(', ')', '{', '}']
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.")
|
||||||
|
|
||||||
|
|||||||
@@ -17,20 +17,20 @@ class Esc_Key(Key):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Esc_Key, self).__init__("Esc", "Esc", iscontrol = True)
|
super(Esc_Key, self).__init__("Esc", "Esc", iscontrol = True)
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("released", self._do_press_special_key)
|
self.connect("released", self._do_press_special_key)
|
||||||
|
|
||||||
class CAPS_Key(Key):
|
class CAPS_Key(Key):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(CAPS_Key, self).__init__("Caps", "Caps", iscontrol = True)
|
super(CAPS_Key, self).__init__("Caps", "Caps", iscontrol = True)
|
||||||
|
|
||||||
self.setup_styling()
|
self._setup_styling()
|
||||||
self.show_all()
|
|
||||||
|
|
||||||
def setup_styling(self):
|
def _setup_styling(self):
|
||||||
self.set_vexpand(True)
|
self.set_vexpand(True)
|
||||||
|
super()._setup_styling()
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("released", self._clicked)
|
self.connect("released", self._clicked)
|
||||||
|
|
||||||
def _clicked(self, widget = None):
|
def _clicked(self, widget = None):
|
||||||
@@ -45,7 +45,7 @@ class Backspace_Key(Key):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Backspace_Key, self).__init__("Backspace", "Backspace", iscontrol=True)
|
super(Backspace_Key, self).__init__("Backspace", "Backspace", iscontrol=True)
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("button-press-event", self._do_press_special_key_repeater)
|
self.connect("button-press-event", self._do_press_special_key_repeater)
|
||||||
self.connect("button-release-event", self._do_release)
|
self.connect("button-release-event", self._do_release)
|
||||||
|
|
||||||
@@ -56,7 +56,7 @@ class Emoji_Key(Key):
|
|||||||
self._ctx = self.get_style_context()
|
self._ctx = self.get_style_context()
|
||||||
self._emoji_popover = emoji_popover
|
self._emoji_popover = emoji_popover
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("released", self._clicked)
|
self.connect("released", self._clicked)
|
||||||
|
|
||||||
def _clicked(self, widget = None):
|
def _clicked(self, widget = None):
|
||||||
@@ -71,7 +71,7 @@ class Symbols_Key(Key):
|
|||||||
super(Symbols_Key, self).__init__("Symbols", "Symbols", iscontrol = True)
|
super(Symbols_Key, self).__init__("Symbols", "Symbols", iscontrol = True)
|
||||||
self.setup_custom_signals()
|
self.setup_custom_signals()
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("released", self._clicked)
|
self.connect("released", self._clicked)
|
||||||
|
|
||||||
def setup_custom_signals(self):
|
def setup_custom_signals(self):
|
||||||
@@ -90,12 +90,13 @@ class Symbols_Key(Key):
|
|||||||
class Enter_Key(Key):
|
class Enter_Key(Key):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Enter_Key, self).__init__("Enter", "Enter", iscontrol=True)
|
super(Enter_Key, self).__init__("Enter", "Enter", iscontrol=True)
|
||||||
self.setup_styling()
|
self._setup_styling()
|
||||||
|
|
||||||
def setup_styling(self):
|
def _setup_styling(self):
|
||||||
self.set_vexpand(True)
|
self.set_vexpand(True)
|
||||||
|
super()._setup_styling()
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("button-press-event", self._do_press_special_key_repeater)
|
self.connect("button-press-event", self._do_press_special_key_repeater)
|
||||||
self.connect("button-release-event", self._do_release)
|
self.connect("button-release-event", self._do_release)
|
||||||
|
|
||||||
@@ -106,14 +107,14 @@ class Esc_Key(Key):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Esc_Key, self).__init__("Esc", "Esc", iscontrol=True)
|
super(Esc_Key, self).__init__("Esc", "Esc", iscontrol=True)
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("released", self._do_press_special_key)
|
self.connect("released", self._do_press_special_key)
|
||||||
|
|
||||||
class Space_Key(Key):
|
class Space_Key(Key):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Space_Key, self).__init__("Space", "Space", iscontrol=True)
|
super(Space_Key, self).__init__("Space", "Space", iscontrol=True)
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("button-press-event", self._do_press_special_key_repeater)
|
self.connect("button-press-event", self._do_press_special_key_repeater)
|
||||||
self.connect("button-release-event", self._do_release)
|
self.connect("button-release-event", self._do_release)
|
||||||
|
|
||||||
@@ -132,7 +133,7 @@ class Tab_Key(Key):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Tab_Key, self).__init__("Tab", "Tab", iscontrol=True)
|
super(Tab_Key, self).__init__("Tab", "Tab", iscontrol=True)
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("button-press-event", self._do_press_special_key_repeater)
|
self.connect("button-press-event", self._do_press_special_key_repeater)
|
||||||
self.connect("button-release-event", self._do_release)
|
self.connect("button-release-event", self._do_release)
|
||||||
|
|
||||||
@@ -140,7 +141,7 @@ class Del_Key(Key):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Del_Key, self).__init__("Del", "Del", iscontrol=True)
|
super(Del_Key, self).__init__("Del", "Del", iscontrol=True)
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("button-press-event", self._do_press_special_key_repeater)
|
self.connect("button-press-event", self._do_press_special_key_repeater)
|
||||||
self.connect("button-release-event", self._do_release)
|
self.connect("button-release-event", self._do_release)
|
||||||
|
|
||||||
@@ -148,35 +149,35 @@ class Ctrl_Key(Key):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Ctrl_Key, self).__init__("Ctrl", "Ctrl", iscontrol=True)
|
super(Ctrl_Key, self).__init__("Ctrl", "Ctrl", iscontrol=True)
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("released", self._do_press_special_key)
|
self.connect("released", self._do_press_special_key)
|
||||||
|
|
||||||
class Shift_Key(Key):
|
class Shift_Key(Key):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Shift_Key, self).__init__("Shift", "Shift", iscontrol=True)
|
super(Shift_Key, self).__init__("Shift", "Shift", iscontrol=True)
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("released", self._do_press_special_key)
|
self.connect("released", self._do_press_special_key)
|
||||||
|
|
||||||
class Alt_Key(Key):
|
class Alt_Key(Key):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Alt_Key, self).__init__("Alt", "Alt", iscontrol=True)
|
super(Alt_Key, self).__init__("Alt", "Alt", iscontrol=True)
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("released", self._do_press_special_key)
|
self.connect("released", self._do_press_special_key)
|
||||||
|
|
||||||
class PrtSc_Key(Key):
|
class PrtSc_Key(Key):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(PrtSc_Key, self).__init__("PrtSc", "PrtSc", iscontrol=True)
|
super(PrtSc_Key, self).__init__("PrtSc", "PrtSc", iscontrol=True)
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("released", self._do_press_special_key)
|
self.connect("released", self._do_press_special_key)
|
||||||
|
|
||||||
class Up_Key(Key):
|
class Up_Key(Key):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Up_Key, self).__init__("Up", "Up", iscontrol=True)
|
super(Up_Key, self).__init__("Up", "Up", iscontrol=True)
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("button-press-event", self._do_press_special_key_repeater)
|
self.connect("button-press-event", self._do_press_special_key_repeater)
|
||||||
self.connect("button-release-event", self._do_release)
|
self.connect("button-release-event", self._do_release)
|
||||||
|
|
||||||
@@ -184,7 +185,7 @@ class Down_Key(Key):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Down_Key, self).__init__("Down", "Down", iscontrol=True)
|
super(Down_Key, self).__init__("Down", "Down", iscontrol=True)
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("button-press-event", self._do_press_special_key_repeater)
|
self.connect("button-press-event", self._do_press_special_key_repeater)
|
||||||
self.connect("button-release-event", self._do_release)
|
self.connect("button-release-event", self._do_release)
|
||||||
|
|
||||||
@@ -192,7 +193,7 @@ class Left_Key(Key):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Left_Key, self).__init__("Left", "Left", iscontrol=True)
|
super(Left_Key, self).__init__("Left", "Left", iscontrol=True)
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("button-press-event", self._do_press_special_key_repeater)
|
self.connect("button-press-event", self._do_press_special_key_repeater)
|
||||||
self.connect("button-release-event", self._do_release)
|
self.connect("button-release-event", self._do_release)
|
||||||
|
|
||||||
@@ -200,6 +201,6 @@ class Right_Key(Key):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Right_Key, self).__init__("Right", "Right", iscontrol=True)
|
super(Right_Key, self).__init__("Right", "Right", iscontrol=True)
|
||||||
|
|
||||||
def setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("button-press-event", self._do_press_special_key_repeater)
|
self.connect("button-press-event", self._do_press_special_key_repeater)
|
||||||
self.connect("button-release-event", self._do_release)
|
self.connect("button-release-event", self._do_release)
|
||||||
|
|||||||
@@ -10,30 +10,48 @@ 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
|
||||||
|
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._setup_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 _setup_if_keycombo(self, secondary: str):
|
||||||
|
if not self.iscontrol and (len(secondary) > 1 and '|' in secondary):
|
||||||
|
self._secondary_symbol = secondary[0]
|
||||||
|
|
||||||
|
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 +62,21 @@ 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
|
||||||
|
|
||||||
|
if self._alt_symbol and self._is_symbol:
|
||||||
|
typwriter.isShiftOn = self.isShiftOn
|
||||||
|
typwriter.type(self._alt_symbol)
|
||||||
|
typwriter.isShiftOn = False
|
||||||
|
else:
|
||||||
|
typwriter.type(key)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _do_release(self, widget = None, eve = None):
|
def _do_release(self, widget = None, eve = None):
|
||||||
@@ -99,4 +124,4 @@ class Key(Gtk.Button or Gtk.ToggleButton):
|
|||||||
if not self.iscontrol:
|
if not self.iscontrol:
|
||||||
self._is_upper = not self._is_upper
|
self._is_upper = not self._is_upper
|
||||||
if not self._is_symbol:
|
if not self._is_symbol:
|
||||||
self.set_label(self._primary_symbol.upper()) if self._is_upper else self.set_label(self._primary_symbol.lower())
|
self.set_label(self._primary_symbol.upper()) if self._is_upper else self.set_label(self._primary_symbol.lower())
|
||||||
|
|||||||
Reference in New Issue
Block a user