From 7fe3e2b6c118508300e08da04f039d21403ff9d0 Mon Sep 17 00:00:00 2001 From: Jim Porter Date: Thu, 28 Oct 2021 08:45:15 -0700 Subject: [PATCH] Support setting comint terminal connection-locally * lisp/comint.el (comint-term-environment): Make it connection-aware. * doc/emacs/misc.texi (Shell Options): Document the above change, and explain how this interacts with 'system-uses-terminfo'. * etc/NEWS: Announce the above change. --- doc/emacs/misc.texi | 12 +++++++++--- etc/NEWS | 8 ++++++++ lisp/comint.el | 13 +++++++------ 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi index 5123a716dc..7e7f7c5e27 100644 --- a/doc/emacs/misc.texi +++ b/doc/emacs/misc.texi @@ -1497,14 +1497,20 @@ Shell Options underlying shell, of course. @vindex comint-terminfo-terminal +@vindex system-uses-terminfo @vindex TERM@r{, environment variable, in sub-shell} Comint mode sets the @env{TERM} environment variable to a safe default value, but this value disables some useful features. For example, color is disabled in applications that use @env{TERM} to determine if color is supported. Therefore, Emacs provides an option -@code{comint-terminfo-terminal}, which you can set to a terminal that -is present in your system's terminfo database, in order to take -advantage of advanced features of that terminal. +@code{comint-terminfo-terminal} to let you choose a terminal with more +advanced features, as defined in your system's terminfo database. +Emacs will use this option as the value for @env{TERM} so long as +@code{system-uses-terminfo} is non-nil. + +Both @code{comint-terminfo-terminal} and @code{system-uses-terminfo} +can be declared as connection-local to adjust these options to match +what a remote system expects (@pxref{Connection Variables}). @node Terminal emulator @subsection Emacs Terminal Emulator diff --git a/etc/NEWS b/etc/NEWS index c1b8adc511..2a8a3f08e7 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -183,6 +183,14 @@ To improve security, if an sql product has ':password-in-comint' set to t, a password supplied via the minibuffer will be sent in-process, as opposed to via the command-line. +** Comint + ++++ +*** 'comint-term-environment' is now aware of connection-local variables. +The option 'comint-terminfo-terminal' and variable +'system-uses-terminfo' can now be set as connection-local variables to +change the terminal used on a remote host. + * New Modes and Packages in Emacs 29.1 diff --git a/lisp/comint.el b/lisp/comint.el index e925b3a4b6..c114bdf758 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -889,12 +889,13 @@ comint-term-environment ;; and there is no way for us to define it here. ;; Some programs that use terminfo get very confused ;; if TERM is not a valid terminal type. - (if (and (boundp 'system-uses-terminfo) system-uses-terminfo) - (list (format "TERM=%s" comint-terminfo-terminal) - "TERMCAP=" - (format "COLUMNS=%d" (window-width))) - (list "TERM=emacs" - (format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width))))) + (with-connection-local-variables + (if system-uses-terminfo + (list (format "TERM=%s" comint-terminfo-terminal) + "TERMCAP=" + (format "COLUMNS=%d" (window-width))) + (list "TERM=emacs" + (format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width)))))) (defun comint-nonblank-p (str) "Return non-nil if STR contains non-whitespace syntax." -- 2.25.1