annotate lisp/ansi-color.el @ 51242:661e2fe7e775

(autoconf-mode setups): Recognise AH_ and AU_ entries in "(autoconf)Autoconf Macro Index". Add "(autoconf)M4 Macro Index" and "(autoconf)Autotest Macro Index". Remove duplicate copy of "(automake)Macro and Variable Index". Keep automake after all autoconf possibilities, so as to prefer those.
author Juanma Barranquero <lekktu@gmail.com>
date Sun, 25 May 2003 21:03:57 +0000
parents f4f7d408c37a
children 695cf19ef79e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
26092
8080bafbae4b Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 25225
diff changeset
5 ;; Author: Alex Schroeder <alex@gnu.org>
8080bafbae4b Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 25225
diff changeset
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
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify it
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; under the terms of the GNU General Public License as published by the
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; Free Software Foundation; either version 2, or (at your option) any
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; later version.
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;;
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful, but
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; General Public License for more details.
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;;
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;; Boston, MA 02111-1307, USA.
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;; Commentary:
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ;;
31595
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
51 ;; SGR control sequences are defined in section 3.8.117 of the ECMA-48
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
52 ;; standard (identical to ISO/IEC 6429), which is freely available as a
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
53 ;; PDF file <URL:http://www.ecma.ch/ecma1/STAND/ECMA-048.HTM>. The
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
54 ;; "Graphic Rendition Combination Mode (GRCM)" implemented is
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
55 ;; "cumulative mode" as defined in section 7.2.8. Cumulative mode means
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
56 ;; that whenever possible, SGR control sequences are combined (ie. blue
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
57 ;; and bold).
25171
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58
31595
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
59 ;; The basic functions are:
25171
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;;
31595
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
61 ;; `ansi-color-apply' to colorize a string containing SGR control
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
62 ;; sequences.
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
63 ;;
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
64 ;; `ansi-color-filter-apply' to filter SGR control sequences from a
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
65 ;; string.
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
66 ;;
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
67 ;; `ansi-color-apply-on-region' to colorize a region containing SGR
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
68 ;; control sequences.
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
69 ;;
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
70 ;; `ansi-color-filter-region' to filter SGR control sequences from a
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
71 ;; region.
26092
8080bafbae4b Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 25225
diff changeset
72
31595
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
73 ;;; Thanks
26092
8080bafbae4b Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 25225
diff changeset
74
31595
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
75 ;; Georges Brun-Cottan <gbruncot@emc.com> for improving ansi-color.el
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
76 ;; substantially by adding the code needed to cope with arbitrary chunks
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
77 ;; of output and the filter functions.
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
78 ;;
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 ;;; Code:
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87
26092
8080bafbae4b Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 25225
diff changeset
88 ;; Customization
8080bafbae4b Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 25225
diff changeset
89
31595
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
92 This translation effectively colorizes strings and regions based upon
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
93 SGR control sequences embedded in the text. SGR (Select Graphic
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
94 Rendition) control sequences are defined in section 3.8.117 of the
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
95 ECMA-48 standard \(identical to ISO/IEC 6429), which is freely available
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
98 :group 'processes)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
99
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
100 (defcustom ansi-color-faces-vector
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
101 [default bold default italic underline bold bold-italic modeline]
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
102 "Faces used for SGR control sequences determining a face.
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
103 This vector holds the faces used for SGR control sequence parameters 0
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
104 to 7.
25171
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105
31595
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
106 Parameter Description Face used by default
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
107 0 default default
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
108 1 bold bold
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
109 2 faint default
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
110 3 italic italic
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
111 4 underlined underline
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
112 5 slowly blinking bold
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
113 6 rapidly blinking bold-italic
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
114 7 negative image modeline
25171
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
119 This vector is used by `ansi-color-make-color-map' to create a color
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
120 map. This color map is stored in the variable `ansi-color-map'."
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
121 :type '(vector face face face face face face face face)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
122 :set 'ansi-color-map-update
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
123 :initialize 'custom-initialize-default
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
124 :group 'ansi-colors)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
125
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
126 (defcustom ansi-color-names-vector
25171
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 ["black" "red" "green" "yellow" "blue" "magenta" "cyan" "white"]
31595
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
128 "Colors used for SGR control sequences determining a color.
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
129 This vector holds the colors used for SGR control sequences parameters
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
130 30 to 37 \(foreground colors) and 40 to 47 (background colors).
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
131
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
132 Parameter Color
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
133 30 40 black
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
134 31 41 red
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
135 32 42 green
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
136 33 43 yellow
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
137 34 44 blue
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
138 35 45 magenta
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
139 36 46 cyan
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
140 37 47 white
25171
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141
31595
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
142 This vector is used by `ansi-color-make-color-map' to create a color
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
143 map. This color map is stored in the variable `ansi-color-map'."
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
144 :type '(vector string string string string string string string string)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
145 :set 'ansi-color-map-update
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
146 :initialize 'custom-initialize-default
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
147 :group 'ansi-colors)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
148
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
149 (defconst ansi-color-regexp "\033\\[\\([0-9;]*\\)m"
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
150 "Regexp that matches SGR control sequences.")
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
151
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
152 (defconst ansi-color-parameter-regexp "\\([0-9]*\\)[m;]"
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
153 "Regexp that matches SGR control sequence parameters.")
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
154
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157
31595
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
222
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317
26092
8080bafbae4b Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 25225
diff changeset
318 (defun ansi-color-apply (string)
31595
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
319 "Translates SGR control sequences into text-properties.
26092
8080bafbae4b Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 25225
diff changeset
320
31595
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
8080bafbae4b Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 25225
diff changeset
341 ;; find the next escape sequence
31595
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
342 (while (setq end (string-match ansi-color-regexp string start))
26092
8080bafbae4b Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 25225
diff changeset
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
8080bafbae4b Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 25225
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
349 (setq result (concat result (substring string start end))
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
403
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
534
26092
8080bafbae4b Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 25225
diff changeset
535 ;; Helper functions
8080bafbae4b Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 25225
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
564 (defun ansi-color-make-color-map ()
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
565 "Creates a vector of face definitions and returns it.
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
566
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
567 The index into the vector is an ANSI code. See the documentation of
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
568 `ansi-color-map' for an example.
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
569
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
570 The face definitions are based upon the variables
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
571 `ansi-color-faces-vector' and `ansi-color-names-vector'."
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
572 (let ((ansi-color-map (make-vector 50 nil))
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
573 (index 0))
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
574 ;; miscellaneous attributes
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
575 (mapcar
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
576 (function (lambda (e)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
577 (aset ansi-color-map index e)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
578 (setq index (1+ index)) ))
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
579 ansi-color-faces-vector)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
580 ;; foreground attributes
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
581 (setq index 30)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
582 (mapcar
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
583 (function (lambda (e)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
586 (setq index (1+ index)) ))
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
587 ansi-color-names-vector)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
588 ;; background attributes
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
589 (setq index 40)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
590 (mapcar
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
591 (function (lambda (e)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
594 (setq index (1+ index)) ))
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
595 ansi-color-names-vector)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
596 ansi-color-map))
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
597
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
601 The value of this variable is usually constructed by
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
602 `ansi-color-make-color-map'. The values in the array are such that the
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
603 numbers included in an SGR control sequences point to the correct
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
604 foreground or background colors.
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
605
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
606 Example: The sequence \033[34m specifies a blue foreground. Therefore:
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
607 (aref ansi-color-map 34)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
608 => \(foreground-color . \"blue\")")
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
609
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
610 (defun ansi-color-map-update (symbol value)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
611 "Update `ansi-color-map'.
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
612
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
613 Whenever the vectors used to construct `ansi-color-map' are changed,
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
614 this function is called. Therefore this function is listed as the :set
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
615 property of `ansi-color-faces-vector' and `ansi-color-names-vector'."
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
616 (set-default symbol value)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
617 (setq ansi-color-map (ansi-color-make-color-map)))
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
618
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
619 (defun ansi-color-get-face-1 (ansi-code)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
620 "Get face definition from `ansi-color-map'.
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
621 ANSI-CODE is used as an index into the vector."
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
622 (condition-case nil
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
623 (aref ansi-color-map ansi-code)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
624 ('args-out-of-range nil)))
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
625
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
626 (defun ansi-color-get-face (escape-seq)
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
627 "Create a new face by applying all the parameters in ESCAPE-SEQ.
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
633 34 is used by `ansi-color-get-face-1' to return a face definition."
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
634 (let ((ansi-color-r "[0-9][0-9]?")
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
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
5ad18c4ebe5c (ansi-colors): Doc change.
Gerd Moellmann <gerd@gnu.org>
parents: 26439
diff changeset
647 f))
25171
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 (provide 'ansi-color)
b565998245c5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650
26092
8080bafbae4b Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 25225
diff changeset
651 ;;; ansi-color.el ends here