aboutsummaryrefslogtreecommitdiffhomepage
path: root/notmuch.el
diff options
context:
space:
mode:
authorGravatar Carl Worth <cworth@cworth.org>2009-11-04 13:39:26 -0800
committerGravatar Carl Worth <cworth@cworth.org>2009-11-04 13:39:26 -0800
commiteacd1ac41eb6f50bdae8121606859a3a673e7e7b (patch)
tree2641d18299e3dbb782d3d6624b2c195c7dbb3682 /notmuch.el
parent1d68e75c21e8e7873277c15bfa896cb3b9f726e9 (diff)
notmuch.el: Override next-line and previous-line to make them reliable.
I noticed that these functions would sometimes leave point on an invisible character[*]. The problem would be that point would appear to be on a particular message, but adding or removing a tag would actually add/remove a tag from the *previous* message. Fix the C-n and C-p keybindings at least to call the underlying command and then advance to a visible character. We set this-command in our overrides so that the temporary-goal-column feature still works. [*] The documentation says that command loop is supposed to move point outside of any invisible region when a command exits. But apparently not.
Diffstat (limited to 'notmuch.el')
-rw-r--r--notmuch.el26
1 files changed, 26 insertions, 0 deletions
diff --git a/notmuch.el b/notmuch.el
index 54237f12..a205267e 100644
--- a/notmuch.el
+++ b/notmuch.el
@@ -34,6 +34,8 @@
(define-key map "h" 'notmuch-show-toggle-headers-visible)
(define-key map "n" 'notmuch-show-next-message)
(define-key map "p" 'notmuch-show-previous-message)
+ (define-key map (kbd "C-n") 'notmuch-show-next-line)
+ (define-key map (kbd "C-p") 'notmuch-show-previous-line)
(define-key map "q" 'kill-this-buffer)
(define-key map "s" 'notmuch-show-toggle-signatures-visible)
(define-key map "x" 'kill-this-buffer)
@@ -73,6 +75,30 @@ within the current window."
(or (memq prop buffer-invisibility-spec)
(assq prop buffer-invisibility-spec)))))
+(defun notmuch-show-next-line ()
+ "Like builtin `next-line' but ensuring we end on a visible character.
+
+By advancing forward until reaching a visible character.
+
+Unlike builtin `next-line' this version accepts no arguments."
+ (interactive)
+ (set 'this-command 'next-line)
+ (call-interactively 'next-line)
+ (while (point-invisible-p)
+ (forward-char)))
+
+(defun notmuch-show-previous-line ()
+ "Like builtin `previous-line' but ensuring we end on a visible character.
+
+By advancing forward until reaching a visible character.
+
+Unlike builtin `next-line' this version accepts no arguments."
+ (interactive)
+ (set 'this-command 'previous-line)
+ (call-interactively 'previous-line)
+ (while (point-invisible-p)
+ (forward-char)))
+
(defun notmuch-show-get-message-id ()
(save-excursion
(beginning-of-line)