[neomutt-devel] Header::collapsed and single message; [PATCH] WIP: Fix <jump> function, v2
Floyd Anderson
f.a at 31c0.net
Thu Mar 15 02:50:05 CET 2018
Previous version fails in limited views of collapsed threads where the
(real) thread root message is invisible, i.e. top message is a child.
Also mutt_parent_message() is too gabby on errors, so it is replaced by
the complete silent mutt_messages_in_thread() method. This helps not to
overlay own error messages.
---
curs_main.c | 62 ++++++++++++++++++-------------------------------------------
1 file changed, 18 insertions(+), 44 deletions(-)
diff --git a/curs_main.c b/curs_main.c
index 87c4ce33..4efa0769 100644
--- a/curs_main.c
+++ b/curs_main.c
@@ -1413,58 +1413,32 @@ int mutt_index_menu(void)
mutt_unget_event(LastKey, 0);
buf[0] = 0;
if (mutt_get_field(_("Jump to message: "), buf, sizeof(buf), 0) != 0 || !buf[0])
- {
- if (menu->menu == MENU_PAGER)
- {
- op = OP_DISPLAY_MESSAGE;
- continue;
- }
- break;
- }
-
- if (mutt_str_atoi(buf, &i) < 0)
- {
+ mutt_error(_("Nothing to do."));
+ else if (mutt_str_atoi(buf, &i) < 0)
mutt_error(_("Argument must be a message number."));
- break;
- }
-
- if (i > 0 && i <= Context->msgcount)
+ else if (i < 1 || Context->msgcount < i)
+ mutt_error(_("Invalid message number."));
+ else if (!message_is_visible(Context, i - 1))
+ mutt_error(_("That message is not visible."));
+ else
{
- int msg = mutt_parent_message(Context, Context->hdrs[i], 1);
- msg = Context->v2r[msg];
- mutt_uncollapse_thread(Context, Context->hdrs[msg]);
- mutt_set_virtual(Context);
+ struct Header *hdr = Context->hdrs[i - 1];
- for (j = i - 1; j < Context->msgcount; j++)
+ if (mutt_messages_in_thread(Context, hdr, 1) != 1)
{
- if (Context->hdrs[j]->virtual != -1)
- break;
- }
- if (j >= Context->msgcount)
- {
- for (j = i - 2; j >= 0; j--)
- {
- if (Context->hdrs[j]->virtual != -1)
- break;
- }
+ mutt_uncollapse_thread(Context, hdr);
+ mutt_set_virtual(Context);
}
+ menu->current = hdr->virtual;
+ }
- if (j >= 0)
- {
- menu->current = Context->hdrs[j]->virtual;
- if (menu->menu == MENU_PAGER)
- {
- op = OP_DISPLAY_MESSAGE;
- continue;
- }
- else
- menu->redraw = REDRAW_FULL;
- }
- else
- mutt_error(_("That message is not visible."));
+ if (menu->menu == MENU_PAGER)
+ {
+ op = OP_DISPLAY_MESSAGE;
+ continue;
}
else
- mutt_error(_("Invalid message number."));
+ menu->redraw = REDRAW_FULL;
break;
--
2.16.2
More information about the neomutt-devel
mailing list