- ;; Turn on highlighting for the matching paren, if found.
- ;; If it's an unmatched paren, turn off any such highlighting.
- (unless (integerp pos)
- (delete-overlay show-paren-overlay))
- (let ((to (if (or (eq show-paren-style 'expression)
- (and (eq show-paren-style 'mixed)
- (not (pos-visible-in-window-p pos))))
- (point)
- pos))
- (from (if (or (eq show-paren-style 'expression)
+ ;; Highlight the other end of the sexp, or unhighlight if none.
+ (if (not pos)
+ (progn
+ ;; If not at a paren that has a match,
+ ;; turn off any previous paren highlighting.
+ (and show-paren-overlay (overlay-buffer show-paren-overlay)
+ (delete-overlay show-paren-overlay))
+ (and show-paren-overlay-1 (overlay-buffer show-paren-overlay-1)
+ (delete-overlay show-paren-overlay-1)))
+ ;;
+ ;; Use the correct face.
+ (if mismatch
+ (progn
+ (if show-paren-ring-bell-on-mismatch
+ (beep))
+ (setq face 'show-paren-mismatch))
+ (setq face 'show-paren-match))
+ ;;
+ ;; If matching backwards, highlight the closeparen
+ ;; before point as well as its matching open.
+ ;; If matching forward, and the openparen is unbalanced,
+ ;; highlight the paren at point to indicate misbalance.
+ ;; Otherwise, turn off any such highlighting.
+ (if (and (not show-paren-highlight-openparen) (= dir 1) (integerp pos))
+ (when (and show-paren-overlay-1
+ (overlay-buffer show-paren-overlay-1))
+ (delete-overlay show-paren-overlay-1))
+ (let ((from (if (= dir 1)
+ (point)
+ (forward-point -1)))
+ (to (if (= dir 1)
+ (forward-point 1)
+ (point))))
+ (if show-paren-overlay-1
+ (move-overlay show-paren-overlay-1 from to (current-buffer))
+ (setq show-paren-overlay-1 (make-overlay from to nil t)))
+ ;; Always set the overlay face, since it varies.
+ (overlay-put show-paren-overlay-1 'priority show-paren-priority)
+ (overlay-put show-paren-overlay-1 'face face)))
+ ;;
+ ;; Turn on highlighting for the matching paren, if found.
+ ;; If it's an unmatched paren, turn off any such highlighting.
+ (unless (integerp pos)
+ (delete-overlay show-paren-overlay))
+ (let ((to (if (or (eq show-paren-style 'expression)