Mercurial > emacs
annotate lisp/paren.el @ 56905:661d52db56de
(isearch-toggle-regexp): Set `isearch-success' and `isearch-adjusted' to `t'.
(isearch-toggle-case-fold): Set `isearch-success' to `t'.
(isearch-message-prefix): Add "pending" for isearch-adjusted.
(isearch-other-meta-char): Restore isearch-point unconditionally.
(isearch-query-replace): Add new arg `regexp-flag' and use it.
Set point to start of match if region is not active in transient
mark mode (to include the current match to region boundaries).
Push the search string to `query-replace-from-history-variable'.
Add prompt "Query replace regexp" for isearch-regexp.
Add region beginning/end as last arguments of `perform-replace.'
(isearch-query-replace-regexp): Replace code by the call to
`isearch-query-replace' with arg `t'.
author | Juri Linkov <juri@jurta.org> |
---|---|
date | Fri, 03 Sep 2004 20:32:57 +0000 |
parents | 6bce3db285b5 |
children | 286ed823f2b0 4c90ffeb71c5 |
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 |
40794
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
3 ;; Copyright (C) 1993, 1996, 2001 Free Software Foundation, Inc. |
3912 | 4 |
25278 | 5 ;; Author: rms@gnu.org |
3977 | 6 ;; Maintainer: FSF |
7 ;; Keywords: languages, faces | |
3976 | 8 |
3912 | 9 ;; This file is part of GNU Emacs. |
10 | |
11 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
12 ;; it under the terms of the GNU General Public License as published by | |
13 ;; the Free Software Foundation; either version 2, or (at your option) | |
14 ;; any later version. | |
15 | |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
14169 | 22 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
24 ;; Boston, MA 02111-1307, USA. | |
3912 | 25 |
26 ;;; Commentary: | |
27 | |
39979
b2ccc516d0dd
Update the Commentary with installation instructions.
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
28 ;; Put this into your ~/.emacs: |
b2ccc516d0dd
Update the Commentary with installation instructions.
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
29 |
b2ccc516d0dd
Update the Commentary with installation instructions.
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
30 ;; (show-paren-mode t) |
b2ccc516d0dd
Update the Commentary with installation instructions.
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
31 |
b2ccc516d0dd
Update the Commentary with installation instructions.
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
32 ;; 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
|
33 ;; before or after point. |
3912 | 34 |
35 ;;; Code: | |
36 | |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
37 (defgroup paren-showing nil |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
38 "Showing (un)matching of parens and expressions." |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
39 :prefix "show-paren-" |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
40 :group 'paren-matching) |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
41 |
4123
b05c50e08993
Enable the hook only if window-system.
Richard M. Stallman <rms@gnu.org>
parents:
4059
diff
changeset
|
42 ;; This is the overlay used to highlight the matching paren. |
3917 | 43 (defvar show-paren-overlay nil) |
14706
e7352445b396
(show-paren-delay): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14624
diff
changeset
|
44 ;; 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
|
45 (defvar show-paren-overlay-1 nil) |
b05c50e08993
Enable the hook only if window-system.
Richard M. Stallman <rms@gnu.org>
parents:
4059
diff
changeset
|
46 |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
47 (defcustom show-paren-style 'parenthesis |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
48 "*Style used when showing a matching paren. |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
49 Valid styles are `parenthesis' (meaning show the matching paren), |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
50 `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
|
51 `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
|
52 otherwise)." |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
53 :type '(choice (const parenthesis) (const expression) (const mixed)) |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
54 :group 'paren-showing) |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
55 |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
56 (defcustom show-paren-delay |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
57 (if (featurep 'lisp-float-type) (/ (float 1) (float 8)) 1) |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
58 "*Time in seconds to delay before showing a matching paren." |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
59 :type '(number :tag "seconds") |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
60 :group 'paren-showing) |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
61 |
30787
efa4d1ed3f1b
(show-paren-priority): New user option.
Gerd Moellmann <gerd@gnu.org>
parents:
25813
diff
changeset
|
62 (defcustom show-paren-priority 1000 |
efa4d1ed3f1b
(show-paren-priority): New user option.
Gerd Moellmann <gerd@gnu.org>
parents:
25813
diff
changeset
|
63 "*Priority of paren highlighting overlays." |
efa4d1ed3f1b
(show-paren-priority): New user option.
Gerd Moellmann <gerd@gnu.org>
parents:
25813
diff
changeset
|
64 :type 'integer |
efa4d1ed3f1b
(show-paren-priority): New user option.
Gerd Moellmann <gerd@gnu.org>
parents:
25813
diff
changeset
|
65 :group 'paren-showing |
efa4d1ed3f1b
(show-paren-priority): New user option.
Gerd Moellmann <gerd@gnu.org>
parents:
25813
diff
changeset
|
66 :version "21.1") |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48607
diff
changeset
|
67 |
21891
7d49e4c824b6
(show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents:
18837
diff
changeset
|
68 (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
|
69 "*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
|
70 :type 'boolean |
7d49e4c824b6
(show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents:
18837
diff
changeset
|
71 :group 'paren-showing |
7d49e4c824b6
(show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents:
18837
diff
changeset
|
72 :version "20.3") |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48607
diff
changeset
|
73 |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
74 (defface show-paren-match-face |
40794
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
75 '((((class color) (background light)) |
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
76 :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
|
77 (((class color) (background dark)) |
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
78 :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
|
79 (((background dark)) |
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
80 :background "grey50") |
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
81 (t |
3ab0eeb4df95
(show-paren-match-face): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents:
39979
diff
changeset
|
82 :background "gray")) |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
83 "Show Paren mode face used for a matching paren." |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
84 :group 'faces |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
85 :group 'paren-showing) |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
86 |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
87 (defface show-paren-mismatch-face |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
88 '((((class color)) (:foreground "white" :background "purple")) |
48607
6e11dc64eeca
(show-paren-mismatch-face): Fix face spec.
Andreas Schwab <schwab@suse.de>
parents:
47357
diff
changeset
|
89 (t (:inverse-video t))) |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
90 "Show Paren mode face used for a mismatching paren." |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
91 :group 'faces |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
92 :group 'paren-showing) |
4183
a5f0a739d87d
(show-paren-face): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4123
diff
changeset
|
93 |
55176
6bce3db285b5
(show-paren-highlight-openparen): New var.
Juri Linkov <juri@jurta.org>
parents:
52401
diff
changeset
|
94 (defvar show-paren-highlight-openparen t |
6bce3db285b5
(show-paren-highlight-openparen): New var.
Juri Linkov <juri@jurta.org>
parents:
52401
diff
changeset
|
95 "*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
|
96 |
18582
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
97 (defvar show-paren-idle-timer nil) |
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
98 |
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
99 ;;;###autoload |
31976
236a7f6d898d
(show-paren-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30787
diff
changeset
|
100 (define-minor-mode show-paren-mode |
18582
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
101 "Toggle Show Paren mode. |
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
102 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
|
103 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
|
104 |
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
105 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
|
106 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
|
107 :global t :group 'paren-showing |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
108 ;; Turn off the usual paren-matching method |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
109 ;; when this one is turned on. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
110 (if (local-variable-p 'show-paren-mode) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
111 (make-local-variable 'blink-matching-paren-on-screen) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
112 (kill-local-variable 'blink-matching-paren-on-screen)) |
31976
236a7f6d898d
(show-paren-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30787
diff
changeset
|
113 (setq blink-matching-paren-on-screen (not show-paren-mode)) |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
114 |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
115 ;; Now enable or disable the mechanism. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
116 ;; 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
|
117 (if show-paren-idle-timer |
18582
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
118 (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
|
119 (setq show-paren-idle-timer nil) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
120 ;; 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
|
121 ;; set up a new timer. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
122 (when (memq t (mapcar (lambda (buffer) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
123 (with-current-buffer buffer |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
124 show-paren-mode)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
125 (buffer-list))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
126 (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
|
127 show-paren-delay t |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
128 'show-paren-function))) |
31976
236a7f6d898d
(show-paren-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30787
diff
changeset
|
129 (unless show-paren-mode |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
130 (and show-paren-overlay |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
131 (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
|
132 (delete-overlay show-paren-overlay)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
133 (and show-paren-overlay-1 |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
134 (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
|
135 (delete-overlay show-paren-overlay-1)))) |
18582
fd88d8f82bbc
(show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18567
diff
changeset
|
136 |
3917 | 137 ;; Find the place to show, if there is one, |
138 ;; and show it until input arrives. | |
14706
e7352445b396
(show-paren-delay): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14624
diff
changeset
|
139 (defun show-paren-function () |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
140 (if show-paren-mode |
47357
97c0efea1010
(show-paren-function): Use syntax-after.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43830
diff
changeset
|
141 (let ((oldpos (point)) |
97c0efea1010
(show-paren-function): Use syntax-after.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43830
diff
changeset
|
142 (dir (cond ((eq (car (syntax-after (1- (point)))) 5) -1) |
97c0efea1010
(show-paren-function): Use syntax-after.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43830
diff
changeset
|
143 ((eq (car (syntax-after (point))) 4) 1))) |
97c0efea1010
(show-paren-function): Use syntax-after.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43830
diff
changeset
|
144 pos mismatch face) |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
145 ;; |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
146 ;; 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
|
147 (when dir |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
148 (save-excursion |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
149 (save-restriction |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
150 ;; 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
|
151 (when blink-matching-paren-distance |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
152 (narrow-to-region |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
153 (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
|
154 (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
|
155 ;; 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
|
156 ;; 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
|
157 (condition-case () |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
158 (setq pos (scan-sexps (point) dir)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
159 (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
|
160 ;; 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
|
161 ;; 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
|
162 ;; 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
|
163 (when (integerp pos) |
78c2427665f0
(show-paren-function): Move back in other direction
Richard M. Stallman <rms@gnu.org>
parents:
40794
diff
changeset
|
164 (unless (condition-case () |
78c2427665f0
(show-paren-function): Move back in other direction
Richard M. Stallman <rms@gnu.org>
parents:
40794
diff
changeset
|
165 (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
|
166 (error nil)) |
78c2427665f0
(show-paren-function): Move back in other direction
Richard M. Stallman <rms@gnu.org>
parents:
40794
diff
changeset
|
167 (setq pos nil))) |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
168 ;; 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
|
169 ;; 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
|
170 (when (integerp pos) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
171 (let ((beg (min pos oldpos)) (end (max pos oldpos))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
172 (when (/= (char-syntax (char-after beg)) ?\$) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
173 (setq mismatch |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
174 (not (eq (char-before end) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
175 ;; This can give nil. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
176 (matching-paren (char-after beg))))))))))) |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
177 ;; |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
178 ;; 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
|
179 (if (not pos) |
21891
7d49e4c824b6
(show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents:
18837
diff
changeset
|
180 (progn |
25275
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
181 ;; 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
|
182 ;; turn off any previous paren highlighting. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
183 (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
|
184 (delete-overlay show-paren-overlay)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
185 (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
|
186 (delete-overlay show-paren-overlay-1))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
187 ;; |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
188 ;; Use the correct face. |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
189 (if mismatch |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
190 (progn |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
191 (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
|
192 (beep)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
193 (setq face 'show-paren-mismatch-face)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
194 (setq face 'show-paren-match-face)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
195 ;; |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
196 ;; If matching backwards, highlight the closeparen |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
197 ;; 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
|
198 ;; 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
|
199 ;; 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
|
200 ;; Otherwise, turn off any such highlighting. |
55176
6bce3db285b5
(show-paren-highlight-openparen): New var.
Juri Linkov <juri@jurta.org>
parents:
52401
diff
changeset
|
201 (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
|
202 (when (and show-paren-overlay-1 |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
203 (overlay-buffer show-paren-overlay-1)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
204 (delete-overlay show-paren-overlay-1)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
205 (let ((from (if (= dir 1) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
206 (point) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
207 (forward-point -1))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
208 (to (if (= dir 1) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
209 (forward-point 1) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
210 (point)))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
211 (if show-paren-overlay-1 |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
212 (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
|
213 (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
|
214 ;; 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
|
215 (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
|
216 (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
|
217 ;; |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
218 ;; 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
|
219 ;; 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
|
220 (unless (integerp pos) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
221 (delete-overlay show-paren-overlay)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
222 (let ((to (if (or (eq show-paren-style 'expression) |
18330
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
223 (and (eq show-paren-style 'mixed) |
005facba9434
customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents:
18318
diff
changeset
|
224 (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
|
225 (point) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
226 pos)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
227 (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
|
228 (and (eq show-paren-style 'mixed) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
229 (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
|
230 pos |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
231 (save-excursion |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
232 (goto-char pos) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
233 (forward-point (- dir)))))) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
234 (if show-paren-overlay |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
235 (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
|
236 (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
|
237 ;; |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
238 ;; 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
|
239 (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
|
240 (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
|
241 ;; 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
|
242 (and show-paren-overlay |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
243 (delete-overlay show-paren-overlay)) |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
244 (and show-paren-overlay-1 |
1b1edbd429ea
(show-paren-mode): Support making show-paren-mode
Karl Heuer <kwzh@gnu.org>
parents:
24650
diff
changeset
|
245 (delete-overlay show-paren-overlay-1)))) |
3912 | 246 |
3919 | 247 (provide 'paren) |
248 | |
52401 | 249 ;;; arch-tag: d0969b88-7ac0-4bd0-bd53-e73b892b86a9 |
3919 | 250 ;;; paren.el ends here |