From c64d8c5548b574a0b075f54cca77d61e5cbcfc60 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Fri, 22 Aug 1997 23:37:38 +0000 Subject: [PATCH] (shell-snarf-envar, shell-copy-environment-variable): New functions. --- lisp/shell.el | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) 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'." -- 2.39.2