Created
July 31, 2020 13:11
-
-
Save typoman/5bd432c6cea0ad4d03e6f61f803836c7 to your computer and use it in GitHub Desktop.
Override RoboFont keys
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import AppKit | |
from vanilla import * | |
myHotKeys = {'⌘s', '⇧⌘s', '⌘q', '⇧⌘q'} | |
MODIFIER_INT_TO_STR = { | |
1048840: '⌘', | |
262401: '⌃', | |
524576: '⌥', | |
131330: '⇧', | |
1179914: '⇧⌘', | |
1573160: '⌘⌥', | |
1310985: '⌃⌘', | |
393475: '⇧⌃', | |
655650: '⇧⌥', | |
} | |
class KeyEventMonitor(object): | |
def __init__(self): | |
self.monitor = None | |
self.w = Window((300, 90), "KeyEventMonitor Debuggin window") | |
self.w.b1 = Button((10, 10, -10, 20), "Stop", | |
callback=self.stop) | |
self.w.b2 = Button((10, 40, -10, 20), "Start", | |
callback=self.start) | |
self.w.bind("close", self.stop) | |
self.w.open() | |
self.start(None) | |
def stop(self, sender): | |
self._stopOverridingRFkeys() | |
def start(self, sender): | |
self._startOverridingRFkeys() | |
def _startOverridingRFkeys(self): | |
self._stopOverridingRFkeys() | |
self.monitor = AppKit.NSEvent.addLocalMonitorForEventsMatchingMask_handler_( | |
AppKit.NSKeyDownMask, self._keyDown) | |
def _stopOverridingRFkeys(self): | |
if self.monitor is not None: | |
AppKit.NSEvent.removeMonitor_(self.monitor) | |
self.monitor = None | |
def _keyDown(self, event): | |
rawKey = event.charactersIgnoringModifiers().lower() | |
allKeys = MODIFIER_INT_TO_STR.get(event.modifierFlags(), '') + rawKey | |
print(event.modifierFlags()) | |
if allKeys in myHotKeys: # make sure only your sepcial extension window is active here | |
print("hit %s" %allKeys) | |
# do your things, this will override RF keys. | |
else: | |
self._stopOverridingRFkeys() | |
AppKit.NSApp().sendEvent_(event) | |
self._startOverridingRFkeys() | |
KeyEventMonitor() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment