summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--editor.py27
1 files changed, 20 insertions, 7 deletions
diff --git a/editor.py b/editor.py
index cf0a5ee5..23aab542 100644
--- a/editor.py
+++ b/editor.py
@@ -14,6 +14,7 @@
14# limitations under the License. 14# limitations under the License.
15 15
16import os 16import os
17import re
17import sys 18import sys
18import subprocess 19import subprocess
19import tempfile 20import tempfile
@@ -38,9 +39,10 @@ class Editor(object):
38 if e: 39 if e:
39 return e 40 return e
40 41
41 e = cls.globalConfig.GetString('core.editor') 42 if cls.globalConfig:
42 if e: 43 e = cls.globalConfig.GetString('core.editor')
43 return e 44 if e:
45 return e
44 46
45 e = os.getenv('VISUAL') 47 e = os.getenv('VISUAL')
46 if e: 48 if e:
@@ -69,21 +71,32 @@ least one of these before using this command."""
69 Returns: 71 Returns:
70 new value of edited text; None if editing did not succeed 72 new value of edited text; None if editing did not succeed
71 """ 73 """
72 editor = cls._GetEditor().split() 74 editor = cls._GetEditor()
75 if editor == ':':
76 return data
77
73 fd, path = tempfile.mkstemp() 78 fd, path = tempfile.mkstemp()
74 try: 79 try:
75 os.write(fd, data) 80 os.write(fd, data)
76 os.close(fd) 81 os.close(fd)
77 fd = None 82 fd = None
78 83
84 if re.compile("^.*[$ \t'].*$").match(editor):
85 args = [editor + ' "$@"']
86 shell = True
87 else:
88 args = [editor]
89 shell = False
90 args.append(path)
91
79 try: 92 try:
80 rc = subprocess.Popen(editor + [path]).wait() 93 rc = subprocess.Popen(args, shell=shell).wait()
81 except OSError, e: 94 except OSError, e:
82 raise EditorError('editor failed, %s: %s %s' 95 raise EditorError('editor failed, %s: %s %s'
83 % (str(e), cls._GetEditor(), path)) 96 % (str(e), editor, path))
84 if rc != 0: 97 if rc != 0:
85 raise EditorError('editor failed with exit status %d: %s %s' 98 raise EditorError('editor failed with exit status %d: %s %s'
86 % (rc, cls._GetEditor(), path)) 99 % (rc, editor, path))
87 100
88 fd2 = open(path) 101 fd2 = open(path)
89 try: 102 try: