emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Proposed extension of show-paren-mode: Highlight parens when point i


From: Stefan Monnier
Subject: Re: Proposed extension of show-paren-mode: Highlight parens when point is in L or R margin.
Date: Sun, 12 Oct 2014 00:12:12 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4.50 (gnu/linux)

> So: If point is in the LH margin of the code, highlight the first paren
> on the line and its match, or failing that, the last paren on the line
> with its match.

Related ideas:
- show matching paren when point is right after the open paren or right
  before the close paren.  (see
  
http://stackoverflow.com/questions/25648067/emacs-matching-parenthesis-when-cursor-is-on-closing-parenthesis
  for a 5-liner which does that).

- show matching paren, when there's only whitespace between point and
  the open/close paren.

This second idea is a superset of the one you suggest.  I personally
don't use show-paren-mode because I find it distracting, so maybe
a superset would be too distracting.

> Then again, why not do the same if point is in a line comment?

Sorry, I don't know what "in a line comment" means.

As for your patch, I'd rather see the new code moved to a new function.
See more detailed comments below.


        Stefan


> + (defcustom show-paren-when-point-in-margin nil

Please don't call it "margin".

> !     (cond
> !      ;; Point is at a paren.
> !      ((eq (syntax-class (syntax-after (1- (point)))) 5)
> !       (setq dir -1))
> !      ((eq (syntax-class (syntax-after (point))) 4)
> !       (setq dir 1))
> !      ;; Point is in the LH margin.
> !      ((and show-paren-when-point-in-margin
> !        (< (point) ind-pos))
> !       (cond
> !        ((eq (syntax-class (syntax-after ind-pos)) 4)
> !         (setq dir 1
> !               oldpos ind-pos))
> !        ((eq (syntax-class (syntax-after ind-pos)) 5)
> !         (setq dir -1
> !               oldpos (1+ ind-pos)))
> !        ((eq (syntax-class (syntax-after (1- eol-pos))) 4)
> !         (setq dir 1
> !               oldpos (1- eol-pos)))
> !        ((eq (syntax-class (syntax-after (1- eol-pos))) 5)
> !         (setq dir -1
> !               oldpos eol-pos))))
> !      ;; Point is in a comment or whitespace to the right of the line.
> !      ((and show-paren-when-point-in-margin
> !        (>= (point) eol-pos))
> !       (cond
> !        ((eq (syntax-class (syntax-after (1- eol-pos))) 4)
> !         (setq dir 1
> !               oldpos (1- eol-pos)))
> !        ((eq (syntax-class (syntax-after (1- eol-pos))) 5)
> !         (setq dir -1
> !               oldpos eol-pos)))))

It's not at all clear to me why there has to be so many different cases
(IOW we'd need a comment that explains why we need such complexity).

> !     (when dir
> !       (setq unescaped
> !         (= (if (= dir -1) 1 0)
> !            (logand 1 (- oldpos
> !                         (save-excursion
> !                           (goto-char oldpos)
> !                           (if (= dir -1) (backward-char))
> !                           (skip-syntax-backward "/\\")
> !                           (point)))))))

This is a code duplication.  Please move it to a separate helper function.


        Stefan



reply via email to

[Prev in Thread] Current Thread [Next in Thread]