[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#12792: 24.2.50; shell-mode renders all its output in a yellow face
From: |
Wolfgang Jenkner |
Subject: |
bug#12792: 24.2.50; shell-mode renders all its output in a yellow face |
Date: |
Sun, 04 Nov 2012 04:27:35 +0100 |
User-agent: |
Gnus/5.130006 (Ma Gnus v0.6) Emacs/24.2.50 (berkeley-unix) |
On Sat, Nov 03 2012, Wolfgang Jenkner wrote:
> On Sat, Nov 03 2012, Eli Zaretskii wrote:
>> SGR parameter 39 means go back to the default foreground color. How
>> can ansi-color not support it and still be useful?
> I'll fix this omission if nobody beats me to it.
Here's a rewrite of `ansi-color-apply-sequence' which implements SGR
codes 39 and 49. It's straightforward but, sadly, uses side-effects all
over the place. At this point, however, I'd just like to know if its
behaviour meets everybody's expectations, so please test it a bit.
Wolfgang
(defun ansi-color-apply-sequence (escape-sequence codes)
"Apply ESCAPE-SEQ to CODES and return the new list of codes.
ESCAPE-SEQ is an escape sequence parsed by `ansi-color-parse-sequence'.
For each new code, the following happens: if it is 1-7, add it to
the list of codes; if it is 21-25 or 27, delete appropriate
parameters from the list of codes; if it is 30-37 resp. 39, the
foreground color code is replaced or added resp. deleted; if it
is 40-47 resp. 49, the background color code is replaced or added
resp. deleted; any other code is discarded together with the old
codes. Finally, the so changed list of codes is returned."
(let ((new-codes (ansi-color-parse-sequence escape-sequence))
(fg (and codes (>= (car codes) 30) (<= (car codes) 37)
(pop codes)))
(bg (and codes (>= (car codes) 40) (<= (car codes) 47)
(pop codes))))
(while new-codes
(let ((new (pop new-codes)))
(cond ((and (>= new 1) (<= new 7))
(unless (memq new codes)
(push new codes)))
((and (= new 22)
(setq codes (remq 1 codes))
nil))
((and (= new 25)
(setq codes (remq 6 codes))
nil))
;; The standard says `21 doubly underlined' while
;; http://en.wikipedia.org/wiki/ANSI_escape_code claims
;; `21 Bright/Bold: off or Underline: Double'.
((and (>= new 21) (<= new 27) (/= new 26))
(setq codes (remq (- new 20) codes)))
((and (>= new 30) (<= new 37))
(setq fg new))
((= new 39)
(setq fg nil))
((and (>= new 40) (<= new 47))
(setq bg new))
((= new 49)
(setq bg nil))
(t
(setq codes nil fg nil bg nil)))))
(when bg
(push bg codes))
(when fg
(push fg codes))
codes))
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Dima Kogan, 2012/11/03
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Chong Yidong, 2012/11/03
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Wolfgang Jenkner, 2012/11/03
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Eli Zaretskii, 2012/11/03
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Wolfgang Jenkner, 2012/11/03
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face,
Wolfgang Jenkner <=
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Dima Kogan, 2012/11/04
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Wolfgang Jenkner, 2012/11/04
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Dima Kogan, 2012/11/04
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Wolfgang Jenkner, 2012/11/04
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Dima Kogan, 2012/11/04
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Wolfgang Jenkner, 2012/11/05
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Wolfgang Jenkner, 2012/11/05
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Dima Kogan, 2012/11/05
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Wolfgang Jenkner, 2012/11/05
- bug#12792: 24.2.50; shell-mode renders all its output in a yellow face, Dima Kogan, 2012/11/05