From: Alan Mackenzie <acm@muc.de>
To: Stefan Monnier <monnier@IRO.UMontreal.CA>
Cc: Eli Zaretskii <eliz@gnu.org>,
emacs-devel@gnu.org, npostavs@gmail.com, ccsmile2008@outlook.com
Subject: Re: beginning-of-defun-comments bug [was: Re: 26.0.90: mark-defun problem in c-mode]
Date: Sun, 31 Dec 2017 10:50:05 +0000 [thread overview]
Message-ID: <20171231105005.GA7569@ACM> (raw)
In-Reply-To: <jwvefnbbk3s.fsf-monnier+emacs@gnu.org>
Hello, Stefan.
On Sat, Dec 30, 2017 at 23:26:24 -0500, Stefan Monnier wrote:
> > + (if (nth 3 ppss) ; in a string
> > + start
> > + (when (nth 4 ppss) ; in a comment
> > + (setq ppss
> > + (parse-partial-sexp (point) eol nil nil ppss 'syntax-table)))
> > + (catch 'got-it
> > + (while (< (point) eol)
> > + (setq start (point))
> > + (setq ppss (parse-partial-sexp (point) eol nil nil ppss t))
> > + (setq end (if (nth 4 ppss) (nth 8 ppss) eol))
> > + (goto-char start)
> > + (skip-syntax-forward "-" end)
> > + (when (< (point) end)
> > + (throw 'got-it (point)))
> > + (unless (forward-comment 1) ; comment straddles line break.
> > + (throw 'got-it nil))
> > + (setq ppss (syntax-ppss))))))))
> Why not use something like
> (>= (forward-comment (point-max)) (line-end-position))
> ?
Indeed. Why not just use beginning-of-defun--in-emptyish-line-p, which
is in the same file, in the same place as I coded
non-syntactic-ws-in-line, yet I failed to notice it? It is also
somewhat more elegantly coded than my new function.
However, beginning-of-defun--in-emptyish-line-p isn't quite right, in
that it fails to check whether BOL is inside a string. Something like
the following (untested) should fix it:
(defun beginning-of-defun--in-emptyish-line-p ()
"Return non-nil if the point is in an \"emptyish\" line.
This means a line that consists entirely of comments and/or
whitespace."
;; See https://lists.gnu.org/r/help-gnu-emacs/2016-08/msg00141.html
(save-excursion
(forward-line 0)
(let ((ppss (syntax-ppss)))
(and (null (nth 3 ppss))
(< (line-end-position)
(progn (when (nth 4 ppss)
(goto-char (nth 8 ppss)))
(forward-comment (point-max))
(point)))))))
Happy New Year!
> Stefan
--
Alan Mackenzie (Nuremberg, Germany).
prev parent reply other threads:[~2017-12-31 10:50 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-30 9:49 26.0.90: mark-defun problem in c-mode zhang cc
2017-12-30 10:30 ` Eli Zaretskii
2017-12-30 10:34 ` Alan Mackenzie
2017-12-30 12:01 ` beginning-of-defun-comments bug [was: Re: 26.0.90: mark-defun problem in c-mode] Alan Mackenzie
2017-12-30 12:53 ` Eli Zaretskii
2017-12-30 13:05 ` Alan Mackenzie
2018-01-03 4:51 ` Marcin Borkowski
2018-01-03 16:24 ` Alan Mackenzie
2018-01-05 14:55 ` zhang cc
2018-01-06 12:00 ` Alan Mackenzie
2018-01-06 13:54 ` zhang cc
2018-01-07 6:25 ` Marcin Borkowski
2018-03-26 6:57 ` Marcin Borkowski
2017-12-30 15:43 ` Alan Mackenzie
2017-12-30 18:43 ` Stephen Leake
2017-12-31 10:55 ` Alan Mackenzie
2017-12-31 4:26 ` Stefan Monnier
2017-12-31 10:50 ` Alan Mackenzie [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171231105005.GA7569@ACM \
--to=acm@muc.de \
--cc=ccsmile2008@outlook.com \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=monnier@IRO.UMontreal.CA \
--cc=npostavs@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).