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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13805
diff changeset
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
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
25278
cbe304a26771 Fix maintainer address.
Karl Heuer <kwzh@gnu.org>
parents: 25275
diff changeset
6 ;; Author: rms@gnu.org
3977
bb696888ccb7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3976
diff changeset
7 ;; Maintainer: FSF
bb696888ccb7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3976
diff changeset
8 ;; Keywords: languages, faces
3976
87addb9e55f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3919
diff changeset
9
3912
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 ;; any later version.
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20 ;; GNU General Public License for more details.
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13805
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63202
diff changeset
24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63202
diff changeset
25 ;; Boston, MA 02110-1301, USA.
3912
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 ;;; Commentary:
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 ;;; Code:
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
00ea0fc45685 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3913
diff changeset
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
00ea0fc45685 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3913
diff changeset
139 ;; Find the place to show, if there is one,
00ea0fc45685 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3913
diff changeset
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
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256
3919
bbac27613cee *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3917
diff changeset
257 (provide 'paren)
bbac27613cee *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3917
diff changeset
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
bbac27613cee *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3917
diff changeset
260 ;;; paren.el ends here