diff --git a/Lib/emacs.py b/Lib/emacs.py new file mode 100644 index 00000000000..ffce099ac3b --- /dev/null +++ b/Lib/emacs.py @@ -0,0 +1,18 @@ +# Execute Emacs code from a Python interpreter. +# This code should be imported from a Python interpreter that is +# running as an inferior process of Emacs. +# See misc/py-connect.el for the companion Emacs lisp code. +# Author: Terrence M. Brannon. + +start_marker = '+' +end_marker = '~' + +def eval (string): + tmpstr = start_marker + '(' + string + ')' + end_marker + print tmpstr + +def dired (directory): + eval( 'dired ' + '"' + directory + '"' ) + +def buffer_menu (): + eval( 'buffer-menu(buffer-list)' ) diff --git a/Lib/posixpath.py b/Lib/posixpath.py index b178e6728d4..d2bda1059ca 100644 --- a/Lib/posixpath.py +++ b/Lib/posixpath.py @@ -230,3 +230,29 @@ def expanduser(path): return path userhome = pwent[5] return userhome + path[i:] + + +# Expand paths containing shell variable substitutions. +# This is done by piping it through the shell. +# Shell quoting characters (\ " ' `) are protected by a backslash. +# NB: a future version may avoid starting a subprocess and do the +# substitutions internally. This may slightly change the syntax +# for variables. + +def expandvars(path): + if '$' not in path: + return path + q = '' + for c in path: + if c in ('\\', '"', '\'', '`'): + c = '\\' + c + q = q + c + d = '!' + if q == d: + d = '+' + p = posix.popen('cat <<' + d + '\n' + q + '\n' + d + '\n', 'r') + res = p.read() + del p + if res[-1:] == '\n': + res = res[:-1] + return res