annotate lisp/paren.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents 7d49e4c824b6
children e73df1859dfa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3912
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 ;;; paren.el --- highlight matching paren.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13805
diff changeset
2
14706
e7352445b396 (show-paren-delay): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14624
diff changeset
3 ;; Copyright (C) 1993, 1996 Free Software Foundation, Inc.
3912
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
3977
bb696888ccb7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3976
diff changeset
5 ;; Author: rms@gnu.ai.mit.edu
bb696888ccb7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3976
diff changeset
6 ;; Maintainer: FSF
bb696888ccb7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3976
diff changeset
7 ;; Keywords: languages, faces
3976
87addb9e55f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3919
diff changeset
8
3912
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 ;; any later version.
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19 ;; GNU General Public License for more details.
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 ;; 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
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13805
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13805
diff changeset
24 ;; Boston, MA 02111-1307, USA.
3912
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 ;;; Commentary:
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 ;; Load this and it will display highlighting on whatever
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 ;; paren matches the one before or after point.
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 ;;; Code:
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32
18330
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
33 (defgroup paren-showing nil
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
34 "Showing (un)matching of parens and expressions."
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
35 :prefix "show-paren-"
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
36 :group 'paren-matching)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
37
4123
b05c50e08993 Enable the hook only if window-system.
Richard M. Stallman <rms@gnu.org>
parents: 4059
diff changeset
38 ;; This is the overlay used to highlight the matching paren.
3917
00ea0fc45685 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3913
diff changeset
39 (defvar show-paren-overlay nil)
14706
e7352445b396 (show-paren-delay): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14624
diff changeset
40 ;; 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
41 (defvar show-paren-overlay-1 nil)
b05c50e08993 Enable the hook only if window-system.
Richard M. Stallman <rms@gnu.org>
parents: 4059
diff changeset
42
18330
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
43 (defcustom show-paren-mode nil
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
44 "Toggle Show Paren mode.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
45 When Show Paren mode is enabled, any matching parenthesis is highlighted
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
46 after `show-paren-delay' seconds of Emacs idle time.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
47 You must modify via \\[customize] for this variable to have an effect."
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
48 :set (lambda (symbol value)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
49 (show-paren-mode (or value 0)))
18582
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
50 :initialize 'custom-initialize-default
18330
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
51 :type 'boolean
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
52 :group 'paren-showing
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
53 :require 'paren)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
54
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
55 (defcustom show-paren-style 'parenthesis
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
56 "*Style used when showing a matching paren.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
57 Valid styles are `parenthesis' (meaning show the matching paren),
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
58 `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
59 `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
60 otherwise)."
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
61 :type '(choice (const parenthesis) (const expression) (const mixed))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
62 :group 'paren-showing)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
63
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
64 (defcustom show-paren-delay
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
65 (if (featurep 'lisp-float-type) (/ (float 1) (float 8)) 1)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
66 "*Time in seconds to delay before showing a matching paren."
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
67 :type '(number :tag "seconds")
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
68 :group 'paren-showing)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
69
21891
7d49e4c824b6 (show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents: 18837
diff changeset
70 (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
71 "*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
72 :type 'boolean
7d49e4c824b6 (show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents: 18837
diff changeset
73 :group 'paren-showing
7d49e4c824b6 (show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents: 18837
diff changeset
74 :version "20.3")
7d49e4c824b6 (show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents: 18837
diff changeset
75
18330
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
76 (defface show-paren-match-face
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
77 '((((class color)) (:background "turquoise"))
18837
9b248fbd740f (show-paren-match-face): Use gray on all non-color screens.
Richard M. Stallman <rms@gnu.org>
parents: 18582
diff changeset
78 (t (:background "gray")))
18330
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
79 "Show Paren mode face used for a matching paren."
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
80 :group 'faces
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
81 :group 'paren-showing)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
82
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
83 (defface show-paren-mismatch-face
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
84 '((((class color)) (:foreground "white" :background "purple"))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
85 (t (:reverse-video t)))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
86 "Show Paren mode face used for a mismatching paren."
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
87 :group 'faces
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
88 :group 'paren-showing)
4183
a5f0a739d87d (show-paren-face): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4123
diff changeset
89
18582
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
90 (defvar show-paren-idle-timer nil)
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
91
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
92 ;;;###autoload
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
93 (defun show-paren-mode (&optional arg)
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
94 "Toggle Show Paren mode.
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
95 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
96 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
97
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
98 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
99 in `show-paren-style' after `show-paren-delay' seconds of Emacs idle time."
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
100 (interactive "P")
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
101 (when window-system
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
102 (let ((on-p (if arg
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
103 (> (prefix-numeric-value arg) 0)
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
104 (not show-paren-mode))))
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
105 (setq blink-matching-paren-on-screen (not on-p))
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
106 (when show-paren-idle-timer
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
107 (cancel-timer show-paren-idle-timer))
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
108 (if on-p
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
109 (setq show-paren-idle-timer (run-with-idle-timer
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
110 show-paren-delay t
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
111 'show-paren-function))
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
112 (and show-paren-overlay (overlay-buffer show-paren-overlay)
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
113 (delete-overlay show-paren-overlay))
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
114 (and show-paren-overlay-1 (overlay-buffer show-paren-overlay-1)
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
115 (delete-overlay show-paren-overlay-1)))
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
116 (setq show-paren-mode on-p))))
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
117
3917
00ea0fc45685 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3913
diff changeset
118 ;; Find the place to show, if there is one,
00ea0fc45685 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3913
diff changeset
119 ;; and show it until input arrives.
14706
e7352445b396 (show-paren-delay): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 14624
diff changeset
120 (defun show-paren-function ()
4582
7b665693054c (show-paren-command-hook): Do nothing if input is pending.
Richard M. Stallman <rms@gnu.org>
parents: 4565
diff changeset
121 ;; Do nothing if no window system to display results with.
5623
d571ad3c796e (show-paren-command-hook): Do nothing when in kbd macro.
Richard M. Stallman <rms@gnu.org>
parents: 4582
diff changeset
122 ;; Do nothing if executing keyboard macro.
4582
7b665693054c (show-paren-command-hook): Do nothing if input is pending.
Richard M. Stallman <rms@gnu.org>
parents: 4565
diff changeset
123 ;; Do nothing if input is pending.
18330
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
124 (when window-system
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
125 (let (pos dir mismatch face (oldpos (point)))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
126 (cond ((eq (char-syntax (preceding-char)) ?\))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
127 (setq dir -1))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
128 ((eq (char-syntax (following-char)) ?\()
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
129 (setq dir 1)))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
130 ;;
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
131 ;; Find the other end of the sexp.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
132 (when dir
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
133 (save-excursion
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
134 (save-restriction
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
135 ;; Determine the range within which to look for a match.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
136 (when blink-matching-paren-distance
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
137 (narrow-to-region
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
138 (max (point-min) (- (point) blink-matching-paren-distance))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
139 (min (point-max) (+ (point) blink-matching-paren-distance))))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
140 ;; Scan across one sexp within that range.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
141 ;; Errors or nil mean there is a mismatch.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
142 (condition-case ()
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
143 (setq pos (scan-sexps (point) dir))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
144 (error (setq pos t mismatch t)))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
145 ;; If found a "matching" paren, see if it is the right
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
146 ;; kind of paren to match the one we started at.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
147 (when (integerp pos)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
148 (let ((beg (min pos oldpos)) (end (max pos oldpos)))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
149 (when (/= (char-syntax (char-after beg)) ?\$)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
150 (setq mismatch
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
151 (not (eq (char-before end)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
152 ;; This can give nil.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
153 (matching-paren (char-after beg)))))))))))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
154 ;;
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
155 ;; Highlight the other end of the sexp, or unhighlight if none.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
156 (if (not pos)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
157 (progn
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
158 ;; If not at a paren that has a match,
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
159 ;; turn off any previous paren highlighting.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
160 (and show-paren-overlay (overlay-buffer show-paren-overlay)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
161 (delete-overlay show-paren-overlay))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
162 (and show-paren-overlay-1 (overlay-buffer show-paren-overlay-1)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
163 (delete-overlay show-paren-overlay-1)))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
164 ;;
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
165 ;; Use the correct face.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
166 (if mismatch
21891
7d49e4c824b6 (show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents: 18837
diff changeset
167 (progn
7d49e4c824b6 (show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents: 18837
diff changeset
168 (if show-paren-ring-bell-on-mismatch
7d49e4c824b6 (show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents: 18837
diff changeset
169 (beep))
7d49e4c824b6 (show-paren-ring-bell-on-mismatch): New option.
Richard M. Stallman <rms@gnu.org>
parents: 18837
diff changeset
170 (setq face 'show-paren-mismatch-face))
18330
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
171 (setq face 'show-paren-match-face))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
172 ;;
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
173 ;; If matching backwards, highlight the closeparen
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
174 ;; before point as well as its matching open.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
175 ;; If matching forward, and the openparen is unbalanced,
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
176 ;; highlight the paren at point to indicate misbalance.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
177 ;; Otherwise, turn off any such highlighting.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
178 (if (and (= dir 1) (integerp pos))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
179 (when (and show-paren-overlay-1
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
180 (overlay-buffer show-paren-overlay-1))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
181 (delete-overlay show-paren-overlay-1))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
182 (let ((from (if (= dir 1)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
183 (point)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
184 (forward-point -1)))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
185 (to (if (= dir 1)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
186 (forward-point 1)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
187 (point))))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
188 (if show-paren-overlay-1
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
189 (move-overlay show-paren-overlay-1 from to (current-buffer))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
190 (setq show-paren-overlay-1 (make-overlay from to)))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
191 ;; Always set the overlay face, since it varies.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
192 (overlay-put show-paren-overlay-1 'face face)))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
193 ;;
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
194 ;; Turn on highlighting for the matching paren, if found.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
195 ;; If it's an unmatched paren, turn off any such highlighting.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
196 (unless (integerp pos)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
197 (delete-overlay show-paren-overlay))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
198 (let ((to (if (or (eq show-paren-style 'expression)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
199 (and (eq show-paren-style 'mixed)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
200 (not (pos-visible-in-window-p pos))))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
201 (point)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
202 pos))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
203 (from (if (or (eq show-paren-style 'expression)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
204 (and (eq show-paren-style 'mixed)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
205 (not (pos-visible-in-window-p pos))))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
206 pos
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
207 (save-excursion
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
208 (goto-char pos)
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
209 (forward-point (- dir))))))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
210 (if show-paren-overlay
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
211 (move-overlay show-paren-overlay from to (current-buffer))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
212 (setq show-paren-overlay (make-overlay from to))))
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
213 ;;
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
214 ;; Always set the overlay face, since it varies.
005facba9434 customise, rewrite and extend.
Simon Marshall <simon@gnu.org>
parents: 18318
diff changeset
215 (overlay-put show-paren-overlay 'face face)))))
3912
676fb29d1692 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216
3919
bbac27613cee *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3917
diff changeset
217 (provide 'paren)
bbac27613cee *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3917
diff changeset
218
18582
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
219 (if show-paren-mode
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
220 (show-paren-mode t))
fd88d8f82bbc (show-paren-idle-timer): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18567
diff changeset
221
3919
bbac27613cee *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3917
diff changeset
222 ;;; paren.el ends here