[PATCH] Save and restore point explicitly in `notmuch-wash-toggle-invisible-action'.
Dmitry Kurochkin
dmitry.kurochkin at gmail.com
Tue May 24 16:27:51 PDT 2011
On Tue, 24 May 2011 16:20:34 -0700, Carl Worth <cworth at cworth.org> wrote:
> On Tue, 24 May 2011 18:43:41 -0400, Austin Clements <amdragon at mit.edu> wrote:
> > Saving point this way is a bit dangerous, though. For example, if
> > you're near the end of the buffer and shorten the label, attempting to
> > restore the point could result in an error (or, a more benign example:
> > the cursor could wind up outside the label so pressing RET repeatedly
> > won't toggle it).
> >
> > Unfortunately, I don't know of a clean solution to this, but I think I
> > would rather the cursor move, but stay within the label (probably
> > moving to the beginning), than have problems like the above.
>
> Here's my fix. Let me know what you think.
>
(button-end cite-button) would move the point outside the button - to
the next character after it.
Regards,
Dmitry
> -Carl
>
> From a32e02bf0d2b57d51695f7d4ea6cdda9acb21322 Mon Sep 17 00:00:00 2001
> From: Carl Worth <cworth at cworth.org>
> Date: Mon, 23 May 2011 19:29:46 +0400
> Subject: [PATCH] Carefully preverse point when changing button text in
> `notmuch-wash-toggle-invisible-action'.
>
> Previously, save-excursion was used to attempt to save the point, but
> this was unreliable since the region containing the marker saved by
> save-excursion was deleted. Instead, we save an integer position
> indicating the offset of point within the old button. Then, we restore
> point to the same offset within the new button, (but cap the offset to
> avoid leaving the button entirely).
> ---
> emacs/notmuch-wash.el | 13 +++++++------
> 1 files changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/emacs/notmuch-wash.el b/emacs/notmuch-wash.el
> index 8455eee..3dceb8b 100644
> --- a/emacs/notmuch-wash.el
> +++ b/emacs/notmuch-wash.el
> @@ -82,13 +82,14 @@ collapse the remaining lines into a button.")
> (let* ((new-start (button-start cite-button))
> (overlay (button-get cite-button 'overlay))
> (button-label (notmuch-wash-button-label overlay))
> + (button-offset (- (point) new-start))
> (inhibit-read-only t))
> - (save-excursion
> - (goto-char new-start)
> - (insert button-label)
> - (let ((old-end (button-end cite-button)))
> - (move-overlay cite-button new-start (point))
> - (delete-region (point) old-end))))
> + (goto-char new-start)
> + (insert button-label)
> + (let ((old-end (button-end cite-button)))
> + (move-overlay cite-button new-start (point))
> + (delete-region (point) old-end))
> + (goto-char (min (button-end cite-button) (+ new-start button-offset))))
> (force-window-update)
> (redisplay t))
>
> --
> 1.7.5.1
>
Non-text part: application/pgp-signature
More information about the notmuch
mailing list