mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-25 07:28:20 +00:00
In term-mode, handle ANSI codes, specifying italic and other modes
* etc/e/eterm-color.ti: Add new capabilities * lisp/term.el: New faces and variables to support new ANSI modes. (term-termcap-format): Add new capabilities (term-emulate-terminal): When saving cursor, additionally save the new variables. (term--handle-colors-list): Handle ANSI codes, specifying italic other modes. * test/lisp/term-tests.el (ansi-test-strings): Adjust tests.
This commit is contained in:
parent
76895fcd0b
commit
0707fdd36c
8
etc/NEWS
8
etc/NEWS
@ -92,9 +92,11 @@ filters and displayed with the specified color.
|
||||
** term-mode
|
||||
|
||||
---
|
||||
*** Support for ANSI 256-color and 24-bit colors.
|
||||
256-color and 24-bit color codes are now displayed with the specified
|
||||
color.
|
||||
*** Support for ANSI 256-color and 24-bit colors, italic and other fonts.
|
||||
Term-mode can now display 256-color and 24-bit color codes. It can
|
||||
also handle ANSI codes for faint, italic and blinking text, displaying
|
||||
it with new 'ansi-term-faint/italic/slow-blinking/fast-blinking'
|
||||
faces.
|
||||
|
||||
|
||||
* New Modes and Packages in Emacs 29.1
|
||||
|
Binary file not shown.
@ -18,6 +18,7 @@ eterm-color|Emacs term.el terminal emulator term-protocol-version 0.96,
|
||||
msgr,
|
||||
xenl,
|
||||
bel=^G,
|
||||
blink=\E[5m,
|
||||
bold=\E[1m,
|
||||
clear=\E[H\E[J,
|
||||
cr=\r,
|
||||
@ -31,6 +32,7 @@ eterm-color|Emacs term.el terminal emulator term-protocol-version 0.96,
|
||||
cup=\E[%i%p1%d;%p2%dH,
|
||||
cuu1=\E[A,
|
||||
cuu=\E[%p1%dA,
|
||||
dim=\E[2m,
|
||||
dch1=\E[P,
|
||||
dch=\E[%p1%dP,
|
||||
dl1=\E[M,
|
||||
@ -60,6 +62,7 @@ eterm-color|Emacs term.el terminal emulator term-protocol-version 0.96,
|
||||
rc=\E8,
|
||||
rev=\E[7m,
|
||||
ri=\EM,
|
||||
ritm=\E[23m,
|
||||
rmir=\E[4l,
|
||||
rmso=\E[27m,
|
||||
rmul=\E[24m,
|
||||
@ -68,6 +71,7 @@ eterm-color|Emacs term.el terminal emulator term-protocol-version 0.96,
|
||||
setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
|
||||
setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
|
||||
sgr0=\E[m,
|
||||
sitm=\E[3m,
|
||||
smir=\E[4h,
|
||||
smul=\E[4m,
|
||||
smso=\E[7m,
|
||||
|
Binary file not shown.
105
lisp/term.el
105
lisp/term.el
@ -711,10 +711,14 @@ Buffer local variable.")
|
||||
(defvar term-ansi-at-save-pwd nil)
|
||||
(defvar term-ansi-at-save-anon nil)
|
||||
(defvar term-ansi-current-bold nil)
|
||||
(defvar term-ansi-current-faint nil)
|
||||
(defvar term-ansi-current-italic nil)
|
||||
(defvar term-ansi-current-underline nil)
|
||||
(defvar term-ansi-current-slow-blink nil)
|
||||
(defvar term-ansi-current-fast-blink nil)
|
||||
(defvar term-ansi-current-color 0)
|
||||
(defvar term-ansi-face-already-done nil)
|
||||
(defvar term-ansi-current-bg-color 0)
|
||||
(defvar term-ansi-current-underline nil)
|
||||
(defvar term-ansi-current-reverse nil)
|
||||
(defvar term-ansi-current-invisible nil)
|
||||
|
||||
@ -769,12 +773,36 @@ Buffer local variable.")
|
||||
:group 'term
|
||||
:version "28.1")
|
||||
|
||||
(defface term-faint
|
||||
'((t :inherit ansi-color-faint))
|
||||
"Default face to use for faint text."
|
||||
:group 'term
|
||||
:version "28.1")
|
||||
|
||||
(defface term-italic
|
||||
'((t :inherit ansi-color-italic))
|
||||
"Default face to use for italic text."
|
||||
:group 'term
|
||||
:version "28.1")
|
||||
|
||||
(defface term-underline
|
||||
'((t :inherit ansi-color-underline))
|
||||
"Default face to use for underlined text."
|
||||
:group 'term
|
||||
:version "28.1")
|
||||
|
||||
(defface term-slow-blink
|
||||
'((t :inherit ansi-color-slow-blink))
|
||||
"Default face to use for slowly blinking text."
|
||||
:group 'term
|
||||
:version "28.1")
|
||||
|
||||
(defface term-fast-blink
|
||||
'((t :inherit ansi-color-fast-blink))
|
||||
"Default face to use for rapidly blinking text."
|
||||
:group 'term
|
||||
:version "28.1")
|
||||
|
||||
(defface term-color-black
|
||||
'((t :inherit ansi-color-black))
|
||||
"Face used to render black color code."
|
||||
@ -1038,8 +1066,12 @@ is buffer-local."
|
||||
|
||||
(defun term-ansi-reset ()
|
||||
(setq term-current-face 'term)
|
||||
(setq term-ansi-current-underline nil)
|
||||
(setq term-ansi-current-bold nil)
|
||||
(setq term-ansi-current-faint nil)
|
||||
(setq term-ansi-current-italic nil)
|
||||
(setq term-ansi-current-underline nil)
|
||||
(setq term-ansi-current-slow-blink nil)
|
||||
(setq term-ansi-current-fast-blink nil)
|
||||
(setq term-ansi-current-reverse nil)
|
||||
(setq term-ansi-current-color 0)
|
||||
(setq term-ansi-current-invisible nil)
|
||||
@ -1581,6 +1613,7 @@ Using \"emacs\" loses, because bash disables editing if $TERM == emacs.")
|
||||
:nd=\\E[C:up=\\E[A:ce=\\E[K:ho=\\E[H:pt\
|
||||
:al=\\E[L:dl=\\E[M:DL=\\E[%%dM:AL=\\E[%%dL:cs=\\E[%%i%%d;%%dr:sf=^J\
|
||||
:dc=\\E[P:DC=\\E[%%dP:IC=\\E[%%d@:im=\\E[4h:ei=\\E[4l:mi:\
|
||||
:mb=\\E[5m:mh=\\E[2m:ZR=\\E[23m:ZH=\\E[3m\
|
||||
:so=\\E[7m:se=\\E[m:us=\\E[4m:ue=\\E[m:md=\\E[1m:mr=\\E[7m:me=\\E[m\
|
||||
:UP=\\E[%%dA:DO=\\E[%%dB:LE=\\E[%%dD:RI=\\E[%%dC\
|
||||
:kl=\\EOD:kd=\\EOB:kr=\\EOC:ku=\\EOA:kN=\\E[6~:kP=\\E[5~:@7=\\E[4~:kh=\\E[1~\
|
||||
@ -3105,30 +3138,34 @@ See `term-prompt-regexp'."
|
||||
(term-horizontal-column)
|
||||
term-ansi-current-bg-color
|
||||
term-ansi-current-bold
|
||||
term-ansi-current-faint
|
||||
term-ansi-current-italic
|
||||
term-ansi-current-underline
|
||||
term-ansi-current-slow-blink
|
||||
term-ansi-current-fast-blink
|
||||
term-ansi-current-color
|
||||
term-ansi-current-invisible
|
||||
term-ansi-current-reverse
|
||||
term-ansi-current-underline
|
||||
term-current-face)))
|
||||
(?8 ;; Restore cursor (terminfo: rc, [ctlseqs]
|
||||
;; "DECRC").
|
||||
(when term-saved-cursor
|
||||
(term-goto (nth 0 term-saved-cursor)
|
||||
(nth 1 term-saved-cursor))
|
||||
(setq term-ansi-current-bg-color
|
||||
(nth 2 term-saved-cursor)
|
||||
term-ansi-current-bold
|
||||
(nth 3 term-saved-cursor)
|
||||
term-ansi-current-color
|
||||
(nth 4 term-saved-cursor)
|
||||
term-ansi-current-invisible
|
||||
(nth 5 term-saved-cursor)
|
||||
term-ansi-current-reverse
|
||||
(nth 6 term-saved-cursor)
|
||||
term-ansi-current-underline
|
||||
(nth 7 term-saved-cursor)
|
||||
term-current-face
|
||||
(nth 8 term-saved-cursor))))
|
||||
(pcase-setq
|
||||
`( ,_ ,_
|
||||
,term-ansi-current-bg-color
|
||||
,term-ansi-current-bold
|
||||
,term-ansi-current-faint
|
||||
,term-ansi-current-italic
|
||||
,term-ansi-current-underline
|
||||
,term-ansi-current-slow-blink
|
||||
,term-ansi-current-fast-blink
|
||||
,term-ansi-current-color
|
||||
,term-ansi-current-invisible
|
||||
,term-ansi-current-reverse
|
||||
,term-current-face)
|
||||
term-saved-cursor)))
|
||||
(?c ;; \Ec - Reset (terminfo: rs1, [ctlseqs] "RIS").
|
||||
;; This is used by the "clear" program.
|
||||
(term-reset-terminal))
|
||||
@ -3316,11 +3353,20 @@ otherwise use the current foreground color."
|
||||
(while parameters
|
||||
(pcase (pop parameters)
|
||||
(1 (setq term-ansi-current-bold t)) ; (terminfo: bold)
|
||||
(2 (setq term-ansi-current-faint t)) ; (terminfo: dim)
|
||||
(3 (setq term-ansi-current-italic t)) ; (terminfo: sitm)
|
||||
(4 (setq term-ansi-current-underline t)) ; (terminfo: smul)
|
||||
(5 (setq term-ansi-current-bold t)) ; (terminfo: bold)
|
||||
(5 (setq term-ansi-current-slow-blink t)) ; (terminfo: blink)
|
||||
(6 (setq term-ansi-current-fast-blink t))
|
||||
(7 (setq term-ansi-current-reverse t)) ; (terminfo: smso, rev)
|
||||
(8 (setq term-ansi-current-invisible t)) ; (terminfo: invis)
|
||||
(21 (setq term-ansi-current-bold nil))
|
||||
(22 (setq term-ansi-current-bold nil)
|
||||
(setq term-ansi-current-faint nil))
|
||||
(23 (setq term-ansi-current-italic nil)) ; (terminfo: ritm)
|
||||
(24 (setq term-ansi-current-underline nil)) ; (terminfo: rmul)
|
||||
(25 (setq term-ansi-current-slow-blink nil)
|
||||
(setq term-ansi-current-fast-blink nil))
|
||||
(27 (setq term-ansi-current-reverse nil)) ; (terminfo: rmso)
|
||||
|
||||
;; Foreground (terminfo: setaf)
|
||||
@ -3398,13 +3444,20 @@ otherwise use the current foreground color."
|
||||
,@(unless term-ansi-current-invisible
|
||||
(list :inverse-video term-ansi-current-reverse)))))
|
||||
|
||||
(when term-ansi-current-bold
|
||||
(setq term-current-face
|
||||
`(,term-current-face :inherit term-bold)))
|
||||
|
||||
(when term-ansi-current-underline
|
||||
(setq term-current-face
|
||||
`(,term-current-face :inherit term-underline))))
|
||||
(setq term-current-face
|
||||
`(,term-current-face
|
||||
,@(when term-ansi-current-bold
|
||||
'(term-bold))
|
||||
,@(when term-ansi-current-faint
|
||||
'(term-faint))
|
||||
,@(when term-ansi-current-italic
|
||||
'(term-italic))
|
||||
,@(when term-ansi-current-underline
|
||||
'(term-underline))
|
||||
,@(when term-ansi-current-slow-blink
|
||||
'(term-slow-blink))
|
||||
,@(when term-ansi-current-fast-blink
|
||||
'(term-fast-blink)))))
|
||||
|
||||
|
||||
;; Handle a character assuming (eq terminal-state 2) -
|
||||
@ -3490,7 +3543,7 @@ otherwise use the current foreground color."
|
||||
|
||||
;; Modified to allow ansi coloring -mm
|
||||
;; \E[m - Set/reset modes, set bg/fg
|
||||
;;(terminfo: smso,rmso,smul,rmul,rev,bold,sgr0,invis,op,setab,setaf)
|
||||
;;(terminfo: smso,rmso,smul,rmul,rev,bold,dim,sitm,ritm,blink,sgr0,invis,op,setab,setaf)
|
||||
((eq char ?m)
|
||||
(term--handle-colors-list params))
|
||||
|
||||
|
@ -48,44 +48,44 @@
|
||||
|
||||
(defvar ansi-test-strings
|
||||
`(("\e[33mHello World\e[0m"
|
||||
,(propertize "Hello World" 'font-lock-face yellow-fg-props))
|
||||
,(propertize "Hello World" 'font-lock-face `(,yellow-fg-props)))
|
||||
("\e[43mHello World\e[0m"
|
||||
,(propertize "Hello World" 'font-lock-face yellow-bg-props))
|
||||
,(propertize "Hello World" 'font-lock-face `(,yellow-bg-props)))
|
||||
("\e[93mHello World\e[0m"
|
||||
,(propertize "Hello World" 'font-lock-face bright-yellow-fg-props))
|
||||
,(propertize "Hello World" 'font-lock-face `(,bright-yellow-fg-props)))
|
||||
("\e[103mHello World\e[0m"
|
||||
,(propertize "Hello World" 'font-lock-face bright-yellow-bg-props))
|
||||
,(propertize "Hello World" 'font-lock-face `(,bright-yellow-bg-props)))
|
||||
("\e[1;33mHello World\e[0m"
|
||||
,(propertize "Hello World" 'font-lock-face
|
||||
`(,yellow-fg-props :inherit term-bold))
|
||||
`(,yellow-fg-props term-bold))
|
||||
,(propertize "Hello World" 'font-lock-face
|
||||
`(,bright-yellow-fg-props :inherit term-bold)))
|
||||
`(,bright-yellow-fg-props term-bold)))
|
||||
("\e[33;1mHello World\e[0m"
|
||||
,(propertize "Hello World" 'font-lock-face
|
||||
`(,yellow-fg-props :inherit term-bold))
|
||||
`(,yellow-fg-props term-bold))
|
||||
,(propertize "Hello World" 'font-lock-face
|
||||
`(,bright-yellow-fg-props :inherit term-bold)))
|
||||
`(,bright-yellow-fg-props term-bold)))
|
||||
("\e[1m\e[33mHello World\e[0m"
|
||||
,(propertize "Hello World" 'font-lock-face
|
||||
`(,yellow-fg-props :inherit term-bold))
|
||||
`(,yellow-fg-props term-bold))
|
||||
,(propertize "Hello World" 'font-lock-face
|
||||
`(,bright-yellow-fg-props :inherit term-bold)))
|
||||
`(,bright-yellow-fg-props term-bold)))
|
||||
("\e[33m\e[1mHello World\e[0m"
|
||||
,(propertize "Hello World" 'font-lock-face
|
||||
`(,yellow-fg-props :inherit term-bold))
|
||||
`(,yellow-fg-props term-bold))
|
||||
,(propertize "Hello World" 'font-lock-face
|
||||
`(,bright-yellow-fg-props :inherit term-bold)))
|
||||
`(,bright-yellow-fg-props term-bold)))
|
||||
("\e[38;5;3;1mHello World\e[0m"
|
||||
,(propertize "Hello World" 'font-lock-face
|
||||
`(,yellow-fg-props :inherit term-bold))
|
||||
`(,yellow-fg-props term-bold))
|
||||
,(propertize "Hello World" 'font-lock-face
|
||||
`(,bright-yellow-fg-props :inherit term-bold)))
|
||||
`(,bright-yellow-fg-props term-bold)))
|
||||
("\e[38;5;123;1mHello World\e[0m"
|
||||
,(propertize "Hello World" 'font-lock-face
|
||||
`(,custom-color-fg-props :inherit term-bold)))
|
||||
`(,custom-color-fg-props term-bold)))
|
||||
("\e[38;2;135;255;255;1mHello World\e[0m"
|
||||
,(propertize "Hello World" 'font-lock-face
|
||||
`(,custom-color-fg-props :inherit term-bold)))))
|
||||
`(,custom-color-fg-props term-bold)))))
|
||||
|
||||
(defun term-test-screen-from-input (width height input &optional return-var)
|
||||
(with-temp-buffer
|
||||
|
Loading…
Reference in New Issue
Block a user