From: Nicolas Rachinsky Date: Fri, 4 Jul 2003 17:07:22 +0000 (+0000) Subject: Introduce tag-prefix-cond and end-cond. This makes simple X-Git-Tag: pre-type-punning-patch~59 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bbcf9f0a71ea7dbc835e1abff85fed1d44f3f24c;p=mutt Introduce tag-prefix-cond and end-cond. This makes simple conditional execution of parts of macros possible. --- diff --git a/OPS b/OPS index ddb2022d..f090fb2c 100644 --- a/OPS +++ b/OPS @@ -1,4 +1,5 @@ OP_NULL "null operation" +OP_END_COND "end of conditional execution (noop)" OP_ATTACH_VIEW_MAILCAP "force viewing of attachment using mailcap" OP_ATTACH_VIEW_TEXT "view attachment as text" OP_ATTACH_COLLAPSE "Toggle display of subparts" @@ -156,6 +157,7 @@ OP_SORT "sort messages" OP_SORT_REVERSE "sort messages in reverse order" OP_TAG "tag the current entry" OP_TAG_PREFIX "apply next function to tagged messages" +OP_TAG_PREFIX_COND "apply next function ONLY to tagged messages" OP_TAG_SUBTHREAD "tag the current subthread" OP_TAG_THREAD "tag the current thread" OP_TOGGLE_NEW "toggle a message's 'new' flag" diff --git a/curs_lib.c b/curs_lib.c index 0bb9f3b3..ba120bd4 100644 --- a/curs_lib.c +++ b/curs_lib.c @@ -39,7 +39,7 @@ * is impossible to unget function keys in SLang, so roll our own input * buffering routines. */ -static size_t UngetCount = 0; +size_t UngetCount = 0; static size_t UngetBufLen = 0; static event_t *KeyEvent; diff --git a/curs_main.c b/curs_main.c index 2bc3b593..cf618895 100644 --- a/curs_main.c +++ b/curs_main.c @@ -101,6 +101,7 @@ static const char *No_visible = N_("No visible messages."); #define UNREAD(h) mutt_thread_contains_unread (Context, h) extern const char *ReleaseDate; +extern size_t UngetCount; void index_make_entry (char *s, size_t l, MUTTMENU *menu, int num) { @@ -632,6 +633,40 @@ int mutt_index_menu (void) else if (option (OPTAUTOTAG) && Context && Context->tagged) tag = 1; + if (op == OP_TAG_PREFIX_COND) + { + if (!Context) + { + mutt_error _("No mailbox is open."); + continue; + } + + if (!Context->tagged) + { + event_t tmp; + while(UngetCount>0) + { + tmp=mutt_getch(); + if(tmp.op==OP_END_COND)break; + } + mutt_message _("Nothing to do."); + continue; + } + tag = 1; + + /* give visual indication that the next command is a tag- command */ + mvaddstr (LINES - 1, 0, "tag-"); + clrtoeol (); + + /* get the real command */ + if ((op = km_dokey (MENU_MAIN)) == OP_TAG_PREFIX) + { + /* abort tag sequence */ + CLEARLINE (LINES-1); + continue; + } + } + mutt_clear_error (); } else @@ -2026,6 +2061,9 @@ CHECK_IMAP_ACL(IMAP_ACL_DELETE); menu->redraw = REDRAW_FULL; break; + case OP_END_COND: + break; + case OP_WHAT_KEY: mutt_what_key(); break; diff --git a/functions.h b/functions.h index 94791f21..a3021126 100644 --- a/functions.h +++ b/functions.h @@ -51,6 +51,8 @@ struct binding_t OpGeneric[] = { { "half-down", OP_HALF_DOWN, "]" }, { "help", OP_HELP, "?" }, { "tag-prefix", OP_TAG_PREFIX, ";" }, + { "tag-prefix-cond", OP_TAG_PREFIX_COND, NULL }, + { "end-cond", OP_END_COND, NULL }, { "shell-escape", OP_SHELL_ESCAPE, "!" }, { "select-entry", OP_GENERIC_SELECT_ENTRY,M_ENTER_S }, { "search", OP_SEARCH, "/" }, diff --git a/menu.c b/menu.c index d9212b8a..97636362 100644 --- a/menu.c +++ b/menu.c @@ -30,6 +30,8 @@ extern int Charset_is_utf8; /* FIXME: bad modularisation */ +extern size_t UngetCount; + static void print_enriched_string (int attr, unsigned char *s, int do_color) { wchar_t wc; @@ -870,6 +872,28 @@ int mutt_menuLoop (MUTTMENU *menu) i = -1; } } + if (i == OP_TAG_PREFIX_COND) + { + if (menu->tagged) + { + mvaddstr (LINES - 1, 0, "Tag-"); + clrtoeol (); + i = km_dokey (menu->menu); + menu->tagprefix = 1; + CLEARLINE (LINES - 1); + } + else + { + event_t tmp; + while(UngetCount>0) + { + tmp=mutt_getch(); + if(tmp.op==OP_END_COND)break; + } + mutt_message _("Nothing to do."); + i = -1; + } + } else if (menu->tagged && option (OPTAUTOTAG)) menu->tagprefix = 1; else @@ -1032,6 +1056,9 @@ int mutt_menuLoop (MUTTMENU *menu) km_error_key (menu->menu); break; + case OP_END_COND: + break; + default: return (i); }