--- /dev/null
+written by Nicolas Rachinsky <nr@rachinsky.de>
+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: