conditional execution of parts of macros possible.
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"
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"
* 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;
#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)
{
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
menu->redraw = REDRAW_FULL;
break;
+ case OP_END_COND:
+ break;
+
case OP_WHAT_KEY:
mutt_what_key();
break;
{ "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, "/" },
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;
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
km_error_key (menu->menu);
break;
+ case OP_END_COND:
+ break;
+
default:
return (i);
}