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.
This commit is contained in:
Carl Worth 2009-11-04 13:39:26 -08:00
parent 1d68e75c21
commit eacd1ac41e

View file

@ -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)