comparison lisp/shell.el @ 19476:4ae9466b064e

(shell-snarf-envar, shell-copy-environment-variable): New functions.
author Richard M. Stallman <rms@gnu.org>
date Fri, 22 Aug 1997 23:37:38 +0000
parents 41215527a262
children 4344b744de2f
comparison
equal deleted inserted replaced
19475:c8c9212a86a7 19476:4ae9466b064e
729 (setcar ds dir)) 729 (setcar ds dir))
730 (setq msg (concat msg (directory-file-name dir) " ")) 730 (setq msg (concat msg (directory-file-name dir) " "))
731 (setq ds (cdr ds)))) 731 (setq ds (cdr ds))))
732 (message "%s" msg))) 732 (message "%s" msg)))
733 733
734 ;; This was mostly copied from shell-resync-dirs.
735 (defun shell-snarf-envar (var)
736 "Return as a string the shell's value of environment variable VAR."
737 (let* ((cmd (format "printenv '%s'\n" var))
738 (proc (get-buffer-process (current-buffer)))
739 (pmark (process-mark proc)))
740 (goto-char pmark)
741 (insert cmd)
742 (sit-for 0) ; force redisplay
743 (comint-send-string proc cmd)
744 (set-marker pmark (point))
745 (let ((pt (point))) ; wait for 1 line
746 ;; This extra newline prevents the user's pending input from spoofing us.
747 (insert "\n") (backward-char 1)
748 (while (not (looking-at ".+\n"))
749 (accept-process-output proc)
750 (goto-char pt)))
751 (goto-char pmark) (delete-char 1) ; remove the extra newline
752 (buffer-substring (match-beginning 0) (1- (match-end 0)))))
753
754 (defun shell-copy-environment-variable (variable)
755 "Copy the environment variable VARIABLE from the subshell to Emacs.
756 This command reads the value of the specified environment variable
757 in the shell, and sets the same environment variable in Emacs
758 \(what `getenv' in Emacvs would return) to that value.
759 That value will affect any new subprocesses that you subsequently start
760 from Emacs."
761 (interactive (list (read-envvar-name "\
762 Copy Shell environment variable to Emacs: ")))
763 (setenv variable (shell-snarf-envar variable)))
764
734 (defun shell-forward-command (&optional arg) 765 (defun shell-forward-command (&optional arg)
735 "Move forward across ARG shell command(s). Does not cross lines. 766 "Move forward across ARG shell command(s). Does not cross lines.
736 See `shell-command-regexp'." 767 See `shell-command-regexp'."
737 (interactive "p") 768 (interactive "p")
738 (let ((limit (save-excursion (end-of-line nil) (point)))) 769 (let ((limit (save-excursion (end-of-line nil) (point))))