Mercurial > emacs
annotate lisp/ansi-color.el @ 83108:c7a76f7d323c
Fix error on deleting an emacsclient terminal (Dan Nicolaescu).
lisp/server.el (server-delete-client): Check that the buffer is live
before switching to it. Also, check that the tty display still has
live buffers before deleting it.
(server-handle-delete-frame): Don't do anything if the frame was on a
tty device (reported by Dan Nicolaescu).
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-148
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Mon, 19 Apr 2004 14:16:10 +0000 |
parents | 695cf19ef79e |
children | 33d3fb6cbd6e 375f2633d815 |
rev | line source |
---|---|
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
1 ;;; ansi-color.el --- translate ANSI escape sequences into faces |
25171 | 2 |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
3 ;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. |
25171 | 4 |
26092 | 5 ;; Author: Alex Schroeder <alex@gnu.org> |
6 ;; Maintainer: Alex Schroeder <alex@gnu.org> | |
35305
64ea5b1e9d94
(ansi-colors) <defgroup>: Fix :version by Dave
Gerd Moellmann <gerd@gnu.org>
parents:
35207
diff
changeset
|
7 ;; Version: 3.4.2 |
64ea5b1e9d94
(ansi-colors) <defgroup>: Fix :version by Dave
Gerd Moellmann <gerd@gnu.org>
parents:
35207
diff
changeset
|
8 ;; Keywords: comm processes terminals services |
25171 | 9 |
10 ;; This file is part of GNU Emacs. | |
11 | |
12 ;; GNU Emacs is free software; you can redistribute it and/or modify it | |
13 ;; under the terms of the GNU General Public License as published by the | |
14 ;; Free Software Foundation; either version 2, or (at your option) any | |
15 ;; later version. | |
16 ;; | |
17 ;; GNU Emacs is distributed in the hope that it will be useful, but | |
18 ;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
20 ;; General Public License for more details. | |
21 ;; | |
22 ;; You should have received a copy of the GNU General Public License | |
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
25 ;; Boston, MA 02111-1307, USA. | |
26 | |
27 ;;; Commentary: | |
28 | |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
29 ;; This file provides a function that takes a string or a region |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
30 ;; containing Select Graphic Rendition (SGR) control sequences (formerly |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
31 ;; known as ANSI escape sequences) and tries to translate these into |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
32 ;; faces. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
33 ;; |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
34 ;; This allows you to run ls --color=yes in shell-mode. In order to |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
35 ;; test this, proceed as follows: |
25171 | 36 ;; |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
37 ;; 1. start a shell: M-x shell |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
38 ;; 2. load this file: M-x load-library RET ansi-color RET |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
39 ;; 3. activate ansi-color: M-x ansi-color-for-comint-mode-on |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
40 ;; 4. test ls --color=yes in the *shell* buffer |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
41 ;; |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
42 ;; Note that starting your shell from within Emacs might set the TERM |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
43 ;; environment variable. The new setting might disable the output of |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
44 ;; SGR control sequences. Using ls --color=yes forces ls to produce |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
45 ;; these. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
46 ;; |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
47 ;; If you decide you like this, add the following to your .emacs file: |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
48 ;; |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
49 ;; (add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on) |
25171 | 50 ;; |
31595 | 51 ;; SGR control sequences are defined in section 3.8.117 of the ECMA-48 |
52 ;; standard (identical to ISO/IEC 6429), which is freely available as a | |
53 ;; PDF file <URL:http://www.ecma.ch/ecma1/STAND/ECMA-048.HTM>. The | |
54 ;; "Graphic Rendition Combination Mode (GRCM)" implemented is | |
55 ;; "cumulative mode" as defined in section 7.2.8. Cumulative mode means | |
56 ;; that whenever possible, SGR control sequences are combined (ie. blue | |
57 ;; and bold). | |
25171 | 58 |
31595 | 59 ;; The basic functions are: |
25171 | 60 ;; |
31595 | 61 ;; `ansi-color-apply' to colorize a string containing SGR control |
62 ;; sequences. | |
63 ;; | |
64 ;; `ansi-color-filter-apply' to filter SGR control sequences from a | |
65 ;; string. | |
66 ;; | |
67 ;; `ansi-color-apply-on-region' to colorize a region containing SGR | |
68 ;; control sequences. | |
69 ;; | |
70 ;; `ansi-color-filter-region' to filter SGR control sequences from a | |
71 ;; region. | |
26092 | 72 |
31595 | 73 ;;; Thanks |
26092 | 74 |
31595 | 75 ;; Georges Brun-Cottan <gbruncot@emc.com> for improving ansi-color.el |
76 ;; substantially by adding the code needed to cope with arbitrary chunks | |
77 ;; of output and the filter functions. | |
78 ;; | |
79 ;; Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk> for pointing me to ECMA-48. | |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
80 ;; |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
81 ;; Stefan Monnier <foo@acm.com> explaing obscure font-lock stuff and |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
82 ;; code suggestions. |
25171 | 83 |
84 | |
85 | |
86 ;;; Code: | |
87 | |
26092 | 88 ;; Customization |
89 | |
31595 | 90 (defgroup ansi-colors nil |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
91 "Translating SGR control sequences to faces. |
31595 | 92 This translation effectively colorizes strings and regions based upon |
93 SGR control sequences embedded in the text. SGR (Select Graphic | |
94 Rendition) control sequences are defined in section 3.8.117 of the | |
95 ECMA-48 standard \(identical to ISO/IEC 6429), which is freely available | |
96 as a PDF file <URL:http://www.ecma.ch/ecma1/STAND/ECMA-048.HTM>." | |
35207
16c26d4faf83
(ansi-colors) <defgroup>: Fix :version.
Gerd Moellmann <gerd@gnu.org>
parents:
35160
diff
changeset
|
97 :version "21.1" |
31595 | 98 :group 'processes) |
99 | |
100 (defcustom ansi-color-faces-vector | |
101 [default bold default italic underline bold bold-italic modeline] | |
102 "Faces used for SGR control sequences determining a face. | |
103 This vector holds the faces used for SGR control sequence parameters 0 | |
104 to 7. | |
25171 | 105 |
31595 | 106 Parameter Description Face used by default |
107 0 default default | |
108 1 bold bold | |
109 2 faint default | |
110 3 italic italic | |
111 4 underlined underline | |
112 5 slowly blinking bold | |
113 6 rapidly blinking bold-italic | |
114 7 negative image modeline | |
25171 | 115 |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
116 Note that the symbol `default' is special: It will not be combined |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
117 with the current face. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
118 |
31595 | 119 This vector is used by `ansi-color-make-color-map' to create a color |
120 map. This color map is stored in the variable `ansi-color-map'." | |
121 :type '(vector face face face face face face face face) | |
122 :set 'ansi-color-map-update | |
123 :initialize 'custom-initialize-default | |
124 :group 'ansi-colors) | |
125 | |
126 (defcustom ansi-color-names-vector | |
25171 | 127 ["black" "red" "green" "yellow" "blue" "magenta" "cyan" "white"] |
31595 | 128 "Colors used for SGR control sequences determining a color. |
129 This vector holds the colors used for SGR control sequences parameters | |
130 30 to 37 \(foreground colors) and 40 to 47 (background colors). | |
131 | |
132 Parameter Color | |
133 30 40 black | |
134 31 41 red | |
135 32 42 green | |
136 33 43 yellow | |
137 34 44 blue | |
138 35 45 magenta | |
139 36 46 cyan | |
140 37 47 white | |
25171 | 141 |
31595 | 142 This vector is used by `ansi-color-make-color-map' to create a color |
143 map. This color map is stored in the variable `ansi-color-map'." | |
144 :type '(vector string string string string string string string string) | |
145 :set 'ansi-color-map-update | |
146 :initialize 'custom-initialize-default | |
147 :group 'ansi-colors) | |
148 | |
149 (defconst ansi-color-regexp "\033\\[\\([0-9;]*\\)m" | |
150 "Regexp that matches SGR control sequences.") | |
151 | |
152 (defconst ansi-color-parameter-regexp "\\([0-9]*\\)[m;]" | |
153 "Regexp that matches SGR control sequence parameters.") | |
154 | |
155 | |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
156 ;; Convenience functions for comint modes (eg. shell-mode) |
25171 | 157 |
31595 | 158 |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
159 (defcustom ansi-color-for-comint-mode nil |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
160 "Determines what to do with comint output. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
161 If nil, do nothing. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
162 If the symbol `filter', then filter all SGR control sequences. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
163 If anything else (such as t), then translate SGR control sequences |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
164 into text-properties. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
165 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
166 In order for this to have any effect, `ansi-color-process-output' must |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
167 be in `comint-output-filter-functions'. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
168 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
169 This can be used to enable colorized ls --color=yes output |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
170 in shell buffers. You set this variable by calling one of: |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
171 \\[ansi-color-for-comint-mode-on] |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
172 \\[ansi-color-for-comint-mode-off] |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
173 \\[ansi-color-for-comint-mode-filter]" |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
174 :type '(choice (const :tag "Do nothing" nil) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
175 (const :tag "Filter" filter) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
176 (const :tag "Translate" t)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
177 :group 'ansi-colors) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
178 |
35686
1126fb97e2d7
(ansi-color-for-comint-mode): Add :version.
Gerd Moellmann <gerd@gnu.org>
parents:
35305
diff
changeset
|
179 ;;;###autoload |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
180 (defun ansi-color-for-comint-mode-on () |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
181 "Set `ansi-color-for-comint-mode' to t." |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
182 (interactive) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
183 (setq ansi-color-for-comint-mode t)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
184 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
185 (defun ansi-color-for-comint-mode-off () |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
186 "Set `ansi-color-for-comint-mode' to nil." |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
187 (interactive) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
188 (setq ansi-color-for-comint-mode nil)) |
31595 | 189 |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
190 (defun ansi-color-for-comint-mode-filter () |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
191 "Set `ansi-color-for-comint-mode' to symbol `filter'." |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
192 (interactive) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
193 (setq ansi-color-for-comint-mode 'filter)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
194 |
35686
1126fb97e2d7
(ansi-color-for-comint-mode): Add :version.
Gerd Moellmann <gerd@gnu.org>
parents:
35305
diff
changeset
|
195 ;;;###autoload |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
196 (defun ansi-color-process-output (string) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
197 "Maybe translate SGR control sequences of comint output into text-properties. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
198 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
199 Depending on variable `ansi-color-for-comint-mode' the comint output is |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
200 either not processed, SGR control sequences are filtered using |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
201 `ansi-color-filter-region', or SGR control sequences are translated into |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
202 text-properties using `ansi-color-apply-on-region'. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
203 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
204 The comint output is assumed to lie between the marker |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
205 `comint-last-output-start' and the process-mark. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
206 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
207 This is a good function to put in `comint-output-filter-functions'." |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
208 (let ((start-marker (or comint-last-output-start |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
209 (point-min-marker))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
210 (end-marker (process-mark (get-buffer-process (current-buffer))))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
211 (cond ((eq ansi-color-for-comint-mode nil)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
212 ((eq ansi-color-for-comint-mode 'filter) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
213 (ansi-color-filter-region start-marker end-marker)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
214 (t |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
215 (ansi-color-apply-on-region start-marker end-marker))))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
216 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
217 (add-hook 'comint-output-filter-functions |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
218 'ansi-color-process-output) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
219 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
220 |
35305
64ea5b1e9d94
(ansi-colors) <defgroup>: Fix :version by Dave
Gerd Moellmann <gerd@gnu.org>
parents:
35207
diff
changeset
|
221 ;; Alternative font-lock-unfontify-region-function for Emacs only |
31595 | 222 |
223 | |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
224 (eval-when-compile |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
35686
diff
changeset
|
225 ;; We use this to preserve or protect things when modifying text |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
35686
diff
changeset
|
226 ;; properties. Stolen from lazy-lock and font-lock. Ugly!!! |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
35686
diff
changeset
|
227 ;; Probably most of this is not needed? |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
35686
diff
changeset
|
228 (defmacro save-buffer-state (varlist &rest body) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
35686
diff
changeset
|
229 "Bind variables according to VARLIST and eval BODY restoring buffer state." |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
35686
diff
changeset
|
230 `(let* (,@(append varlist |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
35686
diff
changeset
|
231 '((modified (buffer-modified-p)) (buffer-undo-list t) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
35686
diff
changeset
|
232 (inhibit-read-only t) (inhibit-point-motion-hooks t) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
35686
diff
changeset
|
233 before-change-functions after-change-functions |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
35686
diff
changeset
|
234 deactivate-mark buffer-file-name buffer-file-truename))) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
35686
diff
changeset
|
235 ,@body |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
35686
diff
changeset
|
236 (when (and (not modified) (buffer-modified-p)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
35686
diff
changeset
|
237 (set-buffer-modified-p nil)))) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
35686
diff
changeset
|
238 (put 'save-buffer-state 'lisp-indent-function 1)) |
31595 | 239 |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
240 (defun ansi-color-unfontify-region (beg end &rest xemacs-stuff) |
35305
64ea5b1e9d94
(ansi-colors) <defgroup>: Fix :version by Dave
Gerd Moellmann <gerd@gnu.org>
parents:
35207
diff
changeset
|
241 "Replacement function for `font-lock-default-unfontify-region'. |
64ea5b1e9d94
(ansi-colors) <defgroup>: Fix :version by Dave
Gerd Moellmann <gerd@gnu.org>
parents:
35207
diff
changeset
|
242 |
64ea5b1e9d94
(ansi-colors) <defgroup>: Fix :version by Dave
Gerd Moellmann <gerd@gnu.org>
parents:
35207
diff
changeset
|
243 As text-properties are implemented using extents in XEmacs, this |
64ea5b1e9d94
(ansi-colors) <defgroup>: Fix :version by Dave
Gerd Moellmann <gerd@gnu.org>
parents:
35207
diff
changeset
|
244 function is probably not needed. In Emacs, however, things are a bit |
64ea5b1e9d94
(ansi-colors) <defgroup>: Fix :version by Dave
Gerd Moellmann <gerd@gnu.org>
parents:
35207
diff
changeset
|
245 different: When font-lock is active in a buffer, you cannot simply add |
64ea5b1e9d94
(ansi-colors) <defgroup>: Fix :version by Dave
Gerd Moellmann <gerd@gnu.org>
parents:
35207
diff
changeset
|
246 face text-properties to the buffer. Font-lock will remove the face |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
247 text-property using `font-lock-unfontify-region-function'. If you want |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
248 to insert the strings returned by `ansi-color-apply' into such buffers, |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
249 you must set `font-lock-unfontify-region-function' to |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
250 `ansi-color-unfontify-region'. This function will not remove all face |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
251 text-properties unconditionally. It will keep the face text-properties |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
252 if the property `ansi-color' is set. |
31595 | 253 |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
254 The region from BEG to END is unfontified. XEMACS-STUFF is ignored. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
255 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
256 A possible way to install this would be: |
25171 | 257 |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
258 \(add-hook 'font-lock-mode-hook |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
259 \(function (lambda () |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
260 \(setq font-lock-unfontify-region-function |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
261 'ansi-color-unfontify-region))))" |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
262 ;; save-buffer-state is a macro in font-lock.el! |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
263 (save-buffer-state nil |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
264 (when (boundp 'font-lock-syntactic-keywords) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
265 (remove-text-properties beg end '(syntax-table nil))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
266 ;; instead of just using (remove-text-properties beg end '(face |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
267 ;; nil)), we find regions with a non-nil face test-property, skip |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
268 ;; positions with the ansi-color property set, and remove the |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
269 ;; remaining face test-properties. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
270 (while (setq beg (text-property-not-all beg end 'face nil)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
271 (setq beg (or (text-property-not-all beg end 'ansi-color t) end)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
272 (when (get-text-property beg 'face) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
273 (let ((end-face (or (text-property-any beg end 'face nil) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
274 end))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
275 (remove-text-properties beg end-face '(face nil)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
276 (setq beg end-face)))))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
277 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
278 ;; Working with strings |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
279 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
280 (defvar ansi-color-context nil |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
281 "Context saved between two calls to `ansi-color-apply'. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
282 This is a list of the form (FACES FRAGMENT) or nil. FACES is a list of |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
283 faces the last call to `ansi-color-apply' ended with, and FRAGMENT is a |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
284 string starting with an escape sequence, possibly the start of a new |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
285 escape sequence.") |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
286 (make-variable-buffer-local 'ansi-color-context) |
31595 | 287 |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
288 (defun ansi-color-filter-apply (string) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
289 "Filter out all SGR control sequences from STRING. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
290 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
291 Every call to this function will set and use the buffer-local variable |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
292 `ansi-color-context' to save partial escape sequences. This information |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
293 will be used for the next call to `ansi-color-apply'. Set |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
294 `ansi-color-context' to nil if you don't want this. |
31595 | 295 |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
296 This function can be added to `comint-preoutput-filter-functions'." |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
297 (let ((start 0) end result) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
298 ;; if context was saved and is a string, prepend it |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
299 (if (cadr ansi-color-context) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
300 (setq string (concat (cadr ansi-color-context) string) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
301 ansi-color-context nil)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
302 ;; find the next escape sequence |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
303 (while (setq end (string-match ansi-color-regexp string start)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
304 (setq result (concat result (substring string start end)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
305 start (match-end 0))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
306 ;; save context, add the remainder of the string to the result |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
307 (let (fragment) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
308 (if (string-match "\033" string start) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
309 (let ((pos (match-beginning 0))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
310 (setq fragment (substring string pos) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
311 result (concat result (substring string start pos)))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
312 (setq result (concat result (substring string start)))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
313 (if fragment |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
314 (setq ansi-color-context (list nil fragment)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
315 (setq ansi-color-context nil))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
316 result)) |
25171 | 317 |
26092 | 318 (defun ansi-color-apply (string) |
31595 | 319 "Translates SGR control sequences into text-properties. |
26092 | 320 |
31595 | 321 Applies SGR control sequences setting foreground and background colors |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
322 to STRING using text-properties and returns the result. The colors used |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
323 are given in `ansi-color-faces-vector' and `ansi-color-names-vector'. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
324 See function `ansi-color-apply-sequence' for details. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
325 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
326 Every call to this function will set and use the buffer-local variable |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
327 `ansi-color-context' to save partial escape sequences and current face. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
328 This information will be used for the next call to `ansi-color-apply'. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
329 Set `ansi-color-context' to nil if you don't want this. |
25171 | 330 |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
331 This function can be added to `comint-preoutput-filter-functions'. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
332 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
333 You cannot insert the strings returned into buffers using font-lock. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
334 See `ansi-color-unfontify-region' for a way around this." |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
335 (let ((face (car ansi-color-context)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
336 (start 0) end escape-sequence result) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
337 ;; if context was saved and is a string, prepend it |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
338 (if (cadr ansi-color-context) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
339 (setq string (concat (cadr ansi-color-context) string) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
340 ansi-color-context nil)) |
26092 | 341 ;; find the next escape sequence |
31595 | 342 (while (setq end (string-match ansi-color-regexp string start)) |
26092 | 343 ;; store escape sequence |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
344 (setq escape-sequence (match-string 1 string)) |
26092 | 345 ;; colorize the old block from start to end using old face |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
346 (when face |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
347 (put-text-property start end 'ansi-color t string) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
348 (put-text-property start end 'face face string)) |
31595 | 349 (setq result (concat result (substring string start end)) |
350 start (match-end 0)) | |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
351 ;; create new face by applying all the parameters in the escape |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
352 ;; sequence |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
353 (setq face (ansi-color-apply-sequence escape-sequence face))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
354 ;; if the rest of the string should have a face, put it there |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
355 (when face |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
356 (put-text-property start (length string) 'ansi-color t string) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
357 (put-text-property start (length string) 'face face string)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
358 ;; save context, add the remainder of the string to the result |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
359 (let (fragment) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
360 (if (string-match "\033" string start) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
361 (let ((pos (match-beginning 0))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
362 (setq fragment (substring string pos) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
363 result (concat result (substring string start pos)))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
364 (setq result (concat result (substring string start)))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
365 (if (or face fragment) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
366 (setq ansi-color-context (list face fragment)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
367 (setq ansi-color-context nil))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
368 result)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
369 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
370 ;; Working with regions |
25171 | 371 |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
372 (defvar ansi-color-context-region nil |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
373 "Context saved between two calls to `ansi-color-apply-on-region'. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
374 This is a list of the form (FACES MARKER) or nil. FACES is a list of |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
375 faces the last call to `ansi-color-apply-on-region' ended with, and |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
376 MARKER is a buffer position within an escape sequence or the last |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
377 position processed.") |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
378 (make-variable-buffer-local 'ansi-color-context-region) |
31595 | 379 |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
380 (defun ansi-color-filter-region (begin end) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
381 "Filter out all SGR control sequences from region BEGIN to END. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
382 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
383 Every call to this function will set and use the buffer-local variable |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
384 `ansi-color-context-region' to save position. This information will be |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
385 used for the next call to `ansi-color-apply-on-region'. Specifically, |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
386 it will override BEGIN, the start of the region. Set |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
387 `ansi-color-context-region' to nil if you don't want this." |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
388 (let ((end-marker (copy-marker end)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
389 (start (or (cadr ansi-color-context-region) begin))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
390 (save-excursion |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
391 (goto-char start) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
392 ;; find the next escape sequence |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
393 (while (re-search-forward ansi-color-regexp end-marker t) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
394 ;; delete the escape sequence |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
395 (replace-match "")) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
396 ;; save context, add the remainder of the string to the result |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
397 (if (re-search-forward "\033" end-marker t) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
398 (setq ansi-color-context-region (list nil (match-beginning 0))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
399 (setq ansi-color-context-region nil))))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
400 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
401 (defun ansi-color-apply-on-region (begin end) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
402 "Translates SGR control sequences into overlays or extents. |
31595 | 403 |
404 Applies SGR control sequences setting foreground and background colors | |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
405 to text in region between BEGIN and END using extents or overlays. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
406 Emacs will use overlays, XEmacs will use extents. The colors used are |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
407 given in `ansi-color-faces-vector' and `ansi-color-names-vector'. See |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
408 function `ansi-color-apply-sequence' for details. |
31595 | 409 |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
410 Every call to this function will set and use the buffer-local variable |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
411 `ansi-color-context-region' to save position and current face. This |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
412 information will be used for the next call to |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
413 `ansi-color-apply-on-region'. Specifically, it will override BEGIN, the |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
414 start of the region and set the face with which to start. Set |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
415 `ansi-color-context-region' to nil if you don't want this." |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
416 (let ((face (car ansi-color-context-region)) |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
45250
diff
changeset
|
417 (start-marker (or (cadr ansi-color-context-region) |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
418 (copy-marker begin))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
419 (end-marker (copy-marker end)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
420 escape-sequence) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
421 (save-excursion |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
422 (goto-char start-marker) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
423 ;; find the next escape sequence |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
424 (while (re-search-forward ansi-color-regexp end-marker t) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
425 ;; colorize the old block from start to end using old face |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
426 (when face |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
427 (ansi-color-set-extent-face |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
428 (ansi-color-make-extent start-marker (match-beginning 0)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
429 face)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
430 ;; store escape sequence and new start position |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
431 (setq escape-sequence (match-string 1) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
432 start-marker (copy-marker (match-end 0))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
433 ;; delete the escape sequence |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
434 (replace-match "") |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
435 ;; create new face by applying all the parameters in the escape |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
436 ;; sequence |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
437 (setq face (ansi-color-apply-sequence escape-sequence face))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
438 ;; search for the possible start of a new escape sequence |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
439 (if (re-search-forward "\033" end-marker t) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
440 (progn |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
441 ;; if the rest of the region should have a face, put it there |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
442 (when face |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
443 (ansi-color-set-extent-face |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
444 (ansi-color-make-extent start-marker (point)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
445 face)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
446 ;; save face and point |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
447 (setq ansi-color-context-region |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
448 (list face (copy-marker (match-beginning 0))))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
449 ;; if the rest of the region should have a face, put it there |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
450 (if face |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
451 (progn |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
452 (ansi-color-set-extent-face |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
453 (ansi-color-make-extent start-marker end-marker) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
454 face) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
455 (setq ansi-color-context-region (list face))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
456 ;; reset context |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
457 (setq ansi-color-context-region nil)))))) |
31595 | 458 |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
459 ;; This function helps you look for overlapping overlays. This is |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
460 ;; usefull in comint-buffers. Overlapping overlays should not happen! |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
461 ;; A possible cause for bugs are the markers. If you create an overlay |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
462 ;; up to the end of the region, then that end might coincide with the |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
463 ;; process-mark. As text is added BEFORE the process-mark, the overlay |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
464 ;; will keep growing. Therefore, as more overlays are created later on, |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
465 ;; there will be TWO OR MORE overlays covering the buffer at that point. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
466 ;; This function helps you check your buffer for these situations. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
467 ; (defun ansi-color-debug-overlays () |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
468 ; (interactive) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
469 ; (let ((pos (point-min))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
470 ; (while (< pos (point-max)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
471 ; (if (<= 2 (length (overlays-at pos))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
472 ; (progn |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
473 ; (goto-char pos) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
474 ; (error "%d overlays at %d" (length (overlays-at pos)) pos)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
475 ; (let (message-log-max) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
476 ; (message "Reached %d." pos))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
477 ; (setq pos (next-overlay-change pos))))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
478 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
479 ;; Emacs/XEmacs compatibility layer |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
480 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
481 (defun ansi-color-make-face (property color) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
482 "Return a face with PROPERTY set to COLOR. |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
45250
diff
changeset
|
483 PROPERTY can be either symbol `foreground' or symbol `background'. |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
484 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
485 For Emacs, we just return the cons cell \(PROPERTY . COLOR). |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
486 For XEmacs, we create a temporary face and return it." |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
487 (if (featurep 'xemacs) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
488 (let ((face (make-face (intern (concat color "-" (symbol-name property))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
489 "Temporary face created by ansi-color." |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
490 t))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
491 (set-face-property face property color) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
492 face) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
493 (cond ((eq property 'foreground) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
494 (cons 'foreground-color color)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
495 ((eq property 'background) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
496 (cons 'background-color color)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
497 (t |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
498 (cons property color))))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
499 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
500 (defun ansi-color-make-extent (from to &optional object) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
501 "Make an extent for the range [FROM, TO) in OBJECT. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
502 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
503 OBJECT defaults to the current buffer. XEmacs uses `make-extent', Emacs |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
504 uses `make-overlay'. XEmacs can use a buffer or a string for OBJECT, |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
505 Emacs requires OBJECT to be a buffer." |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
506 (if (functionp 'make-extent) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
507 (make-extent from to object) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
508 ;; In Emacs, the overlay might end at the process-mark in comint |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
509 ;; buffers. In that case, new text will be inserted before the |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
510 ;; process-mark, ie. inside the overlay (using insert-before-marks). |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
511 ;; In order to avoid this, we use the `insert-behind-hooks' overlay |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
512 ;; property to make sure it works. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
513 (let ((overlay (make-overlay from to object))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
514 (overlay-put overlay 'modification-hooks '(ansi-color-freeze-overlay)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
515 overlay))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
516 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
517 (defun ansi-color-freeze-overlay (overlay is-after begin end &optional len) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
518 "Prevent OVERLAY from being extended. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
519 This function can be used for the `modification-hooks' overlay |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
520 property." |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
521 ;; if stuff was inserted at the end of the overlay |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
522 (when (and is-after |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
523 (= 0 len) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
524 (= end (overlay-end overlay))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
525 ;; reset the end of the overlay |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
526 (move-overlay overlay (overlay-start overlay) begin))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
527 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
528 (defun ansi-color-set-extent-face (extent face) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
529 "Set the `face' property of EXTENT to FACE. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
530 XEmacs uses `set-extent-face', Emacs uses `overlay-put'." |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
531 (if (functionp 'set-extent-face) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
532 (set-extent-face extent face) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
533 (overlay-put extent 'face face))) |
31595 | 534 |
26092 | 535 ;; Helper functions |
536 | |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
537 (defun ansi-color-apply-sequence (escape-sequence faces) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
538 "Apply ESCAPE-SEQ to FACES and return the new list of faces. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
539 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
540 ESCAPE-SEQ is an escape sequences parsed by `ansi-color-get-face'. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
541 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
542 If the new faces start with the symbol `default', then the new |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
543 faces are returned. If the faces start with something else, |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
544 they are appended to the front of the FACES list, and the new |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
545 list of faces is returned. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
546 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
547 If `ansi-color-get-face' returns nil, then we either got a |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
548 null-sequence, or we stumbled upon some garbage. In either |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
549 case we return nil." |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
550 (let ((new-faces (ansi-color-get-face escape-sequence))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
551 (cond ((null new-faces) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
552 nil) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
553 ((eq (car new-faces) 'default) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
554 (cdr new-faces)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
555 (t |
45250
21ed0daaa2c6
(ansi-color-get-face): Avoid add-to-list on local var.
Richard M. Stallman <rms@gnu.org>
parents:
41608
diff
changeset
|
556 ;; Like (append NEW-FACES FACES) |
21ed0daaa2c6
(ansi-color-get-face): Avoid add-to-list on local var.
Richard M. Stallman <rms@gnu.org>
parents:
41608
diff
changeset
|
557 ;; but delete duplicates in FACES. |
21ed0daaa2c6
(ansi-color-get-face): Avoid add-to-list on local var.
Richard M. Stallman <rms@gnu.org>
parents:
41608
diff
changeset
|
558 (let ((modified-faces (copy-sequence faces))) |
21ed0daaa2c6
(ansi-color-get-face): Avoid add-to-list on local var.
Richard M. Stallman <rms@gnu.org>
parents:
41608
diff
changeset
|
559 (dolist (face (nreverse new-faces)) |
21ed0daaa2c6
(ansi-color-get-face): Avoid add-to-list on local var.
Richard M. Stallman <rms@gnu.org>
parents:
41608
diff
changeset
|
560 (setq modified-faces (delete face modified-faces)) |
21ed0daaa2c6
(ansi-color-get-face): Avoid add-to-list on local var.
Richard M. Stallman <rms@gnu.org>
parents:
41608
diff
changeset
|
561 (push face modified-faces)) |
21ed0daaa2c6
(ansi-color-get-face): Avoid add-to-list on local var.
Richard M. Stallman <rms@gnu.org>
parents:
41608
diff
changeset
|
562 modified-faces))))) |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
563 |
31595 | 564 (defun ansi-color-make-color-map () |
565 "Creates a vector of face definitions and returns it. | |
566 | |
567 The index into the vector is an ANSI code. See the documentation of | |
568 `ansi-color-map' for an example. | |
569 | |
570 The face definitions are based upon the variables | |
571 `ansi-color-faces-vector' and `ansi-color-names-vector'." | |
572 (let ((ansi-color-map (make-vector 50 nil)) | |
573 (index 0)) | |
574 ;; miscellaneous attributes | |
575 (mapcar | |
576 (function (lambda (e) | |
577 (aset ansi-color-map index e) | |
578 (setq index (1+ index)) )) | |
579 ansi-color-faces-vector) | |
580 ;; foreground attributes | |
581 (setq index 30) | |
582 (mapcar | |
583 (function (lambda (e) | |
584 (aset ansi-color-map index | |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
585 (ansi-color-make-face 'foreground e)) |
31595 | 586 (setq index (1+ index)) )) |
587 ansi-color-names-vector) | |
588 ;; background attributes | |
589 (setq index 40) | |
590 (mapcar | |
591 (function (lambda (e) | |
592 (aset ansi-color-map index | |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
593 (ansi-color-make-face 'background e)) |
31595 | 594 (setq index (1+ index)) )) |
595 ansi-color-names-vector) | |
596 ansi-color-map)) | |
597 | |
598 (defvar ansi-color-map (ansi-color-make-color-map) | |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
599 "A brand new color map suitable for `ansi-color-get-face'. |
25225
38f98813a83d
(ansi-color-to-text-properties): Added New state 5
Karl Heuer <kwzh@gnu.org>
parents:
25171
diff
changeset
|
600 |
31595 | 601 The value of this variable is usually constructed by |
602 `ansi-color-make-color-map'. The values in the array are such that the | |
603 numbers included in an SGR control sequences point to the correct | |
604 foreground or background colors. | |
605 | |
606 Example: The sequence \033[34m specifies a blue foreground. Therefore: | |
607 (aref ansi-color-map 34) | |
608 => \(foreground-color . \"blue\")") | |
609 | |
610 (defun ansi-color-map-update (symbol value) | |
611 "Update `ansi-color-map'. | |
612 | |
613 Whenever the vectors used to construct `ansi-color-map' are changed, | |
614 this function is called. Therefore this function is listed as the :set | |
615 property of `ansi-color-faces-vector' and `ansi-color-names-vector'." | |
616 (set-default symbol value) | |
617 (setq ansi-color-map (ansi-color-make-color-map))) | |
618 | |
619 (defun ansi-color-get-face-1 (ansi-code) | |
620 "Get face definition from `ansi-color-map'. | |
621 ANSI-CODE is used as an index into the vector." | |
622 (condition-case nil | |
623 (aref ansi-color-map ansi-code) | |
624 ('args-out-of-range nil))) | |
625 | |
626 (defun ansi-color-get-face (escape-seq) | |
627 "Create a new face by applying all the parameters in ESCAPE-SEQ. | |
628 | |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
629 Should any of the parameters result in the default face (usually this is |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
630 the parameter 0), then the effect of all previous parameters is cancelled. |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
631 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
632 ESCAPE-SEQ is a SGR control sequences such as \\033[34m. The parameter |
31595 | 633 34 is used by `ansi-color-get-face-1' to return a face definition." |
634 (let ((ansi-color-r "[0-9][0-9]?") | |
635 (i 0) | |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
636 f val) |
31595 | 637 (while (string-match ansi-color-r escape-seq i) |
35160
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
638 (setq i (match-end 0) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
639 val (ansi-color-get-face-1 |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
640 (string-to-int (match-string 0 escape-seq) 10))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
641 (cond ((not val)) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
642 ((eq val 'default) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
643 (setq f (list val))) |
75a8ca0bdd1d
(ansi-color-process-output): Use markers instead
Gerd Moellmann <gerd@gnu.org>
parents:
31595
diff
changeset
|
644 (t |
45250
21ed0daaa2c6
(ansi-color-get-face): Avoid add-to-list on local var.
Richard M. Stallman <rms@gnu.org>
parents:
41608
diff
changeset
|
645 (unless (member val f) |
21ed0daaa2c6
(ansi-color-get-face): Avoid add-to-list on local var.
Richard M. Stallman <rms@gnu.org>
parents:
41608
diff
changeset
|
646 (push val f))))) |
31595 | 647 f)) |
25171 | 648 |
649 (provide 'ansi-color) | |
650 | |
52401 | 651 ;;; arch-tag: 00726118-9432-44fd-b72d-d2af7591c99c |
26092 | 652 ;;; ansi-color.el ends here |