Re: Automating remote emacsclient setup

Michael Albinus <[email protected]> Tue, 12 May 2026 19:37:37 +0200
Newsgroups gmane.emacs.tramp
Message-ID <[email protected]>
--=-=-=
Content-Type: text/plain

Joel Reicher <[email protected]> writes:

Hi Joel,

>> Perhaps you contact Jonas and ask about? For example, it could
>> support the old mechanism via standard output/input, and the new
>> mechanism alternatively.
>
> I will do that, but notwithstanding what you said about you yourself
> not using emacsclient much, I think there is one aspect that is the
> "responsibility" of Tramp, and that is to set the EMACSCLIENT_TRAMP
> environment variable on initialisation of a remote shell. It needs to
> be set to the same remote identifier used to open the shell,
> particularly for an ad-hoc multi-hop sudo. (I can explain why I
> believe this to be the case, if needed.)
>
> What's the easiest way of making that code change? I'm fairly sure I'm
> right about it.

Something like the appended poatch?

> Thanks and regards,
>
>       - Joel

Best regards, Michael.


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment
Content-Transfer-Encoding: quoted-printable

diff --git a/lisp/tramp-sh.el b/lisp/tramp-sh.el
index 92002b85..8d6028d1 100644
=2D-- a/lisp/tramp-sh.el
+++ b/lisp/tramp-sh.el
@@ -3091,6 +3091,9 @@ will be used."
 			(if (string-search "=3D" elt)
 			    (setq env (append env `(,elt)))
 			  (setq uenv (cons elt uenv))))))
+	     (env (setenv-internal
+		   env "EMACSCLIENT_TRAMP"
+		   (tramp-make-tramp-file-name v 'noloc) 'keep))
 	     (env (setenv-internal
 		   env "INSIDE_EMACS" (tramp-inside-emacs) 'keep))
 	     ;; Environment is too large.  Keep it here.
@@ -3340,6 +3343,9 @@ will be used."
             (if (string-search "=3D" elt)
                 (setq env (append env `(,elt)))
               (setq uenv (cons elt uenv)))))
+      (setq env (setenv-internal
+		 env "EMACSCLIENT_TRAMP"
+		 (tramp-make-tramp-file-name v 'noloc) 'keep))
       (setq env (setenv-internal env "INSIDE_EMACS" (tramp-inside-emacs) =
'keep))
       (when env
 	(setq command
diff --git a/lisp/tramp.el b/lisp/tramp.el
index 6219d097..578e199f 100644
=2D-- a/lisp/tramp.el
+++ b/lisp/tramp.el
@@ -1528,6 +1528,9 @@ The PATH environment variable should be set via `tra=
mp-remote-path'.
=20
 The TERM environment variable should be set via `tramp-terminal-type'.
=20
+The EMACSCLIENT_TRAMP environment variable will be set according to the
+connection.
+
 The INSIDE_EMACS environment variable will automatically be set
 based on the Tramp and Emacs versions, and should not be set here."
   :version "26.1"
@@ -5509,6 +5512,12 @@ processes."
 	   (env (if sh-file-name-handler-p
 		    (setenv-internal env "TERM" tramp-terminal-type 'keep)
 		  env))
+	   ;; Add EMACSCLIENT_TRAMP.
+	   (env (if sh-file-name-handler-p
+		    (setenv-internal
+		     env "EMACSCLIENT_TRAMP"
+		     (tramp-make-tramp-file-name v 'noloc) 'keep)
+		  env))
 	   ;; Add INSIDE_EMACS.
 	   (env (setenv-internal env "INSIDE_EMACS" (tramp-inside-emacs) 'keep))
 	   (env (mapcar #'tramp-shell-quote-argument (delq nil env)))

--=-=-=--