]> git.eshelyaron.com Git - emacs.git/commitdiff
Add option to configure comint TERM
authorAllen Li <darkfeline@felesatra.moe>
Fri, 15 Dec 2017 09:30:25 +0000 (11:30 +0200)
committerEli Zaretskii <eliz@gnu.org>
Fri, 15 Dec 2017 09:30:25 +0000 (11:30 +0200)
* lisp/comint.el (comint-terminfo-terminal): New defcustom.
(comint-term-environment): New function for setting terminal options
(comint-exec-1): Use comint-term-environment.  (Bug#29583)
* lisp/progmodes/compile.el (compilation-start): Use comint-term-environment.

* etc/NEWS:
* doc/emacs/misc.texi (Shell Options): Document the new option.

doc/emacs/misc.texi
etc/NEWS
lisp/comint.el
lisp/progmodes/compile.el

index 6ad5fbafdd6c4a287277c2f94522803b5a9afbe9..b6b396af8f51772554ee46f5bb25f067ce35521d 100644 (file)
@@ -1396,6 +1396,15 @@ directory stack if they are not already on it
 (@code{shell-pushd-dunique}).  The values you choose should match the
 underlying shell, of course.
 
+@vindex comint-terminfo-terminal
+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 for 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.
+
 @node Terminal emulator
 @subsection Emacs Terminal Emulator
 @findex term
index 6151543ee4e38b7ade1f743e16fb4617b4c0cee5..784c608041b9bcae6d2cb31a9634776d659860b9 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -812,6 +812,13 @@ whose content matches a regexp; bound to '% g'.
 *** New user option 'comint-move-point-for-matching-input' to control
 where to place point after 'C-c M-r' and 'C-c M-s'.
 
++++
+*** New user option 'comint-terminfo-terminal'.
+This option allows control of the value of the TERM environment
+variable Emacs puts into the environment of the Comint mode and its
+derivatives, such as Shell mode and Compilation Shell minor-mode.  The
+default is "dumb", for compatibility with previous behavior.
+
 ** Compilation mode
 
 ---
index dcf1ff794f9faf6f520d4ecccb56eaeaa64a1cc7..7c56c259c491801881e5f07c406e2863a2d06cbf 100644 (file)
@@ -459,6 +459,11 @@ executed once when the buffer is created."
   :type 'hook
   :group 'comint)
 
+(defcustom comint-terminfo-terminal "dumb"
+  "Value to use for TERM when the system uses terminfo."
+  :type 'string
+  :group 'comint)
+
 (defvar comint-mode-map
   (let ((map (make-sparse-keymap)))
     ;; Keys:
@@ -817,19 +822,7 @@ series of processes in the same Comint buffer.  The hook
 (defun comint-exec-1 (name buffer command switches)
   (let ((process-environment
         (nconc
-         ;; If using termcap, we specify `emacs' as the terminal type
-         ;; because that lets us specify a width.
-         ;; If using terminfo, we specify `dumb' because that is
-         ;; a defined terminal type.  `emacs' is not a defined terminal type
-         ;; 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.
-         ;; ;; There is similar code in compile.el.
-         (if (and (boundp 'system-uses-terminfo) system-uses-terminfo)
-             (list "TERM=dumb" "TERMCAP="
-                   (format "COLUMNS=%d" (window-width)))
-           (list "TERM=emacs"
-                 (format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width))))
+          (comint-term-environment)
          (list (format "INSIDE_EMACS=%s,comint" emacs-version))
          process-environment))
        (default-directory
@@ -858,6 +851,22 @@ series of processes in the same Comint buffer.  The hook
        (set-process-coding-system proc decoding encoding))
     proc))
 
+(defun comint-term-environment ()
+  "Return an environment variable list for terminal configuration."
+  ;; If using termcap, we specify `emacs' as the terminal type
+  ;; because that lets us specify a width.
+  ;; If using terminfo, we default to `dumb' because that is
+  ;; a defined terminal type.  `emacs' is not a defined terminal type
+  ;; 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)))))
+
 (defun comint-nonblank-p (str)
   "Return non-nil if STR contains non-whitespace syntax."
   (not (string-match "\\`\\s *\\'" str)))
index 4cce47e5d8c7ede10158f0891d3269a1e38867a1..c68001d2366549db257940f4941f42ca01fe8142 100644 (file)
@@ -1746,13 +1746,7 @@ Returns the compilation buffer created."
       (let ((process-environment
             (append
              compilation-environment
-             (if (if (boundp 'system-uses-terminfo);`If' for compiler warning.
-                     system-uses-terminfo)
-                 (list "TERM=dumb" "TERMCAP="
-                       (format "COLUMNS=%d" (window-width)))
-               (list "TERM=emacs"
-                     (format "TERMCAP=emacs:co#%d:tc=unknown:"
-                             (window-width))))
+              (comint-term-environment)
              (list (format "INSIDE_EMACS=%s,compile" emacs-version))
              (copy-sequence process-environment))))
        (set (make-local-variable 'compilation-arguments)