Mercurial > emacs
annotate lisp/paren.el @ 69478:e8bb5df2ba7a
Add index entries around each paragraph rather than depend on entries
from beginning of node. Doing so ensures that index entries are less
likely to be forgotten if text is cut and pasted, and are necessary
anyway if the references are on a separate page. It seems that
makeinfo is now (v. 4.8) only producing one index entry per node, so
there is no longer any excuse not to. Use subheading instead of
heading. The incorrect use of heading produced very large fonts in
Info--as large as the main heading.
(From Bill Wohler): MH-E never did appear in Emacs 21--MH-E versions 6
and 7 appeared *around* the time of these Emacs releases.
author | Bill Wohler <wohler@newt.com> |
---|---|
date | Wed, 15 Mar 2006 00:26:12 +0000 |
parents | 3bd95f4f2941 |
children | 749bbf34ba64 c5406394f567 |
rev | line source |
---|---|
38412
253f761ad37b
Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents:
33194
diff
changeset
|
1 ;;; paren.el --- highlight matching paren |
14169 | 2 |
64762
41bb365f41c4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64091
diff
changeset
|
3 ;; Copyright (C) 1993, 1996, 2001, 2002, 2003, 2004, |
68651
3bd95f4f2941
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
67913
diff
changeset
|
4 ;; 2005, 2006 Free Software Foundation, Inc. |
3912 | 5 |
25278 | 6 ;; Author: rms@gnu.org |
3977 | 7 ;; Maintainer: FSF |
8 ;; Keywords: languages, faces | |
3976 | 9 |
3912 | 10 ;; This file is part of GNU Emacs. |
11 | |
12 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
13 ;; it under the terms of the GNU General Public License as published by | |
14 ;; the Free Software Foundation; either version 2, or (at your option) | |
15 ;; any later version. | |
16 | |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
14169 | 23 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
64091 | 24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
25 ;; Boston, MA 02110-1301, USA. | |
3912 | 26 |
27 ;;; Commentary: | |
28 | |
39979
b2ccc516d0dd
Update the Commentary with installation instructions.
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
29 ;; Put this into your ~/.emacs: |
b2ccc516d0dd
Update the Commentary with installation instructions.
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
30 |
b2ccc516d0dd
Update the Commentary with installation instructions.
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
31 ;; (show-paren-mode t) |
b2ccc516d0dd
Update the Commentary with installation instructions.
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
32 |
b2ccc516d0dd
Update the Commentary with installation instructions.
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
33 ;; It will display highlighting on whatever paren matches the one |
b2ccc516d0dd
Update the Commentary with installation instructions.
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
34 ;; before or after point. |
3912 | 35 |
36 ;;; Code: | |
37 | |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
38 (defgroup paren-showing nil |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
39 "Showing (un)matching of parens and expressions." |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
40 :prefix "show-paren-" |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
41 :group 'paren-matching) |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
42 |
4123
b05c50e08993
Enable the hook only if window-system.
Richard M. Stallman <rms@gnu.org>
parents:
4059
diff
changeset
|
43 ;; This is the overlay used to highlight the matching paren. |
3917 | 44 (defvar show-paren-overlay nil) |
14706
e7352445b396
(show-paren-delay): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14624
diff
changeset
|
45 ;; This is the overlay used to highlight the closeparen right before point. |
4123
b05c50e08993
Enable the hook only if window-system.
Richard M. Stallman <rms@gnu.org>
parents:
4059
diff
changeset
|
46 (defvar show-paren-overlay-1 nil) |
b05c50e08993
Enable the hook only if window-system.
Richard M. Stallman <rms@gnu.org>
parents:
4059
diff
changeset
|
47 |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
48 (defcustom show-paren-style 'parenthesis |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
49 "*Style used when showing a matching paren. |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
50 Valid styles are `parenthesis' (meaning show the matching paren), |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
51 `expression' (meaning show the entire expression enclosed by the paren) and |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
52 `mixed' (meaning show the matching paren if it is visible, and the expression |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
53 otherwise)." |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
54 :type '(choice (const parenthesis) (const expression) (const mixed)) |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
55 :group 'paren-showing) |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
56 |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
57 (defcustom show-paren-delay |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
58 (if (featurep 'lisp-float-type) (/ (float 1) (float 8)) 1) |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
59 "*Time in seconds to delay before showing a matching paren." |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
60 :type '(number :tag "seconds") |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
61 :group 'paren-showing) |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
62 |
30787
efa4d1ed3f1b
(show-paren-priority): New user option.
Gerd Moellmann <gerd@gnu.org>
parents:
25813
diff
changeset
|
63 (defcustom show-paren-priority 1000 |
efa4d1ed3f1b
(show-paren-priority): New user option.
Gerd Moellmann <gerd@gnu.org>
parents:
25813
diff
changeset
|
64 "*Priority of paren highlighting overlays." |
efa4d1ed3f1b
(show-paren-priority): New user option.
Gerd Moellmann <gerd@gnu.org>
parents:
25813
diff
changeset
|
65 :type 'integer |
efa4d1ed3f1b
(show-paren-priority): New user option.
Gerd Moellmann <gerd@gnu.org>
parents:
25813
diff
changeset
|
66 :group 'paren-showing |
efa4d1ed3f1b
(show-paren-priority): New user option.
Gerd Moellmann <gerd@gnu.org>
parents:
25813
diff
changeset
|
67 :version "21.1") |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48607
diff
changeset
|
68 |
21891
7d49e4c824b6
(show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents:
18837
diff
changeset
|
69 (defcustom show-paren-ring-bell-on-mismatch nil |
7d49e4c824b6
(show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents:
18837
diff
changeset
|
70 "*If non-nil, beep if mismatched paren is detected." |
7d49e4c824b6
(show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents:
18837
diff
changeset
|
71 :type 'boolean |
7d49e4c824b6
(show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents:
18837
diff
changeset
|
72 :group 'paren-showing |
7d49e4c824b6
(show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents:
18837
diff
changeset
|
73 :version "20.3") |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48607
diff
changeset
|
74 |
67913
cf3a03548c18
(show-paren-match, show-paren-mismatch): Use existing group
Juri Linkov <juri@jurta.org>
parents:
67837
diff
changeset
|
75 (defgroup paren-showing-faces nil |
cf3a03548c18
(show-paren-match, show-paren-mismatch): Use existing group
Juri Linkov <juri@jurta.org>
parents:
67837
diff
changeset
|
76 "Group for faces of Show Paren mode." |
67837
88a152f5d26c
(paren-showing-faces): New group.
Richard M. Stallman <rms@gnu.org>
parents:
67153
diff
changeset
|
77 :group 'paren-showing |
88a152f5d26c
(paren-showing-faces): New group.
Richard M. Stallman <rms@gnu.org>
parents:
67153
diff
changeset
|
78 :group 'faces |
88a152f5d26c
(paren-showing-faces): New group.
Richard M. Stallman <rms@gnu.org>
parents:
67153
diff
changeset
|
79 :version "22.1") |
88a152f5d26c
(paren-showing-faces): New group.
Richard M. Stallman <rms@gnu.org>
parents:
67153
diff
changeset
|
80 |
63202
d307630996bc
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-373
Miles Bader <miles@gnu.org>
parents:
61672
diff
changeset
|
81 (defface show-paren-match |
40794
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
82 '((((class color) (background light)) |
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
83 :background "turquoise") ; looks OK on tty (becomes cyan) |
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
84 (((class color) (background dark)) |
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
85 :background "steelblue3") ; looks OK on tty (becomes blue) |
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
86 (((background dark)) |
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
87 :background "grey50") |
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
88 (t |
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
89 :background "gray")) |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
90 "Show Paren mode face used for a matching paren." |
67913
cf3a03548c18
(show-paren-match, show-paren-mismatch): Use existing group
Juri Linkov <juri@jurta.org>
parents:
67837
diff
changeset
|
91 :group 'paren-showing-faces) |
63202
d307630996bc
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-373
Miles Bader <miles@gnu.org>
parents:
61672
diff
changeset
|
92 ;; backward-compatibility alias |
d307630996bc
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-373
Miles Bader <miles@gnu.org>
parents:
61672
diff
changeset
|
93 (put 'show-paren-match-face 'face-alias 'show-paren-match) |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
94 |
63202
d307630996bc
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-373
Miles Bader <miles@gnu.org>
parents:
61672
diff
changeset
|
95 (defface show-paren-mismatch |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
96 '((((class color)) (:foreground "white" :background "purple")) |
48607
6e11dc64eeca
(show-paren-mismatch-face): Fix face spec.
Andreas Schwab <schwab@suse.de>
parents:
47357
diff
changeset
|
97 (t (:inverse-video t))) |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
98 "Show Paren mode face used for a mismatching paren." |
67913
cf3a03548c18
(show-paren-match, show-paren-mismatch): Use existing group
Juri Linkov <juri@jurta.org>
parents:
67837
diff
changeset
|
99 :group 'paren-showing-faces) |
63202
d307630996bc
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-373
Miles Bader <miles@gnu.org>
parents:
61672
diff
changeset
|
100 ;; backward-compatibility alias |
d307630996bc
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-373
Miles Bader <miles@gnu.org>
parents:
61672
diff
changeset
|
101 (put 'show-paren-mismatch-face 'face-alias 'show-paren-mismatch) |
4183
a5f0a739d87d
(show-paren-face): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4123
diff
changeset
|
102 |
55176
6bce3db285b5
(show-paren-highlight-openparen): New var.
Juri Linkov <juri@jurta.org>
parents:
52401
diff
changeset
|
103 (defvar show-paren-highlight-openparen t |
6bce3db285b5
(show-paren-highlight-openparen): New var.
Juri Linkov <juri@jurta.org>
parents:
52401
diff
changeset
|
104 "*Non-nil turns on openparen highlighting when matching forward.") |
6bce3db285b5
(show-paren-highlight-openparen): New var.
Juri Linkov <juri@jurta.org>
parents:
52401
diff
changeset
|
105 |
18582
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
106 (defvar show-paren-idle-timer nil) |
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
107 |
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
108 ;;;###autoload |
31976
236a7f6d898d
(show-paren-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30787
diff
changeset
|
109 (define-minor-mode show-paren-mode |
18582
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
110 "Toggle Show Paren mode. |
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
111 With prefix ARG, turn Show Paren mode on if and only if ARG is positive. |
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
112 Returns the new status of Show Paren mode (non-nil means on). |
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
113 |
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
114 When Show Paren mode is enabled, any matching parenthesis is highlighted |
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
115 in `show-paren-style' after `show-paren-delay' seconds of Emacs idle time." |
33194
cbfead93715d
(show-paren-mode): Drop unneeded positional args.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31976
diff
changeset
|
116 :global t :group 'paren-showing |
67153
8dc626ffc10d
(show-paren-mode): No longer change `blink-matching-paren-on-screen'.
Luc Teirlinck <teirllm@auburn.edu>
parents:
67052
diff
changeset
|
117 ;; Enable or disable the mechanism. |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
118 ;; First get rid of the old idle timer. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
119 (if show-paren-idle-timer |
18582
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
120 (cancel-timer show-paren-idle-timer)) |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
121 (setq show-paren-idle-timer nil) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
122 ;; If show-paren-mode is enabled in some buffer now, |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
123 ;; set up a new timer. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
124 (when (memq t (mapcar (lambda (buffer) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
125 (with-current-buffer buffer |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
126 show-paren-mode)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
127 (buffer-list))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
128 (setq show-paren-idle-timer (run-with-idle-timer |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
129 show-paren-delay t |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
130 'show-paren-function))) |
31976
236a7f6d898d
(show-paren-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30787
diff
changeset
|
131 (unless show-paren-mode |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
132 (and show-paren-overlay |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
133 (eq (overlay-buffer show-paren-overlay) (current-buffer)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
134 (delete-overlay show-paren-overlay)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
135 (and show-paren-overlay-1 |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
136 (eq (overlay-buffer show-paren-overlay-1) (current-buffer)) |
31976
236a7f6d898d
(show-paren-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30787
diff
changeset
|
137 (delete-overlay show-paren-overlay-1)))) |
18582
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
138 |
3917 | 139 ;; Find the place to show, if there is one, |
140 ;; and show it until input arrives. | |
14706
e7352445b396
(show-paren-delay): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14624
diff
changeset
|
141 (defun show-paren-function () |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
142 (if show-paren-mode |
47357
97c0efea1010
(show-paren-function): Use syntax-after.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43830
diff
changeset
|
143 (let ((oldpos (point)) |
61672
d7252d4ac684
(show-paren-function): Use it to recognize parens that are
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58805
diff
changeset
|
144 (dir (cond ((eq (syntax-class (syntax-after (1- (point)))) 5) -1) |
d7252d4ac684
(show-paren-function): Use it to recognize parens that are
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58805
diff
changeset
|
145 ((eq (syntax-class (syntax-after (point))) 4) 1))) |
47357
97c0efea1010
(show-paren-function): Use syntax-after.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43830
diff
changeset
|
146 pos mismatch face) |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
147 ;; |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
148 ;; Find the other end of the sexp. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
149 (when dir |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
150 (save-excursion |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
151 (save-restriction |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
152 ;; Determine the range within which to look for a match. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
153 (when blink-matching-paren-distance |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
154 (narrow-to-region |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
155 (max (point-min) (- (point) blink-matching-paren-distance)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
156 (min (point-max) (+ (point) blink-matching-paren-distance)))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
157 ;; Scan across one sexp within that range. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
158 ;; Errors or nil mean there is a mismatch. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
159 (condition-case () |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
160 (setq pos (scan-sexps (point) dir)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
161 (error (setq pos t mismatch t))) |
43830
78c2427665f0
(show-paren-function): Move back in other direction
Richard M. Stallman <rms@gnu.org>
parents:
40794
diff
changeset
|
162 ;; Move back the other way and verify we get back to the |
78c2427665f0
(show-paren-function): Move back in other direction
Richard M. Stallman <rms@gnu.org>
parents:
40794
diff
changeset
|
163 ;; starting point. If not, these two parens don't really match. |
78c2427665f0
(show-paren-function): Move back in other direction
Richard M. Stallman <rms@gnu.org>
parents:
40794
diff
changeset
|
164 ;; Maybe the one at point is escaped and doesn't really count. |
78c2427665f0
(show-paren-function): Move back in other direction
Richard M. Stallman <rms@gnu.org>
parents:
40794
diff
changeset
|
165 (when (integerp pos) |
78c2427665f0
(show-paren-function): Move back in other direction
Richard M. Stallman <rms@gnu.org>
parents:
40794
diff
changeset
|
166 (unless (condition-case () |
78c2427665f0
(show-paren-function): Move back in other direction
Richard M. Stallman <rms@gnu.org>
parents:
40794
diff
changeset
|
167 (eq (point) (scan-sexps pos (- dir))) |
78c2427665f0
(show-paren-function): Move back in other direction
Richard M. Stallman <rms@gnu.org>
parents:
40794
diff
changeset
|
168 (error nil)) |
78c2427665f0
(show-paren-function): Move back in other direction
Richard M. Stallman <rms@gnu.org>
parents:
40794
diff
changeset
|
169 (setq pos nil))) |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
170 ;; If found a "matching" paren, see if it is the right |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
171 ;; kind of paren to match the one we started at. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
172 (when (integerp pos) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
173 (let ((beg (min pos oldpos)) (end (max pos oldpos))) |
61672
d7252d4ac684
(show-paren-function): Use it to recognize parens that are
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58805
diff
changeset
|
174 (unless (eq (syntax-class (syntax-after beg)) 8) |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
175 (setq mismatch |
58805
769c3bb23105
(show-paren-function): Fix last change (2004-12-02).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58738
diff
changeset
|
176 (not (or (eq (char-before end) |
769c3bb23105
(show-paren-function): Fix last change (2004-12-02).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58738
diff
changeset
|
177 ;; This can give nil. |
769c3bb23105
(show-paren-function): Fix last change (2004-12-02).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58738
diff
changeset
|
178 (cdr (syntax-after beg))) |
769c3bb23105
(show-paren-function): Fix last change (2004-12-02).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58738
diff
changeset
|
179 (eq (char-after beg) |
769c3bb23105
(show-paren-function): Fix last change (2004-12-02).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58738
diff
changeset
|
180 ;; This can give nil. |
67052
8ad986f91500
(show-paren-function): Allow new paren-class info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
181 (cdr (syntax-after (1- end)))) |
8ad986f91500
(show-paren-function): Allow new paren-class info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
182 ;; The cdr might hold a new paren-class |
8ad986f91500
(show-paren-function): Allow new paren-class info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
183 ;; info rather than a matching-char info, |
8ad986f91500
(show-paren-function): Allow new paren-class info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
184 ;; in which case the two CDRs should match. |
8ad986f91500
(show-paren-function): Allow new paren-class info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
185 (eq (cdr (syntax-after (1- end))) |
8ad986f91500
(show-paren-function): Allow new paren-class info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
186 (cdr (syntax-after beg)))))))))))) |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
187 ;; |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
188 ;; Highlight the other end of the sexp, or unhighlight if none. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
189 (if (not pos) |
21891
7d49e4c824b6
(show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents:
18837
diff
changeset
|
190 (progn |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
191 ;; If not at a paren that has a match, |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
192 ;; turn off any previous paren highlighting. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
193 (and show-paren-overlay (overlay-buffer show-paren-overlay) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
194 (delete-overlay show-paren-overlay)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
195 (and show-paren-overlay-1 (overlay-buffer show-paren-overlay-1) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
196 (delete-overlay show-paren-overlay-1))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
197 ;; |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
198 ;; Use the correct face. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
199 (if mismatch |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
200 (progn |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
201 (if show-paren-ring-bell-on-mismatch |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
202 (beep)) |
63202
d307630996bc
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-373
Miles Bader <miles@gnu.org>
parents:
61672
diff
changeset
|
203 (setq face 'show-paren-mismatch)) |
d307630996bc
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-373
Miles Bader <miles@gnu.org>
parents:
61672
diff
changeset
|
204 (setq face 'show-paren-match)) |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
205 ;; |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
206 ;; If matching backwards, highlight the closeparen |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
207 ;; before point as well as its matching open. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
208 ;; If matching forward, and the openparen is unbalanced, |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
209 ;; highlight the paren at point to indicate misbalance. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
210 ;; Otherwise, turn off any such highlighting. |
55176
6bce3db285b5
(show-paren-highlight-openparen): New var.
Juri Linkov <juri@jurta.org>
parents:
52401
diff
changeset
|
211 (if (and (not show-paren-highlight-openparen) (= dir 1) (integerp pos)) |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
212 (when (and show-paren-overlay-1 |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
213 (overlay-buffer show-paren-overlay-1)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
214 (delete-overlay show-paren-overlay-1)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
215 (let ((from (if (= dir 1) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
216 (point) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
217 (forward-point -1))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
218 (to (if (= dir 1) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
219 (forward-point 1) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
220 (point)))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
221 (if show-paren-overlay-1 |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
222 (move-overlay show-paren-overlay-1 from to (current-buffer)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
223 (setq show-paren-overlay-1 (make-overlay from to))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
224 ;; Always set the overlay face, since it varies. |
30787
efa4d1ed3f1b
(show-paren-priority): New user option.
Gerd Moellmann <gerd@gnu.org>
parents:
25813
diff
changeset
|
225 (overlay-put show-paren-overlay-1 'priority show-paren-priority) |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
226 (overlay-put show-paren-overlay-1 'face face))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
227 ;; |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
228 ;; Turn on highlighting for the matching paren, if found. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
229 ;; If it's an unmatched paren, turn off any such highlighting. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
230 (unless (integerp pos) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
231 (delete-overlay show-paren-overlay)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
232 (let ((to (if (or (eq show-paren-style 'expression) |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
233 (and (eq show-paren-style 'mixed) |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
234 (not (pos-visible-in-window-p pos)))) |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
235 (point) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
236 pos)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
237 (from (if (or (eq show-paren-style 'expression) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
238 (and (eq show-paren-style 'mixed) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
239 (not (pos-visible-in-window-p pos)))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
240 pos |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
241 (save-excursion |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
242 (goto-char pos) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
243 (forward-point (- dir)))))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
244 (if show-paren-overlay |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
245 (move-overlay show-paren-overlay from to (current-buffer)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
246 (setq show-paren-overlay (make-overlay from to)))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
247 ;; |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
248 ;; Always set the overlay face, since it varies. |
30787
efa4d1ed3f1b
(show-paren-priority): New user option.
Gerd Moellmann <gerd@gnu.org>
parents:
25813
diff
changeset
|
249 (overlay-put show-paren-overlay 'priority show-paren-priority) |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
250 (overlay-put show-paren-overlay 'face face))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
251 ;; show-paren-mode is nil in this buffer. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
252 (and show-paren-overlay |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
253 (delete-overlay show-paren-overlay)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
254 (and show-paren-overlay-1 |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
255 (delete-overlay show-paren-overlay-1)))) |
3912 | 256 |
3919 | 257 (provide 'paren) |
258 | |
58416
28906724d6e3
(syntax-after): Undo last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58042
diff
changeset
|
259 ;; arch-tag: d0969b88-7ac0-4bd0-bd53-e73b892b86a9 |
3919 | 260 ;;; paren.el ends here |