annotate lisp/hi-lock.el @ 58195:c12b583f54b9

Fixed these problems: ** Clicking on partially visible lines fails From: David Kastrup <dak@gnu.org> Date: 27 Apr 2004 16:42:58 +0200 I had gnus display a mouse-highlighted line (a URL from browse-url) partially at the bottom of its window. If I click with middle mouse key on it, the window gets recentered while I hold the mouse key pressed. If I release it, the window returns into its old position (cursor in top row) and nothing happens, presumably because the click was not registered on the line itself, but on the magically recentered version. That is a nuisance. Recentering of even partially visible click targets should only happen if window-point moves there, but not at the time of the click. From the moment I hold down a key until it gets released, the displayed window portion should not change, with the sole exception of scrolling when dragging at the edge of the screen. (progn (setq line-spacing 4) (dotimes (i (window-height)) (insert "\n" (int-to-string i))) (forward-line -2) (recenter -1)) ** Can't drag modeline when mouse-autoselect-window is set From: Klaus Zeitler <kzeitler@lucent.com> Date: Mon, 11 Oct 2004 11:14:49 +0200 1. start emacs -q --no-site-file 2. set variable mouse-autoselect-window to t 3. split-window-vertically now I can drag the modeline only upwards but not downwards
author Kim F. Storm <storm@cua.dk>
date Sat, 13 Nov 2004 01:40:36 +0000
parents 695cf19ef79e
children f69e6bb9b8fc 375f2633d815
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36708
diff changeset
1 ;;; hi-lock.el --- minor mode for interactive automatic highlighting
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2
35779
1619fb3fdfa4 (hi-lock-mode, hi-lock-line-face-buffer): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 35215
diff changeset
3 ;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
4
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5 ;; Author: David M. Koppelman, koppel@ee.lsu.edu
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
6 ;; Keywords: faces, minor-mode, matching, display
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
7
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
13 ;; any later version.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
14
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23 ;; Boston, MA 02111-1307, USA.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36708
diff changeset
25 ;;; Commentary:
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48256
diff changeset
26 ;;
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27 ;; With the hi-lock commands text matching interactively entered
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
28 ;; regexp's can be highlighted. For example, `M-x highlight-regexp
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
29 ;; RET clearly RET RET' will highlight all occurrences of `clearly'
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
30 ;; using a yellow background face. New occurrences of `clearly' will
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
31 ;; be highlighted as they are typed. `M-x unhighlight-regexp RET'
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
32 ;; will remove the highlighting. Any existing face can be used for
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
33 ;; highlighting and a set of appropriate faces is provided. The
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
34 ;; regexps can be written into the current buffer in a form that will
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
35 ;; be recognized the next time the corresponding file is read.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
36 ;;
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
37 ;; Applications:
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
38 ;;
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
39 ;; In program source code highlight a variable to quickly see all
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
40 ;; places it is modified or referenced:
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
41 ;; M-x highlight-regexp ground_contact_switches_closed RET RET
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
42 ;;
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
43 ;; In a shell or other buffer that is showing lots of program
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
44 ;; output, highlight the parts of the output you're interested in:
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
45 ;; M-x highlight-regexp Total execution time [0-9]+ RET hi-blue-b RET
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
46 ;;
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
47 ;; In buffers displaying tables, highlight the lines you're interested in:
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
48 ;; M-x highlight-lines-matching-regexp January 2000 RET hi-black-b RET
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
49 ;;
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
50 ;; When writing text, highlight personal cliches. This can be
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
51 ;; amusing.
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
52 ;; M-x highlight-phrase as can be seen RET RET
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
53 ;;
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
54 ;; Setup:
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
55 ;;
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
56 ;; Put the following code in your .emacs file. This turns on
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
57 ;; hi-lock mode and adds a "Regexp Highlighting" entry
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
58 ;; to the edit menu.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
59 ;;
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
60 ;; (hi-lock-mode 1)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48256
diff changeset
61 ;;
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
62 ;; You might also want to bind the hi-lock commands to more
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
63 ;; finger-friendly sequences:
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
64
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
65 ;; (define-key hi-lock-map "\C-z\C-h" 'highlight-lines-matching-regexp)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
66 ;; (define-key hi-lock-map "\C-zi" 'hi-lock-find-patterns)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
67 ;; (define-key hi-lock-map "\C-zh" 'highlight-regexp)
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
68 ;; (define-key hi-lock-map "\C-zp" 'highlight-phrase)
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
69 ;; (define-key hi-lock-map "\C-zr" 'unhighlight-regexp)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70 ;; (define-key hi-lock-map "\C-zb" 'hi-lock-write-interactive-patterns))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
72 ;; See the documentation for hi-lock-mode `C-h f hi-lock-mode' for
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
73 ;; additional instructions.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
74
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
75 ;; Sample file patterns:
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
77 ; Hi-lock: (("^;;; .*" (0 (quote hi-black-hb) t)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
78 ; Hi-lock: ( ("make-variable-buffer-\\(local\\)" (0 font-lock-keyword-face)(1 'italic append)))))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79 ; Hi-lock: end
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
80
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
81 ;;; Code:
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
82
30584
b823f1c83a00 (toplevel): Require font-lock.
Eli Zaretskii <eliz@gnu.org>
parents: 30565
diff changeset
83 (eval-and-compile
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
84 (require 'font-lock))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
86 (defgroup hi-lock-interactive-text-highlighting nil
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87 "Interactively add and remove font-lock patterns for highlighting text."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
88 :group 'faces)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
89
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
90 ;;;###autoload
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
91 (defcustom hi-lock-mode nil
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
92 "Toggle hi-lock, for interactively adding font-lock text-highlighting patterns."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
93 :set (lambda (symbol value)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
94 (hi-lock-mode (or value 0)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
95 :initialize 'custom-initialize-default
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
96 :type 'boolean
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
97 :group 'hi-lock-interactive-text-highlighting
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
98 :require 'hi-lock)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
99
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
100 (defcustom hi-lock-file-patterns-range 10000
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
101 "Limit of search in a buffer for hi-lock patterns.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
102 When a file is visited and hi-lock mode is on patterns starting
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
103 up to this limit are added to font-lock's patterns. See documentation
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
104 of functions `hi-lock-mode' and `hi-lock-find-patterns'."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
105 :type 'integer
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
106 :group 'hi-lock-interactive-text-highlighting)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
107
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
108 (defcustom hi-lock-exclude-modes
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
109 '(rmail-mode mime/viewer-mode gnus-article-mode)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
110 "List of major modes in which hi-lock will not run.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
111 For security reasons since font lock patterns can specify function
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
112 calls."
35215
2be11f207ca8 (hi-lock-exclude-modes): Fix :type.
Dave Love <fx@gnu.org>
parents: 33974
diff changeset
113 :type '(repeat symbol)
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
114 :group 'hi-lock-interactive-text-highlighting)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
115
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
116
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
117 (defgroup hi-lock-faces nil
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
118 "Faces for hi-lock."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
119 :group 'hi-lock-interactive-text-highlighting)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
120
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
121 (defface hi-yellow
33974
e2a51eb8b6cc Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 33780
diff changeset
122 '((((background dark)) (:background "yellow" :foreground "black"))
30896
ca514eff4924 (hi-yellow, hi-pink, hi-green, hi-blue): Force the foreground color to
Miles Bader <miles@gnu.org>
parents: 30590
diff changeset
123 (t (:background "yellow")))
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
124 "Default face for hi-lock mode."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
125 :group 'hi-lock-faces)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
126
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
127 (defface hi-pink
33780
00803fb0f58e (hi-lock-refontify): Don't call non-existent
Gerd Moellmann <gerd@gnu.org>
parents: 31745
diff changeset
128 '((((background dark)) (:background "pink" :foreground "black"))
30896
ca514eff4924 (hi-yellow, hi-pink, hi-green, hi-blue): Force the foreground color to
Miles Bader <miles@gnu.org>
parents: 30590
diff changeset
129 (t (:background "pink")))
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
130 "Face for hi-lock mode."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
131 :group 'hi-lock-faces)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
132
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
133 (defface hi-green
33780
00803fb0f58e (hi-lock-refontify): Don't call non-existent
Gerd Moellmann <gerd@gnu.org>
parents: 31745
diff changeset
134 '((((background dark)) (:background "green" :foreground "black"))
30896
ca514eff4924 (hi-yellow, hi-pink, hi-green, hi-blue): Force the foreground color to
Miles Bader <miles@gnu.org>
parents: 30590
diff changeset
135 (t (:background "green")))
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
136 "Face for hi-lock mode."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
137 :group 'hi-lock-faces)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
138
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
139 (defface hi-blue
33780
00803fb0f58e (hi-lock-refontify): Don't call non-existent
Gerd Moellmann <gerd@gnu.org>
parents: 31745
diff changeset
140 '((((background dark)) (:background "light blue" :foreground "black"))
30896
ca514eff4924 (hi-yellow, hi-pink, hi-green, hi-blue): Force the foreground color to
Miles Bader <miles@gnu.org>
parents: 30590
diff changeset
141 (t (:background "light blue")))
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
142 "Face for hi-lock mode."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
143 :group 'hi-lock-faces)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
144
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
145 (defface hi-black-b
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
146 '((t (:weight bold)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
147 "Face for hi-lock mode."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
148 :group 'hi-lock-faces)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
149
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
150 (defface hi-blue-b
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
151 '((t (:weight bold :foreground "blue")))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
152 "Face for hi-lock mode."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
153 :group 'hi-lock-faces)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
154
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
155 (defface hi-green-b
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
156 '((t (:weight bold :foreground "green")))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
157 "Face for hi-lock mode."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
158 :group 'hi-lock-faces)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
159
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
160 (defface hi-red-b
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
161 '((t (:weight bold :foreground "red")))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
162 "Face for hi-lock mode."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
163 :group 'hi-lock-faces)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
164
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
165 (defface hi-black-hb
31745
d311d1655d29 (hi-black-hb):
Miles Bader <miles@gnu.org>
parents: 30896
diff changeset
166 '((t (:weight bold :height 1.67 :inherit variable-pitch)))
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
167 "Face for hi-lock mode."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
168 :group 'hi-lock-faces)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
169
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
170 (defvar hi-lock-file-patterns nil
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
171 "Patterns found in file for hi-lock. Should not be changed.")
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
172
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
173 (defvar hi-lock-interactive-patterns nil
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
174 "Patterns provided to hi-lock by user. Should not be changed.")
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
175
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
176 (defvar hi-lock-face-history
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
177 (list "hi-yellow" "hi-pink" "hi-green" "hi-blue" "hi-black-b"
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
178 "hi-blue-b" "hi-red-b" "hi-green-b" "hi-black-hb")
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
179 "History list of faces for hi-lock interactive functions.")
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
180
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
181 ;(dolist (f hi-lock-face-history) (unless (facep f) (error "%s not a face" f)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
182
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
183 (defvar hi-lock-regexp-history nil
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
184 "History of regexps used for interactive fontification.")
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
185
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
186 (defvar hi-lock-file-patterns-prefix "Hi-lock"
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
187 "Regexp for finding hi-lock patterns at top of file.")
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
188
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
189 (make-variable-buffer-local 'hi-lock-interactive-patterns)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
190 (put 'hi-lock-interactive-patterns 'permanent-local t)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
191 (make-variable-buffer-local 'hi-lock-regexp-history)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
192 (put 'hi-lock-regexp-history 'permanent-local t)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
193 (make-variable-buffer-local 'hi-lock-file-patterns)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
194 (put 'hi-lock-file-patterns 'permanent-local t)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
195
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
196 (defvar hi-lock-menu (make-sparse-keymap "Hi Lock")
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
197 "Menu for hi-lock mode.")
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
198
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
199 (define-key-after hi-lock-menu [highlight-regexp]
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
200 '(menu-item "Highlight Regexp..." highlight-regexp
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
201 :help "Highlight text matching PATTERN (a regexp)."))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
202
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
203 (define-key-after hi-lock-menu [highlight-phrase]
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
204 '(menu-item "Highlight Phrase..." highlight-phrase
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
205 :help "Highlight text matching PATTERN (a regexp processed to match phrases)."))
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
206
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
207 (define-key-after hi-lock-menu [highlight-lines-matching-regexp]
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
208 '(menu-item "Highlight Lines..." highlight-lines-matching-regexp
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
209 :help "Highlight lines containing match of PATTERN (a regexp).."))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
210
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
211 (define-key-after hi-lock-menu [unhighlight-regexp]
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
212 '(menu-item "Remove Highlighting..." unhighlight-regexp
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
213 :help "Remove previously entered highlighting pattern."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
214 :enable hi-lock-interactive-patterns))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
215
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
216 (define-key-after hi-lock-menu [hi-lock-write-interactive-patterns]
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
217 '(menu-item "Patterns to Buffer" hi-lock-write-interactive-patterns
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
218 :help "Insert interactively added REGEXPs into buffer at point."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
219 :enable hi-lock-interactive-patterns))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
220
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
221 (define-key-after hi-lock-menu [hi-lock-find-patterns]
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
222 '(menu-item "Patterns from Buffer" hi-lock-find-patterns
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
223 :help "Use patterns (if any) near top of buffer."))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
224
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
225 (defvar hi-lock-map (make-sparse-keymap "Hi Lock")
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
226 "Key map for hi-lock.")
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
227
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
228 (define-key hi-lock-map "\C-xwi" 'hi-lock-find-patterns)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
229 (define-key hi-lock-map "\C-xwl" 'highlight-lines-matching-regexp)
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
230 (define-key hi-lock-map "\C-xwp" 'highlight-phrase)
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
231 (define-key hi-lock-map "\C-xwh" 'highlight-regexp)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
232 (define-key hi-lock-map "\C-xwr" 'unhighlight-regexp)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
233 (define-key hi-lock-map "\C-xwb" 'hi-lock-write-interactive-patterns)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
234
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
235 (unless (assq 'hi-lock-mode minor-mode-map-alist)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
236 (setq minor-mode-map-alist (cons (cons 'hi-lock-mode hi-lock-map)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
237 minor-mode-map-alist)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
238
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
239 (unless (assq 'hi-lock-mode minor-mode-alist)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
240 (setq minor-mode-alist (cons '(hi-lock-mode " H") minor-mode-alist)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
241
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
242
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
243 ;; Visible Functions
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
244
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
245
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
246 ;;;###autoload
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
247 (defun hi-lock-mode (&optional arg)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
248 "Toggle minor mode for interactively adding font-lock highlighting patterns.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
249
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
250 If ARG positive turn hi-lock on. Issuing a hi-lock command will also
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
251 turn hi-lock on. When hi-lock is turned on, a \"Regexp Highlighting\"
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
252 submenu is added to the \"Edit\" menu. The commands in the submenu,
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
253 which can be called interactively, are:
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
254
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
255 \\[highlight-regexp] REGEXP FACE
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
256 Highlight matches of pattern REGEXP in current buffer with FACE.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
257
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
258 \\[highlight-phrase] PHRASE FACE
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
259 Highlight matches of phrase PHRASE in current buffer with FACE.
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
260 (PHRASE can be any REGEXP, but spaces will be replaced by matches
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
261 to whitespace and initial lower-case letters will become case insensitive.)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48256
diff changeset
262
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
263 \\[highlight-lines-matching-regexp] REGEXP FACE
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
264 Highlight lines containing matches of REGEXP in current buffer with FACE.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
265
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
266 \\[unhighlight-regexp] REGEXP
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
267 Remove highlighting on matches of REGEXP in current buffer.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
268
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
269 \\[hi-lock-write-interactive-patterns]
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
270 Write active REGEXPs into buffer as comments (if possible). They will
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
271 be read the next time file is loaded or when the \\[hi-lock-find-patterns] command
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
272 is issued. The inserted regexps are in the form of font lock keywords.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
273 (See `font-lock-keywords') They may be edited and re-loaded with \\[hi-lock-find-patterns],
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
274 any valid `font-lock-keywords' form is acceptable.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
275
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
276 \\[hi-lock-find-patterns]
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
277 Re-read patterns stored in buffer (in the format produced by \\[hi-lock-write-interactive-patterns]).
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
278
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
279 When hi-lock is started and if the mode is not excluded, the
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
280 beginning of the buffer is searched for lines of the form:
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
281 Hi-lock: FOO
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
282 where FOO is a list of patterns. These are added to the font lock keywords
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
283 already present. The patterns must start before position (number
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
284 of characters into buffer) `hi-lock-file-patterns-range'. Patterns
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
285 will be read until
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
286 Hi-lock: end
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
287 is found. A mode is excluded if it's in the list `hi-lock-exclude-modes'."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
288 (interactive)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
289 (let ((hi-lock-mode-prev hi-lock-mode))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
290 (setq hi-lock-mode
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
291 (if (null arg) (not hi-lock-mode)
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
292 (> (prefix-numeric-value arg) 0)))
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
293 ;; Turned on.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
294 (when (and (not hi-lock-mode-prev) hi-lock-mode)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
295 (add-hook 'find-file-hooks 'hi-lock-find-file-hook)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
296 (add-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
297 (define-key-after menu-bar-edit-menu [hi-lock]
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
298 (cons "Regexp Highlighting" hi-lock-menu))
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
299 (dolist (buffer (buffer-list))
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
300 (with-current-buffer buffer (hi-lock-find-patterns))))
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
301 ;; Turned off.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
302 (when (and hi-lock-mode-prev (not hi-lock-mode))
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
303 (dolist (buffer (buffer-list))
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
304 (with-current-buffer buffer
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
305 (when (or hi-lock-interactive-patterns hi-lock-file-patterns)
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
306 (font-lock-remove-keywords nil hi-lock-interactive-patterns)
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
307 (font-lock-remove-keywords nil hi-lock-file-patterns)
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
308 (setq hi-lock-interactive-patterns nil
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
309 hi-lock-file-patterns nil)
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
310 (when font-lock-mode (hi-lock-refontify)))))
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
311 (define-key-after menu-bar-edit-menu [hi-lock] nil)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
312 (remove-hook 'find-file-hooks 'hi-lock-find-file-hook)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
313 (remove-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook))))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
314
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
315
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
316 ;;;###autoload
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
317 (defalias 'highlight-lines-matching-regexp 'hi-lock-line-face-buffer)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
318 ;;;###autoload
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
319 (defun hi-lock-line-face-buffer (regexp &optional face)
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
320 "Set face of all lines containing a match of REGEXP to FACE.
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
321
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
322 Interactively, prompt for REGEXP then FACE. Buffer-local history
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
323 list maintained for regexps, global history maintained for faces.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
324 \\<minibuffer-local-map>Use \\[next-history-element] and \\[previous-history-element] to retrieve next or previous history item.
35779
1619fb3fdfa4 (hi-lock-mode, hi-lock-line-face-buffer): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 35215
diff changeset
325 \(See info node `Minibuffer History')"
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
326 (interactive
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
327 (list
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
328 (hi-lock-regexp-okay
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
329 (read-from-minibuffer "Regexp to highlight line: "
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
330 (cons (or (car hi-lock-regexp-history) "") 1 )
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
331 nil nil 'hi-lock-regexp-history))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
332 (hi-lock-read-face-name)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
333 (unless hi-lock-mode (hi-lock-mode))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
334 (or (facep face) (setq face 'rwl-yellow))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
335 (hi-lock-set-pattern
36708
0e09b49d21b8 (hi-lock-line-face-buffer): Wrap the regexp in a group
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36357
diff changeset
336 ;; The \\(?:...\\) grouping construct ensures that a leading ^, +, * or ?
0e09b49d21b8 (hi-lock-line-face-buffer): Wrap the regexp in a group
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36357
diff changeset
337 ;; or a trailing $ in REGEXP will be interpreted correctly.
0e09b49d21b8 (hi-lock-line-face-buffer): Wrap the regexp in a group
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36357
diff changeset
338 (list (concat "^.*\\(?:" regexp "\\).*$") (list 0 (list 'quote face) t))))
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
339
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
340
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
341 ;;;###autoload
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
342 (defalias 'highlight-regexp 'hi-lock-face-buffer)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
343 ;;;###autoload
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
344 (defun hi-lock-face-buffer (regexp &optional face)
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
345 "Set face of each match of REGEXP to FACE.
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
346
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
347 Interactively, prompt for REGEXP then FACE. Buffer-local history
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
348 list maintained for regexps, global history maintained for faces.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
349 \\<minibuffer-local-map>Use \\[next-history-element] and \\[previous-history-element] to retrieve next or previous history item.
35779
1619fb3fdfa4 (hi-lock-mode, hi-lock-line-face-buffer): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 35215
diff changeset
350 \(See info node `Minibuffer History')"
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
351 (interactive
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
352 (list
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
353 (hi-lock-regexp-okay
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
354 (read-from-minibuffer "Regexp to highlight: "
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
355 (cons (or (car hi-lock-regexp-history) "") 1 )
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
356 nil nil 'hi-lock-regexp-history))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
357 (hi-lock-read-face-name)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
358 (or (facep face) (setq face 'rwl-yellow))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
359 (unless hi-lock-mode (hi-lock-mode))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
360 (hi-lock-set-pattern (list regexp (list 0 (list 'quote face) t))))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
361
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
362 ;;;###autoload
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
363 (defalias 'highlight-phrase 'hi-lock-face-phrase-buffer)
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
364 ;;;###autoload
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
365 (defun hi-lock-face-phrase-buffer (regexp &optional face)
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
366 "Set face of each match of phrase REGEXP to FACE.
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
367
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
368 Whitespace in REGEXP converted to arbitrary whitespace and initial
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
369 lower-case letters made case insensitive."
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
370 (interactive
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
371 (list
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
372 (hi-lock-regexp-okay
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
373 (hi-lock-process-phrase
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
374 (read-from-minibuffer "Phrase to highlight: "
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
375 (cons (or (car hi-lock-regexp-history) "") 1 )
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
376 nil nil 'hi-lock-regexp-history)))
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
377 (hi-lock-read-face-name)))
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
378 (or (facep face) (setq face 'rwl-yellow))
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
379 (unless hi-lock-mode (hi-lock-mode))
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
380 (hi-lock-set-pattern (list regexp (list 0 (list 'quote face) t))))
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
381
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
382 ;;;###autoload
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
383 (defalias 'unhighlight-regexp 'hi-lock-unface-buffer)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
384 ;;;###autoload
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
385 (defun hi-lock-unface-buffer (regexp)
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
386 "Remove highlighting of each match to REGEXP set by hi-lock.
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
387
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
388 Interactively, prompt for REGEXP. Buffer-local history of inserted
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
389 regexp's maintained. Will accept only regexps inserted by hi-lock
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
390 interactive functions. \(See `hi-lock-interactive-patterns'.\)
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
391 \\<minibuffer-local-must-match-map>Use \\[minibuffer-complete] to complete a partially typed regexp.
30590
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
392 \(See info node `Minibuffer History'.\)"
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
393 (interactive
39065
2428aa3cec41 Don't call x-popup-menu if display-popup-menus-p returns nil.
Eli Zaretskii <eliz@gnu.org>
parents: 38436
diff changeset
394 (if (and (display-popup-menus-p) (vectorp (this-command-keys)))
30590
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
395 (catch 'snafu
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
396 (or
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
397 (x-popup-menu
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
398 t
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
399 (cons
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
400 `keymap
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
401 (cons "Select Pattern to Unhighlight"
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
402 (mapcar (lambda (pattern)
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
403 (list (car pattern)
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
404 (format
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
405 "%s (%s)" (car pattern)
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
406 (symbol-name
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
407 (car
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
408 (cdr (car (cdr (car (cdr pattern))))))))
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
409 (cons nil nil)
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
410 (car pattern)))
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
411 hi-lock-interactive-patterns))))
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
412 ;; If the user clicks outside the menu, meaning that they
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
413 ;; change their mind, x-popup-menu returns nil, and
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
414 ;; interactive signals a wrong number of arguments error.
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
415 ;; To prevent that, we return an empty string, which will
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
416 ;; effectively disable the rest of the function.
63a24eff41fe (hi-lock-unface-buffer): If a menu of regexps is
Eli Zaretskii <eliz@gnu.org>
parents: 30584
diff changeset
417 (throw 'snafu '(""))))
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
418 (let ((history-list (mapcar (lambda (p) (car p))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
419 hi-lock-interactive-patterns)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
420 (unless hi-lock-interactive-patterns
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
421 (error "No highlighting to remove"))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
422 (list
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
423 (completing-read "Regexp to unhighlight: "
36357
06ff4f3266f8 (hi-lock-unface-buffer): Use nil rather than t for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36062
diff changeset
424 hi-lock-interactive-patterns nil t
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
425 (car (car hi-lock-interactive-patterns))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
426 (cons 'history-list 1))))))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
427 (let ((keyword (assoc regexp hi-lock-interactive-patterns)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
428 (when keyword
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
429 (font-lock-remove-keywords nil (list keyword))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
430 (setq hi-lock-interactive-patterns
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
431 (delq keyword hi-lock-interactive-patterns))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
432 (hi-lock-refontify))))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
433
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
434 ;;;###autoload
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
435 (defun hi-lock-write-interactive-patterns ()
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
436 "Write interactively added patterns, if any, into buffer at point.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
437
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
438 Interactively added patterns are those normally specified using
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
439 `highlight-regexp' and `highlight-lines-matching-regexp'; they can
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
440 be found in variable `hi-lock-interactive-patterns'."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
441 (interactive)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
442 (let ((prefix (format "%s %s:" (or comment-start "") "Hi-lock")))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
443 (when (> (+ (point) (length prefix)) hi-lock-file-patterns-range)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
444 (beep)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
445 (message
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
446 "Warning, inserted keywords not close enough to top of file."))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
447 (mapcar
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
448 (lambda (pattern)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
449 (insert (format "%s (%s) %s\n"
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
450 prefix (prin1-to-string pattern) (or comment-end ""))))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
451 hi-lock-interactive-patterns)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
452
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
453
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
454 ;; Implementation Functions
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
455
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
456 (defun hi-lock-process-phrase (phrase)
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
457 "Convert regexp PHRASE to a regexp that matches phrases.
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
458
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
459 Blanks in PHRASE replaced by regexp that matches arbitrary whitespace
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
460 and initial lower-case letters made case insensitive."
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
461 (let ((mod-phrase nil))
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
462 (setq mod-phrase
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
463 (replace-regexp-in-string
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
464 "\\<[a-z]" (lambda (m) (format "[%s%s]" (upcase m) m)) phrase))
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
465 (setq mod-phrase
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
466 (replace-regexp-in-string
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
467 "\\s-+" "[ \t\n]+" mod-phrase nil t))))
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
468
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
469 (defun hi-lock-regexp-okay (regexp)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
470 "Return REGEXP if it appears suitable for a font-lock pattern.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
471
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
472 Otherwise signal an error. A pattern that matches the null string is
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
473 not suitable."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
474 (if (string-match regexp "")
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
475 (error "Regexp cannot match an empty string")
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
476 regexp))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
477
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
478 (defun hi-lock-read-face-name ()
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
479 "Read face name from minibuffer with completion and history."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
480 (intern (completing-read
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
481 "Highlight using face: "
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
482 obarray 'facep t
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
483 (cons (car hi-lock-face-history)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
484 (let ((prefix
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
485 (try-completion
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
486 (substring (car hi-lock-face-history) 0 1)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
487 (mapcar (lambda (f) (cons f f))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
488 hi-lock-face-history))))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
489 (if (and (stringp prefix)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
490 (not (equal prefix (car hi-lock-face-history))))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
491 (length prefix) 0)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
492 '(hi-lock-face-history . 0))))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
493
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
494 (defun hi-lock-find-file-hook ()
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
495 "Add hi-lock patterns, if present."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
496 (hi-lock-find-patterns))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
497
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
498 (defun hi-lock-current-line (&optional end)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
499 "Return line number of line at point.
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
500 Optional argument END is maximum excursion."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
501 (interactive)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
502 (save-excursion
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
503 (beginning-of-line)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
504 (1+ (count-lines 1 (or end (point))))))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
505
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
506 (defun hi-lock-set-pattern (pattern)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
507 "Add PATTERN to list of interactively highlighted patterns and refontify."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
508 (hi-lock-set-patterns (list pattern)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
509
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
510 (defun hi-lock-set-patterns (patterns)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
511 "Add PATTERNS to list of interactively highlighted patterns and refontify.."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
512 (dolist (pattern patterns)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
513 (unless (member pattern hi-lock-interactive-patterns)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
514 (font-lock-add-keywords nil (list pattern))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
515 (add-to-list 'hi-lock-interactive-patterns pattern)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
516 (hi-lock-refontify))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
517
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
518 (defun hi-lock-set-file-patterns (patterns)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
519 "Replace file patterns list with PATTERNS and refontify."
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
520 (when (or hi-lock-file-patterns patterns)
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
521 (font-lock-remove-keywords nil hi-lock-file-patterns)
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
522 (setq hi-lock-file-patterns patterns)
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
523 (font-lock-add-keywords nil hi-lock-file-patterns)
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
524 (hi-lock-refontify)))
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
525
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
526 (defun hi-lock-refontify ()
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
527 "Unfontify then refontify buffer. Used when hi-lock patterns change."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
528 (interactive)
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
529 (unless font-lock-mode (font-lock-mode 1))
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
530 (font-lock-fontify-buffer))
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
531
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
532 (defun hi-lock-find-patterns ()
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
533 "Find patterns in current buffer for hi-lock."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
534 (interactive)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
535 (unless (memq major-mode hi-lock-exclude-modes)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
536 (let ((all-patterns nil)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
537 (target-regexp (concat "\\<" hi-lock-file-patterns-prefix ":")))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
538 (save-excursion
43052
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
539 (save-restriction
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
540 (widen)
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
541 (goto-char (point-min))
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
542 (re-search-forward target-regexp
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
543 (+ (point) hi-lock-file-patterns-range) t)
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
544 (beginning-of-line)
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
545 (while (and (re-search-forward target-regexp (+ (point) 100) t)
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
546 (not (looking-at "\\s-*end")))
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
547 (let ((patterns
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
548 (condition-case nil
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
549 (read (current-buffer))
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
550 (error (message
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
551 (format "Could not read expression at %d"
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
552 (hi-lock-current-line))) nil))))
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
553 (if patterns
4037178317df *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39065
diff changeset
554 (setq all-patterns (append patterns all-patterns)))))))
35926
d2997845573f (hi-lock-mode): Toggling hi-lock-mode now affects all
Gerd Moellmann <gerd@gnu.org>
parents: 35779
diff changeset
555 (when hi-lock-mode (hi-lock-set-file-patterns all-patterns))
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
556 (if (interactive-p)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
557 (message (format "Hi-lock added %d patterns." (length all-patterns)))))))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
558
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
559 (defun hi-lock-font-lock-hook ()
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
560 "Add hi lock patterns to font-lock's."
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
561 (when hi-lock-mode
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
562 (font-lock-add-keywords nil hi-lock-file-patterns)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
563 (font-lock-add-keywords nil hi-lock-interactive-patterns)))
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
564
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
565 (provide 'hi-lock)
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
566
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49588
diff changeset
567 ;;; arch-tag: d2e8fd07-4cc9-4c6f-a200-1e729bc54066
30565
338238ca63ce *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
568 ;;; hi-lock.el ends here