Mercurial > emacs
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)))) |