portablejim

python-push-to-talk.py

Dec 5th, 2015
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.94 KB | None | 0 0
  1. from Xlib.display import Display
  2. from Xlib import X
  3. from Xlib.ext import record
  4. from Xlib.protocol import rq
  5. from subprocess import call
  6.  
  7. disp = None
  8.  
  9. call(["pacmd", "set-source-mute", "1", "true"])
  10.  
  11. def handler(reply):
  12.     """ This function is called when a xlib event is fired """
  13.     data = reply.data
  14.     while len(data):
  15.         event, data = rq.EventField(None).parse_binary_value(data, disp.display, None, None)
  16.        
  17.         # KEYCODE IS FOUND USERING event.detail
  18.         #print "EVT: %s | %s " % (event.detail, str(event))
  19.         print event.detail
  20.        
  21.         if event.type == X.KeyPress or event.type == X.ButtonPress:
  22.             # BUTTON PRESSED
  23.             print "pressed"
  24.             if event.detail == 9:
  25.                 call(["pacmd", "set-source-mute", "1", "false"])
  26.         elif event.type == X.KeyRelease or event.type == X.ButtonRelease:
  27.             # BUTTON RELEASED
  28.             print "released"
  29.             if event.detail == 9:
  30.                 call(["pacmd", "set-source-mute", "1", "true"])
  31.  
  32. # get current display
  33. disp = Display()
  34. root = disp.screen().root
  35.    
  36. # Monitor keypress and button press
  37. ctx = disp.record_create_context(
  38.             0,
  39.             [record.AllClients],
  40.             [{
  41.                     'core_requests': (0, 0),
  42.                     'core_replies': (0, 0),
  43.                     'ext_requests': (0, 0, 0, 0),
  44.                     'ext_replies': (0, 0, 0, 0),
  45.                     'delivered_events': (0, 0),
  46.                     'device_events': (X.KeyReleaseMask, X.ButtonReleaseMask),
  47.                     'errors': (0, 0),
  48.                     'client_started': False,
  49.                     'client_died': False,
  50.             }])
  51. disp.record_enable_context(ctx, handler)
  52. disp.record_free_context(ctx)
  53.    
  54. while 1:
  55.     # Infinite wait, doesn't do anything as no events are grabbed
  56.     event = root.display.next_event()
  57.  
  58. call(["pacmd", "set-source-mute", "1", "false"])
Advertisement
Add Comment
Please, Sign In to add comment