summaryrefslogtreecommitdiff
path: root/lisp/shell.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1997-08-22 23:37:38 +0000
committerRichard M. Stallman <rms@gnu.org>1997-08-22 23:37:38 +0000
commitc64d8c5548b574a0b075f54cca77d61e5cbcfc60 (patch)
tree583835d72c15eec697c244b9fff5b3111f135d24 /lisp/shell.el
parente45502331b9c4073da3cc77418676798d32c59fe (diff)
downloademacs-c64d8c5548b574a0b075f54cca77d61e5cbcfc60.tar.gz
(shell-snarf-envar, shell-copy-environment-variable): New functions.
Diffstat (limited to 'lisp/shell.el')
-rw-r--r--lisp/shell.el31
1 files changed, 31 insertions, 0 deletions
diff --git a/lisp/shell.el b/lisp/shell.el
index 9fbfd61e226..c28f1649eb6 100644
--- a/lisp/shell.el
+++ b/lisp/shell.el
@@ -731,6 +731,37 @@ command again."
(setq ds (cdr ds))))
(message "%s" msg)))
+;; This was mostly copied from shell-resync-dirs.
+(defun shell-snarf-envar (var)
+ "Return as a string the shell's value of environment variable VAR."
+ (let* ((cmd (format "printenv '%s'\n" var))
+ (proc (get-buffer-process (current-buffer)))
+ (pmark (process-mark proc)))
+ (goto-char pmark)
+ (insert cmd)
+ (sit-for 0) ; force redisplay
+ (comint-send-string proc cmd)
+ (set-marker pmark (point))
+ (let ((pt (point))) ; wait for 1 line
+ ;; This extra newline prevents the user's pending input from spoofing us.
+ (insert "\n") (backward-char 1)
+ (while (not (looking-at ".+\n"))
+ (accept-process-output proc)
+ (goto-char pt)))
+ (goto-char pmark) (delete-char 1) ; remove the extra newline
+ (buffer-substring (match-beginning 0) (1- (match-end 0)))))
+
+(defun shell-copy-environment-variable (variable)
+ "Copy the environment variable VARIABLE from the subshell to Emacs.
+This command reads the value of the specified environment variable
+in the shell, and sets the same environment variable in Emacs
+\(what `getenv' in Emacvs would return) to that value.
+That value will affect any new subprocesses that you subsequently start
+from Emacs."
+ (interactive (list (read-envvar-name "\
+Copy Shell environment variable to Emacs: ")))
+ (setenv variable (shell-snarf-envar variable)))
+
(defun shell-forward-command (&optional arg)
"Move forward across ARG shell command(s). Does not cross lines.
See `shell-command-regexp'."