written by Nicolas Rachinsky http://www.rachinsky.de This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. --- curs_lib.c.orig Thu Nov 15 23:56:51 2001 +++ curs_lib.c Thu Nov 15 23:57:02 2001 @@ -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; --- PATCHES~ Tue Nov 6 19:59:33 2001 +++ PATCHES Tue Nov 6 19:59:42 2001 @@ -1,0 +1 @@ +1.3.23.2.nr.tag_prefix_cond --- OPS.orig Tue Sep 11 12:50:50 2001 +++ OPS Sun Dec 2 01:52:49 2001 @@ -1,4 +1,5 @@ OP_NULL "null operation" +OP_SPECIAL "special operation (does nothing)" 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" @@ -153,6 +154,7 @@ 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" --- curs_main.c.orig Sun Dec 2 01:50:43 2001 +++ curs_main.c Sun Dec 2 01:59:14 2001 @@ -43,7 +43,7 @@ - +extern size_t UngetCount; @@ -621,6 +621,40 @@ 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_SPECIAL)break; + } + mutt_message _("Nothing todo."); + 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 @@ -1964,6 +1998,9 @@ if (CURHDR->attach_del) Context->changed = 1; menu->redraw = REDRAW_FULL; + break; + + case OP_SPECIAL: break; default: --- functions.h.orig Tue Sep 11 12:51:39 2001 +++ functions.h Sun Dec 2 01:53:51 2001 @@ -51,6 +51,8 @@ { "half-down", OP_HALF_DOWN, "]" }, { "help", OP_HELP, "?" }, { "tag-prefix", OP_TAG_PREFIX, ";" }, + { "tag-prefix-cond", OP_TAG_PREFIX_COND, NULL }, + { "special", OP_SPECIAL, NULL }, { "shell-escape", OP_SHELL_ESCAPE, "!" }, { "select-entry", OP_GENERIC_SELECT_ENTRY,M_ENTER_S }, { "search", OP_SEARCH, "/" }, --- menu.c.orig Tue Nov 6 21:36:57 2001 +++ menu.c Sun Dec 2 02:02:30 2001 @@ -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; @@ -866,6 +868,28 @@ 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_SPECIAL)break; + } + mutt_message _("Nothing todo."); + i = -1; + } + } else if (menu->tagged && option (OPTAUTOTAG)) menu->tagprefix = 1; else @@ -1021,6 +1045,9 @@ case OP_NULL: km_error_key (menu->menu); + break; + + case OP_SPECIAL: break; default: