From: Kevin McCarthy Date: Mon, 8 Aug 2016 20:13:30 +0000 (-0700) Subject: Clear pager position upon returning to the index menu. X-Git-Tag: neomutt-20160822~56 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d29735663c45204a5aaff3a08c61ac63b6315dd1;p=neomutt Clear pager position upon returning to the index menu. This fixes a bug where opening a message sometimes shows it scrolled down. The easiest way to trigger this is to open a long message in a mailbox with no new messages, scroll down, hit and then reopen the message. The pager will "remember" the position and scroll down. If you simply exit the message and re-enter it, the position is not saved. More annoyingly, once in a very great while I will open a new message and have the message scrolled down partway. I believe this is due to OldHdr happening to point to the same address as the Header of the new message. This is somewhat easily triggered on a mailbox with one message, which you open, scroll down in, hit to exit, and then delete/sync. In another mutt instance, copy the same messsage back to the mailbox, then open the message in the original mutt instance. At least some of the time, the OldHdr pointer matches the new message, and so it opens scrolled down. This patch solves the problem by clearing the pager position once all redirections through the index menu are done. --- diff --git a/curs_main.c b/curs_main.c index ca7938886..8e0f52ad8 100644 --- a/curs_main.c +++ b/curs_main.c @@ -2371,6 +2371,7 @@ int mutt_index_menu (void) if (menu->menu == MENU_PAGER) { + mutt_clear_pager_position (); menu->menu = MENU_MAIN; menu->redraw = REDRAW_FULL; #if 0 diff --git a/pager.c b/pager.c index 9404b7e14..d7674eb30 100644 --- a/pager.c +++ b/pager.c @@ -1563,6 +1563,11 @@ static const struct mapping_t PagerHelpExtra[] = { { NULL, 0 } }; +void mutt_clear_pager_position (void) +{ + TopLine = 0; + OldHdr = NULL; +} /* This pager is actually not so simple as it once was. It now operates in diff --git a/protos.h b/protos.h index c21951527..19d640032 100644 --- a/protos.h +++ b/protos.h @@ -175,6 +175,7 @@ void mutt_canonical_charset (char *, size_t, const char *); int mutt_count_body_parts (CONTEXT *, HEADER *); void mutt_check_rescore (CONTEXT *); void mutt_clear_error (void); +void mutt_clear_pager_position (void); void mutt_create_alias (ENVELOPE *, ADDRESS *); void mutt_decode_attachment (BODY *, STATE *); void mutt_decode_base64 (STATE *s, long len, int istext, iconv_t cd);