;;; paren.el --- highlight matching paren.
+
;; Copyright (C) 1993 Free Software Foundation, Inc.
;; Author: rms@gnu.ai.mit.edu
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; and show it until input arrives.
(defun show-paren-command-hook ()
;; Do nothing if no window system to display results with.
+ ;; Do nothing if executing keyboard macro.
;; Do nothing if input is pending.
- (if (and window-system (sit-for 0))
+ (if window-system
(let (pos dir mismatch (oldpos (point))
(face show-paren-face))
- (cond ((eq (char-syntax (following-char)) ?\()
- (setq dir 1))
- ((eq (char-syntax (preceding-char)) ?\))
- (setq dir -1)))
+ (cond ((eq (char-syntax (preceding-char)) ?\))
+ (setq dir -1))
+ ((eq (char-syntax (following-char)) ?\()
+ (setq dir 1)))
(if dir
(save-excursion
(save-restriction
(let ((beg (min pos oldpos)) (end (max pos oldpos)))
(and (/= (char-syntax (char-after beg)) ?\$)
(setq mismatch
- (/= (char-after (1- end))
- (logand (lsh (aref (syntax-table)
- (char-after beg))
- -8)
- 255))))))
+ (not (eq (char-after (1- end))
+ ;; This can give nil.
+ (matching-paren (char-after beg))))))))
;; If they don't properly match, use a different face,
;; or print a message.
(if mismatch
(progn
(and (null show-paren-mismatch-face)
(x-display-color-p)
- (or (setq show-paren-mismatch-face
- (internal-find-face 'paren-mismatch))
- (progn
- (make-face 'paren-mismatch)
- (setq show-paren-mismatch-face
- 'paren-mismatch)
- (set-face-background 'paren-mismatch
- "purple"))))
+ (progn
+ (add-to-list 'facemenu-unlisted-faces
+ 'paren-mismatch)
+ (make-face 'paren-mismatch)
+ (or (face-nontrivial-p 'paren-mismatch t)
+ (progn
+ (set-face-background 'paren-mismatch
+ "purple")
+ (set-face-foreground 'paren-mismatch
+ "white")))
+ (setq show-paren-mismatch-face 'paren-mismatch)))
(if show-paren-mismatch-face
(setq face show-paren-mismatch-face)
(message "Paren mismatch"))))
(+ (point) dir) (point)
(current-buffer))
(setq show-paren-overlay-1
- (make-overlay (- pos dir) pos)))
+ (make-overlay (+ (point) dir) (point))))
+ ;; Always set the overlay face, since it varies.
(overlay-put show-paren-overlay-1 'face face))
;; Otherwise, turn off any such highlighting.
(and show-paren-overlay-1
(current-buffer))
(setq show-paren-overlay
(make-overlay (- pos dir) pos)))
+ ;; Always set the overlay face, since it varies.
(overlay-put show-paren-overlay 'face face))
(t
;; If not at a paren that has a match,
(if window-system
(progn
- (setq blink-paren-function nil)
- (add-hook 'post-command-hook 'show-paren-command-hook)))
+ (setq blink-matching-paren-on-screen nil)
+ (add-hook 'post-command-idle-hook 'show-paren-command-hook)))
;;; This is in case paren.el is preloaded.
(add-hook 'window-setup-hook
(function (lambda ()
(if window-system
(progn
- (setq blink-paren-function nil)
- (add-hook 'post-command-hook
+ (setq blink-matching-paren-on-screen nil)
+ (add-hook 'post-command-idle-hook
'show-paren-command-hook))))))
(provide 'paren)