Skip to content

Instantly share code, notes, and snippets.

@typoman
Created July 31, 2020 13:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save typoman/5bd432c6cea0ad4d03e6f61f803836c7 to your computer and use it in GitHub Desktop.
Save typoman/5bd432c6cea0ad4d03e6f61f803836c7 to your computer and use it in GitHub Desktop.
Override RoboFont keys
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