From: "Andreas Röhler" <andreas.roehler@easy-emacs.de>
To: 13994@debbugs.gnu.org
Subject: bug#13994: End of buffer error for forward-sexp
Date: Mon, 29 Apr 2013 14:43:47 +0200 [thread overview]
Message-ID: <517E6B03.9040109@easy-emacs.de> (raw)
In-Reply-To: <CAFw1JJ7k7h2tRHrN+o1urFPGB4ezV6LrpniXRQabazGsjtUVFw@mail.gmail.com>
Am 18.03.2013 22:54, schrieb Aaron S. Hawley:
> I would like C-M-f (`forward-sexp') to signal an error when reaching
> the beginning or end of a buffer. When running a keyboard macro that
> contains this command, it should reach an error condition of "End of
> buffer". If wish to run C-0 C-x e on a file full of S-expressions and
> have the macro end when an error is reached. Currently, my macro puts
> Emacs in an infinite loop.
>
> I've attached a patch that adds these error conditions. I also need
> to correct my email address in the ChangeLog.
>
> What I wrote isn't every strict. I only catch the condition when the
> function is started from beginning or end of buffer. If the user
> gives an argument for more S-expressions than there are between the
> beginning of the buffer there is no error triggered. This was a
> compromise but also a simpler patch to contribute. I've added the
> unit tests I wrote to implement. I hope they're helpful.
>
> I'm not sure why this was never the case in the first place, nor do I
> know what the consequence of fixing it is. I'm not sure if the lack
> of an error is necessary in the 112 libraries where this function is
> used in Emacs (and probably many times more in libraries outside of
> Emacs!). I'm hoping that after the release Emacs 24.3, now is a good
> time to install this in trunk and find out.
>
> Thanks,
> /a
>
> === modified file 'lisp/ChangeLog'
> --- lisp/ChangeLog 2013-03-18 19:44:15 +0000
> +++ lisp/ChangeLog 2013-03-18 20:37:01 +0000
> @@ -1,3 +1,5 @@
> +2013-03-18 Aaron S. Hawley <aaron.s.hawley@gmail.com>
> +
> + * emacs-lisp/lisp.el (forward-sexp): Signal an error when end of
> + buffer or beginning of buffer reached.
> +
> @@ -1974,7 +1979,7 @@
> (js--multi-line-declaration-indentation): New function.
> (js--proper-indentation): Use it.
>
> -2013-01-11 Aaron S. Hawley <Aaron.Hawley@vtinfo.com>
> +2013-01-11 Aaron S. Hawley <aaron.s.hawley@gmail.com>
>
> * calc/calc.el (calc-highlight-selections-with-faces)
> (calc-dispatch):
>
> === modified file 'lisp/emacs-lisp/lisp.el'
> --- lisp/emacs-lisp/lisp.el 2013-01-01 09:11:05 +0000
> +++ lisp/emacs-lisp/lisp.el 2013-03-18 19:38:50 +0000
> @@ -58,6 +58,10 @@
> (or arg (setq arg 1))
> (if forward-sexp-function
> (funcall forward-sexp-function arg)
> + (when (and (> arg 0) (eobp))
> + (signal 'end-of-buffer nil))
> + (when (and (< arg 0) (bobp))
> + (signal 'beginning-of-buffer nil))
> (goto-char (or (scan-sexps (point) arg) (buffer-end arg)))
> (if (< arg 0) (backward-prefix-chars))))
>
>
> === added file 'test/automated/sexp-tests.el'
> --- test/automated/sexp-tests.el 1970-01-01 00:00:00 +0000
> +++ test/automated/sexp-tests.el 2013-03-18 21:51:52 +0000
> @@ -0,0 +1,98 @@
> +;;; sexp-tests.el --- Test S-expression support in Emacs
> +
> +;; Copyright (C) 2013 Aaron S. Hawley
> +
> +;; Author: Aaron S. Hawley <aaron.s.hawley@gmail.com>
> +;; Keywords: internal
> +
> +;; This program is free software; you can redistribute it and/or modify
> +;; it under the terms of the GNU General Public License as published by
> +;; the Free Software Foundation, either version 3 of the License, or
> +;; (at your option) any later version.
> +
> +;; This program is distributed in the hope that it will be useful,
> +;; but WITHOUT ANY WARRANTY; without even the implied warranty of
> +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +;; GNU General Public License for more details.
> +
> +;; You should have received a copy of the GNU General Public License
> +;; along with this program. If not, see <http://www.gnu.org/licenses/>.
> +
> +;;; Commentary:
> +
> +;; Testing of `forward-sexp'.
> +
> +;;; Code:
> +
> +(require 'ert)
> +
> +(ert-deftest sexp-forward-1 ()
> + "Test basics of \\[forward-sexp]."
> + (with-temp-buffer
> + (insert "()")
> + (goto-char (point-min))
> + (should (null
> + (forward-sexp 1)))))
> +
> +(ert-deftest sexp-backward-1 ()
> + "Test basics of \\[backward-sexp]."
> + (with-temp-buffer
> + (insert "()")
> + (should (null
> + (forward-sexp -1)))))
> +
> +(ert-deftest sexp-forward-1-error-eobp ()
> + "Test error when \\[forward-sexp] at `eobp'."
> + (with-temp-buffer
> + (insert "()")
> + (should-error
> + (forward-sexp 1))))
> +
> +(ert-deftest sexp-backward-1-error-eobp ()
> + "Test error when \\[backward-sexp] at `bobp'."
> + (with-temp-buffer
> + (insert "()")
> + (goto-char (point-min))
> + (should-error
> + (forward-sexp -1))))
> +
> +(ert-deftest sexp-forward-2-eobp-no-error ()
> + "Test lack of error when \\[forward-sexp] beyond `eobp'."
> + (with-temp-buffer
> + (insert "()")
> + (goto-char (point-min))
> + (should (null
> + (forward-sexp 2)))
> + (should (eobp))))
> +
> +(ert-deftest sexp-backward-2-bobp-no-error ()
> + "Test lack of error when \\[backward-sexp] beyond `bobp'."
> + (with-temp-buffer
> + (insert "()")
> + (should (null
> + (forward-sexp -2)))
> + (should (bobp))))
> +
> +(ert-deftest sexp-forward-2-eobp-subsequent-error ()
> + "Test error when \\[forward-sexp] when started from `eobp'."
> + (with-temp-buffer
> + (insert "()")
> + (goto-char (point-min))
> + (should (null
> + (forward-sexp 2)))
> + (should (eobp))
> + (should-error
> + (forward-sexp 1))))
> +
> +(ert-deftest sexp-backward-2-bobp-subsequent-error ()
> + "Test error when \\[backward-sexp] when started from `bobp'."
> + (with-temp-buffer
> + (insert "()")
> + (should (null
> + (forward-sexp -2)))
> + (should (bobp))
> + (should-error
> + (forward-sexp -1))))
> +
> +(provide 'sexp-tests)
> +;;; sexp-tests.el ends here
>
IIRC that was the default at XEmacs. Very annoying, as beginning or EOB are hitted quit often. Than the debugger starts.
For now, what about writing
(if (forward-sexp)
DO-SOMEthing
(message "%s" "nil"))
Best regards,
Andreas
prev parent reply other threads:[~2013-04-29 12:43 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-18 21:54 bug#13994: End of buffer error for forward-sexp Aaron S. Hawley
2013-03-31 13:36 ` Stefan Monnier
2013-04-24 20:38 ` Aaron S. Hawley
2013-04-24 21:22 ` Drew Adams
2013-04-24 21:35 ` Aaron S. Hawley
2013-04-25 3:50 ` Stefan Monnier
2013-04-29 7:10 ` Juri Linkov
2013-04-29 12:43 ` Andreas Röhler [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=517E6B03.9040109@easy-emacs.de \
--to=andreas.roehler@easy-emacs.de \
--cc=13994@debbugs.gnu.org \
/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).