Commit bbcf9f0a authored by Nicolas Rachinsky's avatar Nicolas Rachinsky

Introduce tag-prefix-cond and end-cond. This makes simple

conditional execution of parts of macros possible.
parent 6e9a7885
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"
......
......@@ -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;
......
......@@ -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;
......
......@@ -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, "/" },
......
......@@ -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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment