emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 5126b7d: Support $ENV in Tramp


From: Michael Albinus
Subject: [Emacs-diffs] master 5126b7d: Support $ENV in Tramp
Date: Tue, 9 Aug 2016 09:50:29 +0000 (UTC)

branch: master
commit 5126b7d6c201f95fde0d817a64620d152c1c15e1
Author: Michael Albinus <address@hidden>
Commit: Michael Albinus <address@hidden>

    Support $ENV in Tramp
    
    * doc/misc/tramp.texi (Remote processes): Explain setting $ENV.
    
    * etc/NEWS: Explain the "ENV" environment variable in
    `tramp-remote-process-environment'.
    
    * lisp/net/tramp-sh.el (tramp-remote-process-environment): Add "ENV=''".
    (tramp-open-shell): Read $ENV value from
    `tramp-remote-process-environment'.
    (tramp-open-connection-setup-interactive-shell): Set values in
    proper order.
---
 doc/misc/tramp.texi  |   20 +++++++++++++++-----
 etc/NEWS             |    4 ++++
 lisp/net/tramp-sh.el |   20 ++++++++++----------
 3 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index 2c41ddd..3751828 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -2369,9 +2369,9 @@ program's environment for the remote host.
 structured similar to @code{process-environment}, where each element
 is a string of the form @samp{ENVVARNAME=VALUE}.
 
-To avoid any conflicts with local host variables set through local
-configuration files, such as @file{~/.profile}, use @samp{ENVVARNAME=}
-to unset them for the remote environment.
+To avoid any conflicts with local host environment variables set
+through local configuration files, such as @file{~/.profile}, use
address@hidden to unset them for the remote environment.
 
 @noindent
 Use @code{add-to-list} to add entries:
@@ -2383,8 +2383,8 @@ Use @code{add-to-list} to add entries:
 Modifying or deleting already existing values in the
 @code{tramp-remote-process-environment} list may not be feasible on
 restricted remote hosts.  For example, some system administrators
-disallow changing @env{HISTORY} variable.  To accommodate such
-restrictions when using @value{tramp}, fix the
+disallow changing @env{HISTORY} environment variable.  To accommodate
+such restrictions when using @value{tramp}, fix the
 @code{tramp-remote-process-environment} by the following code in the
 local @file{.emacs} file:
 
@@ -2394,6 +2394,16 @@ local @file{.emacs} file:
   (setq tramp-remote-process-environment process-environment))
 @end lisp
 
+Setting the @env{ENV} environment variable instructs some shells to
+read an initialization file.  Per default, @value{tramp} has disabled
+this.  You could overwrite this behaviour by evaluating
+
address@hidden
+(let ((process-environment tramp-remote-process-environment))
+  (setenv "ENV" "$HOME/.profile")
+  (setq tramp-remote-process-environment process-environment))
address@hidden lisp
+
 @value{tramp} does not use the defaults specified in
 @code{process-environment} for running @code{process-file} or
 @code{start-file-process} on remote hosts.  When values from
diff --git a/etc/NEWS b/etc/NEWS
index 0a202cc..d62dcac 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -358,6 +358,10 @@ different group ID.
 *** New connection method "gdrive", which allows to access Google
 Drive onsite repositories.
 
++++
+Setting the "ENV" environment variable in `tramp-remote-process-environment'
+enables reading of shell initialization files.
+
 ---
 ** 'auto-revert-use-notify' is set back to t in 'global-auto-revert-mode'.
 
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index f104473..5cc239a 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -546,7 +546,7 @@ the list by the special value `tramp-own-remote-path'."
 
 ;;;###tramp-autoload
 (defcustom tramp-remote-process-environment
-  `("TMOUT=0" "LC_CTYPE=''"
+  `("ENV=''" "TMOUT=0" "LC_CTYPE=''"
     ,(format "TERM=%s" tramp-terminal-type)
     ,(format "INSIDE_EMACS='%s,tramp:%s'" emacs-version tramp-version)
     "CDPATH=" "HISTORY=" "MAIL=" "MAILCHECK=" "MAILPATH=" "PAGER=cat"
@@ -560,7 +560,7 @@ which might have been set in the init files like ~/.profile.
 Special handling is applied to the PATH environment, which should
 not be set here. Instead, it should be set via `tramp-remote-path'."
   :group 'tramp
-  :version "24.4"
+  :version "25.2"
   :type '(repeat string))
 
 ;;;###tramp-autoload
@@ -3935,7 +3935,8 @@ file exists and nonzero exit status otherwise."
       ;; $HISTFILE is set according to `tramp-histfile-override'.
       (tramp-send-command
        vec (format
-           "exec env ENV='' %s PROMPT_COMMAND='' PS1=%s PS2='' PS3='' %s %s"
+           "exec env ENV=%s %s PROMPT_COMMAND='' PS1=%s PS2='' PS3='' %s %s"
+            (or (getenv-internal "ENV" tramp-remote-process-environment) "")
            (if (stringp tramp-histfile-override)
                (format "HISTFILE=%s"
                        (tramp-shell-quote-argument tramp-histfile-override))
@@ -4153,16 +4154,15 @@ process to set up.  VEC specifies the connection."
   ;; Set the environment.
   (tramp-message vec 5 "Setting default environment")
 
-  (let ((env (append `(,(tramp-get-remote-locale vec))
-                    (copy-sequence tramp-remote-process-environment)))
-       unset vars item)
-    (while env
-      (setq item (split-string (car env) "=" 'omit))
+  (let (unset vars)
+    (dolist (item (reverse
+                  (append `(,(tramp-get-remote-locale vec))
+                          (copy-sequence tramp-remote-process-environment))))
+      (setq item (split-string item "=" 'omit))
       (setcdr item (mapconcat 'identity (cdr item) "="))
       (if (and (stringp (cdr item)) (not (string-equal (cdr item) "")))
          (push (format "%s %s" (car item) (cdr item)) vars)
-       (push (car item) unset))
-      (setq env (cdr env)))
+       (push (car item) unset)))
     (when vars
       (tramp-send-command
        vec



reply via email to

[Prev in Thread] Current Thread [Next in Thread]