Compare commits

...

2 commits

Author SHA1 Message Date
Izalia Mae 0a2757fc34 Merge branch 'master' of ssh://git.barkshark.tk:2222/izaliamae/scripts 2019-04-19 11:55:53 -04:00
Izalia Mae 8bacd78b01 add hotkeymute.py 2019-04-19 11:49:01 -04:00
2 changed files with 97 additions and 2 deletions

95
hotkeymute.py Executable file
View file

@ -0,0 +1,95 @@
#!/usr/bin/env python3
#
# Mutes Jack input when you press super
#
# Adapted from https://stackoverflow.com/questions/204017 which
# was adapted from http://stackoverflow.com/questions/22367358/
# Requires python-xlib (pip3 install xlib)
#
# Probably gonna rework the whole thing since there's a lot of
# unnecessary code and then use the pulseaudio module
#
from Xlib.display import Display
from Xlib import X, XK
from Xlib.ext import record
from Xlib.protocol import rq
import subprocess
from os import system
class Listener:
def __init__(self):
self.disp = None
self.keys_down = set()
def keycode_to_key(self, keycode, state):
i = 0
if state & X.ShiftMask:
i += 1
if state & X.Mod1Mask:
i += 2
return self.disp.keycode_to_keysym(keycode, i)
def key_to_string(self, key):
keys = []
for name in dir(XK):
if name.startswith("XK_") and getattr(XK, name) == key:
keys.append(name.lstrip("XK_").replace("_L", "").replace("_R", ""))
if keys:
return " or ".join(keys)
return "[%d]" % key
def keycode_to_string(self, keycode, state):
return self.key_to_string(self.keycode_to_key(keycode, state))
def down(self, key):
self.keys_down.add(key)
self.print_keys()
def up(self, key):
if key in self.keys_down:
self.keys_down.remove(key)
self.print_keys()
def print_keys(self):
keys = list(self.keys_down)
#print("Currently pressed:", ", ".join(keys))
if ", ".join(keys) == 'Super':
system('pactl set-source-mute jack_in toggle')
print('toggled mute')
def event_handler(self, reply):
data = reply.data
while data:
event, data = rq.EventField(None).parse_binary_value(data, self.disp.display, None, None)
if event.type == X.KeyPress:
self.down(self.keycode_to_string(event.detail, event.state))
elif event.type == X.KeyRelease:
self.up(self.keycode_to_string(event.detail, event.state))
def run(self):
self.disp = Display()
XK.load_keysym_group('xf86')
root = self.disp.screen().root
ctx = self.disp.record_create_context(0,
[record.AllClients],
[{
'core_requests': (0, 0),
'core_replies': (0, 0),
'ext_requests': (0, 0, 0, 0),
'ext_replies': (0, 0, 0, 0),
'delivered_events': (0, 0),
'device_events': (X.KeyReleaseMask, X.ButtonReleaseMask),
'errors': (0, 0),
'client_started': False,
'client_died': False,
}])
self.disp.record_enable_context(ctx, lambda reply: self.event_handler(reply))
self.disp.record_free_context(ctx)
while True:
event = root.display.next_event()
if __name__ == "__main__":
Listener().run()

View file

@ -75,10 +75,10 @@ function installMastodon {
cd $MASTO_PATH
# update gem
printf 'y\n' | gem update --system --no-document
gem update --system --no-document
# install ruby and nodejs deps
gem install bundler
#printf 'y\n' | gem install bundler
bundle install -j$(getconf _NPROCESSORS_ONLN)
yarn install --pure-lockfile
gem install foreman