all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Wolfgang Jenkner <wjenkner@inode.at>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 12792@debbugs.gnu.org, dima@secretsauce.net
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	[thread overview]
Message-ID: <85hap6yre0.fsf@iznogoud.viz> (raw)
In-Reply-To: <871ugbxdyr.fsf@secretsauce.net>

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))





  reply	other threads:[~2012-11-04  3:27 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-03  8:55 bug#12792: 24.2.50; shell-mode renders all its output in a yellow face Dima Kogan
2012-11-03 11:16 ` Chong Yidong
2012-11-03 18:08   ` Dima Kogan
2012-11-03 15:37 ` Wolfgang Jenkner
2012-11-03 16:32   ` Eli Zaretskii
2012-11-03 17:59     ` Wolfgang Jenkner
2012-11-04  3:27       ` Wolfgang Jenkner [this message]
2012-11-04  7:45         ` Dima Kogan
2012-11-04 13:49           ` Wolfgang Jenkner
2012-11-04 20:24             ` Dima Kogan
2012-11-04 23:39               ` Wolfgang Jenkner
2012-11-05  3:23                 ` Dima Kogan
2012-11-05 15:00                   ` Wolfgang Jenkner
2012-11-05 15:25                     ` Wolfgang Jenkner
2012-11-05 23:57                     ` Dima Kogan
2012-11-06  1:24                       ` Wolfgang Jenkner
2012-11-06  1:31                         ` Dima Kogan
2012-11-09  1:50                           ` Wolfgang Jenkner
2012-11-09 17:30                             ` Stefan Monnier
2012-11-09 18:20                               ` Wolfgang Jenkner
2012-11-09 20:37                                 ` Stefan Monnier
2012-11-17 15:21 ` Paul Eggert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=85hap6yre0.fsf@iznogoud.viz \
    --to=wjenkner@inode.at \
    --cc=12792@debbugs.gnu.org \
    --cc=dima@secretsauce.net \
    --cc=eliz@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.