Skip to content

Instantly share code, notes, and snippets.

@gabrielelana
Last active October 22, 2017 17:13
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 gabrielelana/b78f8ada7d9f6a62a4039b93a09a28b6 to your computer and use it in GitHub Desktop.
Save gabrielelana/b78f8ada7d9f6a62a4039b93a09a28b6 to your computer and use it in GitHub Desktop.
Virtual Keyboard With Chords POC
import threading
import time
from evdev import UInput, InputDevice,categorize, ecodes
from copy import copy
myKey = UInput.from_device('/dev/input/event2', name='MyKeyboard')
dev = InputDevice('/dev/input/event2')
events = []
waiting = False
def flush():
global events
global waiting
find_l = False
find_p = False
done = False
for event in events:
if event.code == ecodes.ecodes['KEY_P']:
find_p = True
elif event.code == ecodes.ecodes['KEY_L']:
find_l = True
for event in events:
if event.code == ecodes.ecodes['KEY_P'] and find_l and not done:
ctrl = copy(event)
ctrl.code = ecodes.ecodes['KEY_Z']
myKey.write_event(ctrl)
myKey.syn()
done = True
elif event.code == ecodes.ecodes['KEY_L'] and find_p and not done:
ctrl = copy(event)
ctrl.code = ecodes.ecodes['KEY_Z']
myKey.write_event(ctrl)
myKey.syn()
done = True
elif not done:
myKey.write_event(event)
myKey.syn()
events = []
waiting = False
for event in dev.read_loop():
if waiting:
events.append(event)
else:
if event.code == ecodes.ecodes['KEY_P']:
events.append(event)
threading.Timer(0.025, flush).start()
waiting = True
elif event.code == ecodes.ecodes['KEY_L']:
events.append(event)
threading.Timer(0.025, flush).start()
waiting = True
else:
myKey.write_event(event)
myKey.syn()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment