GNU bug report logs -
#12792
24.2.50; shell-mode renders all its output in a yellow face
Previous Next
Reported by: Dima Kogan <dima <at> secretsauce.net>
Date: Sat, 3 Nov 2012 08:59:02 UTC
Severity: normal
Tags: patch
Found in version 24.2.50
Done: Paul Eggert <eggert <at> cs.ucla.edu>
Bug is archived. No further changes may be made.
Full log
Message #23 received at 12792 <at> debbugs.gnu.org (full text, mbox):
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))
This bug report was last modified 12 years and 248 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.