summary refs log tree commit diff stats
path: root/ranger
diff options
context:
space:
mode:
authorhut <hut@lavabit.com>2011-12-17 21:57:50 +0100
committerhut <hut@lavabit.com>2011-12-17 21:57:50 +0100
commit7d820eebd049b8bf67a37ddd4046099e1569882c (patch)
tree401b006a79ccf0c82ca28ee3846bf8b3b9a53f66 /ranger
parent703b35122c4db45b601547a5f341fd7dbc6f0052 (diff)
parentd6e61b1d3004ce58fc58a9d6035498b13e6f2089 (diff)
downloadranger-7d820eebd049b8bf67a37ddd4046099e1569882c.tar.gz
Merge https://github.com/gwash/ranger
Diffstat (limited to 'ranger')
-rw-r--r--ranger/core/runner.py28
-rw-r--r--ranger/defaults/apps.py2
2 files changed, 28 insertions, 2 deletions
diff --git a/ranger/core/runner.py b/ranger/core/runner.py
index 5d97489d..7d433652 100644
--- a/ranger/core/runner.py
+++ b/ranger/core/runner.py
@@ -30,15 +30,18 @@ d: detach the process.
 p: redirect output to the pager
 c: run only the current file (not handled here)
 w: wait for enter-press afterwards
+r: run application with root privilege (requires sudo)
+t: run application in a new terminal window
 (An uppercase key negates the respective lower case flag)
 """
 
 import os
 import sys
 from subprocess import Popen, PIPE
+from ranger.ext.get_executables import get_executables
 
 
-ALLOWED_FLAGS = 'sdpwcSDPWC'
+ALLOWED_FLAGS = 'sdpwcartSDPWCART'
 
 
 def press_enter():
@@ -160,7 +163,6 @@ class Runner(object):
 		wait_for_enter = False
 		devnull = None
 
-		popen_kws['args'] = action
 		if 'shell' not in popen_kws:
 			popen_kws['shell'] = isinstance(action, str)
 		if 'stdout' not in popen_kws:
@@ -189,7 +191,29 @@ class Runner(object):
 		if 'w' in context.flags:
 			if not pipe_output and context.wait: # <-- sanity check
 				wait_for_enter = True
+		if 'r' in context.flags:
+			if 'sudo' not in get_executables():
+				return self._log("Can not run with 'r' flag, sudo is not installed!")
+			if isinstance(action, str):
+				action = 'sudo '+action
+			else:
+				action = ['sudo']+action
+			toggle_ui = True
+			context.wait = True
+		if 't' in context.flags:
+			if 'DISPLAY' not in os.environ:
+				return self._log("Can not run with 't' flag, no display found!")
+			term = os.environ['TERMCMD'] if 'TERMCMD' in os.environ  else os.environ['TERM']
+			if term not in get_executables():
+				term = 'xterm'
+			if isinstance(action, str):
+				action = term+' -e '+action
+			else:
+				action = [term,'-e']+action
+			toggle_ui = False
+			context.wait = False
 
+		popen_kws['args'] = action
 		# Finally, run it
 
 		if toggle_ui:
diff --git a/ranger/defaults/apps.py b/ranger/defaults/apps.py
index 0a68d006..77c66c7b 100644
--- a/ranger/defaults/apps.py
+++ b/ranger/defaults/apps.py
@@ -35,6 +35,8 @@
 #     p   Redirect output to the pager
 #     w   Wait for an Enter-press when the process is done
 #     c   Run the current file only, instead of the selection
+#     r   Run application with root privilege 
+#     t   Run application in a new terminal window
 #
 # To implement flags in this file, you could do this:
 #     context.flags += "d"