aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Dmitry Kurochkin <dmitry.kurochkin@gmail.com>2011-05-25 03:02:43 +0400
committerGravatar Carl Worth <cworth@cworth.org>2011-05-24 16:33:09 -0700
commitb6862c7eb9bfb00183e568b40d77ea25ade21db2 (patch)
tree3e4ca4c220bbbc1a29808fe35dd17ad693c90469
parent31b7c04ae1f239c463bc6dcb838acbe4d94c3e2e (diff)
Carefully manage save/restore of point in `notmuch-wash-toggle-invisible-action'.
Before the change, save-excursion was used to save the point. But the marker saved by save-excursion was inside a region that was deleted, so that approach is unreliable, (leading to point jumping to a new position past the button). This patch instead saves point in an integer variable, and when restoring, carefully avoids moving point past the button, (in case the new button label is shorter than the old button label).
-rw-r--r--emacs/notmuch-wash.el13
1 files changed, 7 insertions, 6 deletions
diff --git a/emacs/notmuch-wash.el b/emacs/notmuch-wash.el
index 8455eee0..e8134bf7 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))
+ (old-point (point))
(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 old-point (1- (button-end cite-button)))))
(force-window-update)
(redisplay t))