Browse Source

fix ranger/rifle passing improper param list to termite by wrapping cmd and setting $TERMCMD

Fabian Peter Hammerle 5 years ago
parent
commit
19dd6f1f4e
2 changed files with 33 additions and 1 deletions
  1. 29 0
      ranger-termite-termcmd
  2. 4 1
      rc.xsh

+ 29 - 0
ranger-termite-termcmd

@@ -0,0 +1,29 @@
+#!/usr/bin/env python3
+
+"""
+ranger/ext/rifle.py:
+> self.hook_before_executing(command, self._mimetype, self._app_flags)
+> try:
+>     if 'r' in flags:
+>         prefix = ['sudo', '-E', 'su', '-mc']
+>     else:
+>         prefix = ['/bin/sh', '-c']
+>
+>     cmd = prefix + [command]
+>     if 't' in flags:
+>         # ...
+>         cmd = [os.environ['TERMCMD'], '-e'] + cmd
+
+however termite expects the entire cmd as one single param
+"""
+
+import pipes
+import subprocess
+import sys
+
+assert sys.argv[1] == '-e', sys.argv
+
+subprocess.call([
+    'termite',
+    '--exec={}'.format(' '.join(pipes.quote(p) for p in sys.argv[2:])),
+])

+ 4 - 1
rc.xsh

@@ -24,10 +24,13 @@ $PROMPT = ''.join([
 ])
 $RIGHT_PROMPT = '{gitstatus}{env_name: {}}'
 
-import re as re
+import os
+import re
 
 # required by pinentry-tty when using gpg command:
 $GPG_TTY = $(tty)
+# wrapper for termite required when launching termite from ranger:
+$TERMCMD = os.path.join(os.path.dirname(__file__), 'ranger-termite-termcmd')
 
 def locate(*patterns, match_all=True, ignore_case=True):
     params = []