summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVon Random <von@vdrandom.org>2019-06-10 19:32:35 +0300
committerVon Random <von@vdrandom.org>2019-06-10 19:32:35 +0300
commitce5e581b1456ce27cfb1ce54e85408e75d1131c0 (patch)
tree6d5b8307002b83856393d5e4e5ebd6f9e0f849f7
parentc64ce4e55308dc8c42b021b4173e0a77746af244 (diff)
rofi_multicmd: multicmd - rofi version
-rwxr-xr-xrofi_multicmd59
1 files changed, 59 insertions, 0 deletions
diff --git a/rofi_multicmd b/rofi_multicmd
new file mode 100755
index 0000000..bae1702
--- /dev/null
+++ b/rofi_multicmd
@@ -0,0 +1,59 @@
+#!/usr/bin/env python3
+#pylint: disable=C0111
+# config example (cmd_pre and cmd_post are optional):
+# ---
+# name: test
+# cmd_pre:
+# - [/usr/bin/notify_send, 'I am precmd1!']
+# - [/usr/bin/notify_send, 'I am precmd2!']
+# multicmd:
+# selection1:
+# - [/usr/bin/notify-send, 'I am command1 for selection1!']
+# - [/usr/bin/notify-send, 'I am command2 for selection1!']
+# selection2:
+# - [/usr/bin/notify-send, 'I am command1 for selection2!']
+# cmd_post:
+# - [/usr/bin/notify_send, 'I am postcmd1!']
+# - [/usr/bin/notify_send, 'I am postcmd2!']
+# ---
+import subprocess
+import sys
+import yaml
+
+
+def run_cmd(cmd, stdin=subprocess.PIPE, data=None):
+ proc = subprocess.Popen(
+ cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=stdin
+ )
+ stdout, stderr = (i.strip() for i in proc.communicate(data))
+ if proc.returncode:
+ err_msg = ['ERROR (' + str(proc.returncode) + '): ' + ' '.join(cmd)]
+ if stdout:
+ err_msg.append('out:\n' + stdout.decode('UTF-8'))
+ if stderr:
+ err_msg.append('err:\n' + stderr.decode('UTF-8'))
+ sys.stderr.write('\n'.join(err_msg) + '\n')
+ return stdout
+
+
+def run_multicmd(cmds):
+ for cmd in cmds:
+ run_cmd(cmd)
+
+
+def main():
+ config_path = sys.argv[1]
+ with open(config_path, mode='r') as config:
+ conf = yaml.load(config.read())
+ if len(sys.argv) < 3:
+ print('\n'.join(conf['multicmd']))
+ else:
+ selection = sys.argv[2]
+ if not selection in conf['multicmd']:
+ sys.exit(1)
+ run_multicmd(conf.get('cmd_pre', tuple()))
+ run_multicmd(conf['multicmd'][selection])
+ run_multicmd(conf.get('cmd_post', tuple()))
+
+if __name__ == '__main__':
+ main()