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. --- PATCHES~ Tue Nov 6 19:59:33 2001 +++ PATCHES Tue Nov 6 19:59:42 2001 @@ -1,0 +1 @@ +1.5.4.nr.tag_prefix_cond diff -r -u mutt-1.5.4-ori/OPS mutt-1.5.4/OPS --- OPS Wed Mar 26 19:37:28 2003 +++ OPS Wed Mar 26 19:37:50 2003 @@ -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" @@ -158,6 +159,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" diff -r -u mutt-1.5.4-ori/curs_lib.c mutt-1.5.4/curs_lib.c --- curs_lib.c Wed Mar 26 19:37:28 2003 +++ curs_lib.c Wed Mar 26 19:37:50 2003 @@ -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 -r -u mutt-1.5.4-ori/curs_main.c mutt-1.5.4/curs_main.c --- curs_main.c Wed Mar 26 19:37:28 2003 +++ curs_main.c Wed Mar 26 19:38:30 2003 @@ -101,6 +101,7 @@ #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 @@ 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 @@ -2110,6 +2145,9 @@ if (CURHDR->attach_del) Context->changed = 1; menu->redraw = REDRAW_FULL; + break; + + case OP_END_COND: break; case OP_WHAT_KEY: diff -r -u mutt-1.5.4-ori/functions.h mutt-1.5.4/functions.h --- functions.h Wed Mar 26 19:37:28 2003 +++ functions.h Wed Mar 26 19:37:50 2003 @@ -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 }, + { "end_cond", OP_END_COND, NULL }, { "shell-escape", OP_SHELL_ESCAPE, "!" }, { "select-entry", OP_GENERIC_SELECT_ENTRY,M_ENTER_S }, { "search", OP_SEARCH, "/" }, diff -r -u mutt-1.5.4-ori/menu.c mutt-1.5.4/menu.c --- menu.c Wed Mar 26 19:37:28 2003 +++ menu.c Wed Mar 26 19:37:50 2003 @@ -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 @@ 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 @@ -1030,6 +1054,9 @@ case OP_NULL: km_error_key (menu->menu); + break; + + case OP_END_COND: break; default: