--- /dev/null
+diff -Nru mutt-1.1.11.orig/Makefile.in mutt-1.1.11/Makefile.in
+--- mutt-1.1.11.orig/Makefile.in Sun Apr 2 22:23:23 2000
++++ mutt-1.1.11/Makefile.in Sun Apr 2 22:25:58 2000
+@@ -120,7 +120,7 @@
+ BUILT_SOURCES = keymap_defs.h
+
+ bin_PROGRAMS = mutt @DOTLOCK_TARGET@ @PGPAUX_TARGET@
+-mutt_SOURCES = $(BUILT_SOURCES) addrbook.c alias.c attach.c base64.c browser.c buffy.c color.c commands.c complete.c compose.c compress.c copy.c curs_lib.c curs_main.c date.c edit.c enter.c flags.c init.c filter.c from.c getdomain.c handler.c hash.c hdrline.c headers.c help.c hook.c keymap.c main.c mbox.c menu.c mh.c mx.c pager.c parse.c pattern.c postpone.c query.c recvattach.c recvcmd.c rfc822.c rfc1524.c rfc2047.c rfc2231.c score.c send.c sendlib.c signal.c sort.c status.c system.c thread.c charset.c history.c lib.c muttlib.c editmsg.c
++mutt_SOURCES = $(BUILT_SOURCES) addrbook.c alias.c attach.c base64.c browser.c buffy.c color.c commands.c complete.c compose.c compress.c copy.c curs_lib.c curs_main.c date.c edit.c enter.c flags.c init.c filter.c from.c getdomain.c handler.c hash.c hdrline.c headers.c help.c hook.c keymap.c main.c mbox.c menu.c mh.c mx.c pager.c parse.c patchlist.c pattern.c postpone.c query.c recvattach.c recvcmd.c rfc822.c rfc1524.c rfc2047.c rfc2231.c score.c send.c sendlib.c signal.c sort.c status.c system.c thread.c charset.c history.c lib.c muttlib.c editmsg.c
+
+
+ mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) $(INTLLIBS)
+@@ -184,7 +184,7 @@
+ color.o commands.o complete.o compose.o compress.o copy.o curs_lib.o curs_main.o \
+ date.o edit.o enter.o flags.o init.o filter.o from.o getdomain.o \
+ handler.o hash.o hdrline.o headers.o help.o hook.o keymap.o main.o \
+-mbox.o menu.o mh.o mx.o pager.o parse.o pattern.o postpone.o query.o \
++mbox.o menu.o mh.o mx.o pager.o parse.o patchlist.o pattern.o postpone.o query.o \
+ recvattach.o recvcmd.o rfc822.o rfc1524.o rfc2047.o rfc2231.o score.o \
+ send.o sendlib.o signal.o sort.o status.o system.o thread.o charset.o \
+ history.o lib.o muttlib.o editmsg.o
+--- mutt-1.0pre1/main.c.orig Mon Aug 23 14:22:20 1999
++++ mutt-1.0pre1/main.c Wed Aug 25 15:20:48 1999
+@@ -285,6 +285,8 @@
+
+ puts(_(ReachingUs));
+
++ mutt_print_patchlist ();
++
+ exit (0);
+ }
+
+--- mutt-1.0pre1/patchlist.c.orig Wed Aug 25 15:20:48 1999
++++ mutt-1.0pre1/patchlist.c Wed Aug 25 15:20:48 1999
+@@ -0,0 +1,22 @@
++#include <stdio.h>
++
++void mutt_print_patchlist (void)
++{
++ /*
++ * If you add a patch, include a line identifying it within this
++ * section. It should include the type of patch (Feature, Bugfix, or
++ * Merge), the name of the patch, the version of mutt to which the
++ * patch should be applied, the version of the patch itself, and your
++ * name. This line should be a printf, terminated by a single \n, and
++ * should fit in one line of code. It should be inserted after all
++ * other patch-ID lines. It should be preceded by three blank lines,
++ * and followed by three blank lines and the DO NOT MODIFY AFTER... line.
++ */
++ /* DO NOT MODIFY BEFORE THIS LINE */
++
++
++
++
++
++ /* DO NOT MODIFY AFTER THIS LINE */
++}
+--- mutt-1.0pre1/protos.h.orig Mon Jul 26 16:52:27 1999
++++ mutt-1.0pre1/protos.h Wed Aug 25 15:20:49 1999
+@@ -180,6 +180,7 @@
+ void mutt_pretty_mailbox (char *);
+ void mutt_pretty_size (char *, size_t, long);
+ void mutt_print_message (HEADER *);
++void mutt_print_patchlist (void);
+ void mutt_query_exit (void);
+ void mutt_query_menu (char *, size_t);
+ void mutt_safe_path (char *s, size_t l, ADDRESS *a);
+--- mutt-1.1.11/Makefile.am Mon Apr 3 00:35:18 2000
++++ mutt-1.1.11/Makefile.am.patchlist Mon Apr 3 00:38:05 2000
+@@ -30,7 +30,7 @@
+ curs_main.c date.c \
+ edit.c enter.c flags.c init.c filter.c from.c getdomain.c \
+ handler.c hash.c hdrline.c headers.c help.c hook.c keymap.c \
+- main.c mbox.c menu.c mh.c mx.c pager.c parse.c pattern.c \
++ main.c mbox.c menu.c mh.c mx.c pager.c parse.c patchlist.c pattern.c \
+ postpone.c query.c recvattach.c recvcmd.c \
+ rfc822.c rfc1524.c rfc2047.c rfc2231.c \
+ score.c send.c sendlib.c signal.c sort.c \
--- /dev/null
+--- mutt-0.94.7i/OPS.orig Sat Sep 12 21:23:27 1998
++++ mutt-0.94.7i/OPS Sat Sep 19 02:54:15 1998
+@@ -115,6 +115,7 @@
+ OP_PAGER_TOP "jump to the top of the message"
+ OP_PIPE "pipe message/attachment to a shell command"
+ OP_PREV_ENTRY "move to the previous entry"
++OP_PREV_JUMP "jump to the previously selected message"
+ OP_PREV_LINE "scroll up one line"
+ OP_PREV_PAGE "move to the previous page"
+ OP_PRINT "print the current entry"
+--- mutt-0.94.7i/curs_main.c.orig Wed Sep 16 07:57:23 1998
++++ mutt-0.94.7i/curs_main.c Sat Sep 19 02:55:06 1998
+@@ -240,6 +240,7 @@
+ int tag = 0; /* has the tag-prefix command been pressed? */
+ int newcount = -1;
+ int oldcount = -1;
++ int LastJumped = -1;
+ int rc = -1;
+ MUTTMENU *menu;
+ char *cp; /* temporary variable. */
+@@ -627,6 +628,7 @@
+ if (j >= 0)
+ {
+ menu->current = Context->hdrs[j]->virtual;
++ LastJumped=Context->v2r[menu->current]+1;
+ if (menu->menu == MENU_PAGER)
+ {
+ op = OP_DISPLAY_MESSAGE;
+@@ -915,6 +917,7 @@
+ the folder */
+ menu->redraw = REDRAW_FULL;
+ set_option (OPTSEARCHINVALID);
++ LastJumped=-1;
+ break;
+
+ case OP_DISPLAY_MESSAGE:
+@@ -1043,6 +1046,29 @@
+ menu->redraw = REDRAW_MOTION;
+ break;
+
++ case OP_PREV_JUMP:
++ i=LastJumped;
++ if (i > 0 && i <= Context->msgcount)
++ {
++ if (Context->hdrs[i-1]->virtual != -1)
++ {
++ LastJumped=Context->v2r[menu->current]+1;
++ menu->current = Context->hdrs[i-1]->virtual;
++ if (menu->menu == MENU_PAGER)
++ {
++ op = OP_DISPLAY_MESSAGE;
++ continue;
++ }
++ else
++ menu->redraw = REDRAW_MOTION;
++ }
++ else
++ mutt_error ("That message is not visible.");
++ }
++ else
++ mutt_error ("No target yet.");
++ break;
++
+ case OP_PREV_ENTRY:
+
+ CHECK_MSGCOUNT;
+@@ -1111,6 +1137,7 @@
+ case OP_MAIN_PREV_UNREAD:
+
+ CHECK_MSGCOUNT;
++ LastJumped=Context->v2r[menu->current]+1;
+ i = menu->current;
+ menu->current = -1;
+ for (j = 0; j != Context->vcount; j++)
+@@ -1244,6 +1271,7 @@
+ case OP_MAIN_PREV_SUBTHREAD:
+
+ CHECK_MSGCOUNT;
++ i=Context->v2r[menu->current]+1;
+ switch (op)
+ {
+ case OP_MAIN_NEXT_THREAD:
+@@ -1424,11 +1424,13 @@
+ }
+ else if (menu->menu == MENU_PAGER)
+ {
++ LastJumped=i;
+ op = OP_DISPLAY_MESSAGE;
+ continue;
+ }
+ else
+ menu->redraw = REDRAW_MOTION;
++ LastJumped=i;
+ break;
+
+ case OP_MAIN_SET_FLAG:
+--- mutt-0.94.7i/functions.h.orig Sat Sep 12 21:23:30 1998
++++ mutt-0.94.7i/functions.h Sat Sep 19 02:54:16 1998
+@@ -87,6 +87,7 @@
+ { "display-headers", OP_DISPLAY_HEADERS, "h" },
+ { "next-undeleted", OP_MAIN_NEXT_UNDELETED, "j" },
+ { "previous-undeleted", OP_MAIN_PREV_UNDELETED, "k" },
++ { "previous-jump", OP_PREV_JUMP, "\033b" },
+ { "limit", OP_MAIN_LIMIT, "l" },
+ { "list-reply", OP_LIST_REPLY, "L" },
+ { "mail", OP_MAIL, "m" },
+@@ -163,6 +164,7 @@
+ { "next-entry", OP_NEXT_ENTRY, "J" },
+ { "previous-undeleted",OP_MAIN_PREV_UNDELETED, "k" },
+ { "previous-entry", OP_PREV_ENTRY, "K" },
++ { "previous-jump", OP_PREV_JUMP, "\033b" },
+ { "list-reply", OP_LIST_REPLY, "L" },
+ { "redraw-screen", OP_REDRAW, "\014" },
+ { "mail", OP_MAIL, "m" },
+--- mutt-0.94.7i/patchlist.c.orig Sat Sep 19 02:29:51 1998
++++ mutt-0.94.7i/patchlist.c Sat Sep 19 02:54:16 1998
+@@ -16,6 +16,8 @@
+
+
+
++ printf("Feature patch: previous-jump 0.94.7 by Stefan `Sec` Zehl\n");
++
+
+
+ /* DO NOT MODIFY AFTER THIS LINE */
--- /dev/null
+Index: enter.c
+===================================================================
+RCS file: /export/home/vikas/CVS/Mutt/enter.c,v
+retrieving revision 1.1.1.4
+diff -u -p -r1.1.1.4 enter.c
+--- enter.c 1998/09/18 13:09:38 1.1.1.4
++++ enter.c 1998/09/21 23:05:21
+@@ -274,9 +274,9 @@ int mutt_enter_string (unsigned char *bu
+ j--;
+ if (j > 0)
+ {
+- if (isalnum (buf[j - 1]))
++ if (!strchr (NONULL (Wordchars), (buf[j - 1])))
+ {
+- for (j--; j > 0 && isalnum (buf[j - 1]); j--)
++ for (j--; j > 0 && !strchr (NONULL (Wordchars), buf[j - 1]); j--)
+ ;
+ }
+ else
+Index: globals.h
+===================================================================
+RCS file: /export/home/vikas/CVS/Mutt/globals.h,v
+retrieving revision 1.1.1.2
+diff -u -p -r1.1.1.2 globals.h
+--- globals.h 1998/08/24 19:42:35 1.1.1.2
++++ globals.h 1998/09/21 23:01:27
+@@ -80,6 +80,7 @@ WHERE char *Tempdir;
+ WHERE char *Tochars;
+ WHERE char *Username;
+ WHERE char *Visual;
++WHERE char *Wordchars;
+
+ WHERE char *LastFolder;
+
+Index: init.h
+===================================================================
+RCS file: /export/home/vikas/CVS/Mutt/init.h,v
+retrieving revision 1.1.1.8
+diff -Nru mutt-1.1.11.orig/init.h mutt-1.1.11/init.h
+--- init.h Sun Apr 2 22:54:00 2000
++++ init.h Sun Apr 2 22:54:46 2000
+@@ -2074,6 +2074,7 @@
+ ** When set, Mutt will always ask for a key. When unset, Mutt will wait
+ ** for a key only if the external command returned a non-zero status.
+ */
++ { "word_chars", DT_STR, R_NONE, UL &Wordchars, UL " *?_-.[]~=/&;!#$%^(){}<>@" },
+ { "weed", DT_BOOL, R_NONE, OPTWEED, 1 },
+ /*
+ ** .pp
+diff -u -p -r1.1.1.8 init.h
+--- patchlist.c.orig Sat Sep 19 02:29:51 1998
++++ patchlist.c Sat Sep 19 02:54:16 1998
+@@ -16,6 +16,8 @@
+
+
+
++ printf("Feature patch: word_chars 0.94.7 by Vikas Agnihotri\n");
++
+
+
+ /* DO NOT MODIFY AFTER THIS LINE */
--- /dev/null
+--- send.c.bak Wed Mar 3 22:11:30 1999
++++ send.c Wed Mar 3 22:18:10 1999
+@@ -33,6 +33,9 @@
+ #include <sys/stat.h>
+ #include <sys/wait.h>
+ #include <dirent.h>
++#include <time.h>
++#include <sys/types.h>
++#include <utime.h>
+
+ #ifdef _PGPPATH
+ #include "pgp.h"
+@@ -1072,9 +1075,20 @@ ci_send_message (int flags, /* send mod
+ {
+ struct stat st;
+ time_t mtime;
++ struct utimbuf utim;
+
+ stat (msg->content->filename, &st);
+ mtime = st.st_mtime;
++ if (mtime == time (NULL))
++ {
++ /* Decrease the file's modification time by 1 second so we are sure
++ * to find out if the `editor' program changes it in less than 1 second.
++ */
++ mtime -= 1;
++ utim.actime = mtime;
++ utim.modtime = mtime;
++ utime (msg->content->filename, &utim);
++ }
+
+ mutt_update_encoding (msg->content);
+
+--- patchlist.c.orig Sat Sep 19 02:29:51 1998
++++ patchlist.c Sat Sep 19 02:54:16 1998
+@@ -16,6 +16,8 @@
+
+
+
++ printf("Feature patch: ed_mtime 0.95.3 by Byrial Jensen\n");
++
+
+
+ /* DO NOT MODIFY AFTER THIS LINE */
--- /dev/null
+diff -udpr -X diff-excludes mutt-0.95.4-orig/curs_main.c mutt-0.95.4/curs_main.c
+--- mutt-0.95.4-orig/curs_main.c Thu Mar 4 08:16:48 1999
++++ mutt-0.95.4/curs_main.c Sun Mar 14 09:21:51 1999
+@@ -483,7 +483,8 @@ int mutt_index_menu (void)
+ menu_redraw_current (menu);
+ }
+
+- if (menu->redraw & REDRAW_STATUS)
++ if ((menu->redraw & REDRAW_STATUS) ||
++ update_status_time ())
+ {
+ menu_status_line (buf, sizeof (buf), menu, NONULL (Status));
+ CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES-2);
+diff -Nru mutt-1.1.11/doc/manual.sgml mutt-1.1.11.status_update/doc/manual.sgml
+--- mutt-1.1.11/doc/manual.sgml Sun Apr 2 23:17:35 2000
++++ mutt-1.1.11.status_update/doc/manual.sgml Sun Apr 2 23:17:27 2000
+@@ -5395,6 +5395,8 @@
+ %u number of unread messages *
+ %v Mutt version string
+ %V currently active limit pattern, if any *
++%[fmt] the current date and time. `fmt'' is expanded by the system
++ call ``strftime''; a leading bang disables locales
+ %>X right justify the rest of the string and
+ pad with "X"
+ %|X pad to the end of the line with "X"
+@@ -5441,6 +5443,17 @@
+ Setting this variable causes the ``status bar'' to be displayed on
+ the first line of the screen rather than near the bottom.
+
++<sect2>status_update<label id="status_update">
++<p>
++Type: number<newline>
++Default: -1
++
++This variable controls, if positive, the maximum interval in seconds
++before the time in the status line is updated. It is checked at
++every key press, and after a keyboard <ref id="timeout"
++name="timeout">. If the value is zero, the status line will updated
++at every check. If it is negative, the status time will only be updated
++if it necessary to update to the status line for some other reason.
+
+ <sect2>strict_threads<label id="strict_threads">
+ <p>
+diff -Nru mutt-1.1.11/init.h mutt-1.1.11.status_update/init.h
+--- mutt-1.1.11/init.h Sun Apr 2 23:17:35 2000
++++ mutt-1.1.11.status_update/init.h Sun Apr 2 23:17:25 2000
+@@ -1963,6 +1963,7 @@
+ ** Setting this variable causes the ``$status bar'' to be displayed on
+ ** the first line of the screen rather than near the bottom.
+ */
++ { "status_update", DT_NUM, R_NONE, UL &StatusUpdate, -1 },
+ { "strict_threads", DT_BOOL, R_RESORT|R_INDEX, OPTSTRICTTHREADS, 0 },
+ /*
+ ** .pp
+diff -udpr -X diff-excludes mutt-0.95.4-orig/globals.h mutt-0.95.4/globals.h
+--- mutt-0.95.4-orig/globals.h Thu Jan 7 10:14:40 1999
++++ mutt-0.95.4/globals.h Sun Mar 14 09:21:51 1999
+@@ -107,6 +107,7 @@ WHERE short PagerIndexLines;
+ WHERE short PopPort;
+ WHERE short ReadInc;
+ WHERE short SendmailWait;
++WHERE short StatusUpdate;
+ WHERE short Timeout;
+ WHERE short WriteInc;
+
+diff -udpr -X diff-excludes mutt-0.95.4-orig/menu.c mutt-0.95.4/menu.c
+--- mutt-0.95.4-orig/menu.c Thu Jan 7 10:14:42 1999
++++ mutt-0.95.4/menu.c Sun Mar 14 09:21:51 1999
+@@ -840,3 +840,23 @@ int mutt_menuLoop (MUTTMENU *menu)
+ }
+ /* not reached */
+ }
++
++int update_status_time ()
++{
++ static time_t Last;
++ time_t now;
++
++ if (StatusUpdate < 0)
++ return 0;
++ else if (StatusUpdate == 0)
++ return 1;
++
++ now = time (NULL);
++ if (now - Last >= StatusUpdate)
++ {
++ Last = now;
++ return 1;
++ }
++ else
++ return 0;
++}
+diff -udpr -X diff-excludes mutt-0.95.4-orig/mutt_menu.h mutt-0.95.4/mutt_menu.h
+--- mutt-0.95.4-orig/mutt_menu.h Thu Jan 7 10:14:43 1999
++++ mutt-0.95.4/mutt_menu.h Sun Mar 14 09:21:51 1999
+@@ -98,3 +98,5 @@ int mutt_menuLoop (MUTTMENU *);
+ /* used in both the index and pager index to make an entry. */
+ void index_make_entry (char *, size_t, struct menu_t *, int);
+ int index_color (int);
++
++int update_status_time (void);
+diff -udpr -X diff-excludes mutt-0.95.4-orig/pager.c mutt-0.95.4/pager.c
+--- mutt-0.95.4-orig/pager.c Thu Jan 7 10:14:44 1999
++++ mutt-0.95.4/pager.c Sun Mar 14 09:21:51 1999
+@@ -1636,7 +1636,7 @@ mutt_pager (const char *banner, const ch
+ SETCOLOR (MT_COLOR_NORMAL);
+ }
+
+- if ((redraw & REDRAW_INDEX) && index)
++ if (index && ((redraw & REDRAW_INDEX) || update_status_time ()))
+ {
+ /* redraw the pager_index indicator, because the
+ * flags for this message might have changed. */
+diff -udpr -X diff-excludes mutt-0.95.4-orig/status.c mutt-0.95.4/status.c
+--- mutt-0.95.4-orig/status.c Thu Jan 7 10:14:47 1999
++++ mutt-0.95.4/status.c Sun Mar 14 09:21:59 1999
+@@ -25,6 +25,7 @@
+ #include <string.h>
+ #include <ctype.h>
+ #include <unistd.h>
++#include <locale.h>
+
+ static char *get_sort_str (char *buf, size_t buflen, int method)
+ {
+@@ -269,6 +270,61 @@ status_format_str (char *buf, size_t buf
+ case 0:
+ *buf = 0;
+ return (src);
++
++ case '[':
++ {
++ int do_locales;
++ int len = sizeof (fmt) - 1;
++
++ cp = fmt;
++ if (*src == '!')
++ {
++ do_locales = 0;
++ src++;
++ }
++ else
++ do_locales = 1;
++
++ while (len > 0 && *src != ']')
++ {
++ if (*src == '%')
++ {
++ src++;
++ if (len >= 2)
++ {
++ *cp++ = '%';
++ *cp++ = *src;
++ len -= 2;
++ }
++ else
++ break; /* not enough space */
++ src++;
++ }
++ else
++ {
++ *cp++ = *src++;
++ len--;
++ }
++ }
++ *cp = 0;
++ src++;
++
++ if (do_locales && Locale)
++ setlocale (LC_TIME, Locale);
++
++ {
++ time_t now = time (NULL);
++
++ strftime (tmp, sizeof (tmp), fmt, localtime (&now));
++ }
++
++ if (do_locales && Locale)
++ setlocale (LC_TIME, "C");
++
++ snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
++ snprintf (buf, buflen, fmt, tmp);
++ }
++ break;
+
+ default:
+ snprintf (buf, buflen, "%%%s%c", prefix, op);
+--- mutt-0.94.7i/patchlist.c.orig Sat Sep 19 02:29:51 1998
++++ mutt-0.94.7i/patchlist.c Sat Sep 19 02:54:16 1998
+@@ -16,6 +16,8 @@
+
+
+
++ printf("Feature patch: status-time 0.95.4 by Byrial Jensen\n");
++
+
+
+ /* DO NOT MODIFY AFTER THIS LINE */
--- /dev/null
+--- mutt-0.95.4/curs_lib.c.orig Thu Jan 14 12:29:17 1999
++++ mutt-0.95.4/curs_lib.c Mon Mar 22 18:24:46 1999
+@@ -256,6 +256,7 @@
+
+ attrset (A_NORMAL);
+ mutt_refresh ();
++ keypad (stdscr, FALSE);
+ endwin ();
+ #ifndef SLANG_CURSES
+ fputc ('\n', stdout);
+--- mutt-0.95.4/patchlist.c.orig Mon Mar 22 18:11:49 1999
++++ mutt-0.95.4/patchlist.c Mon Mar 22 18:25:35 1999
+@@ -16,6 +16,8 @@
+
+
+
++ printf("Bugfix patch: keypad 0.95.4 by Stefan `Sec` Zehl\n");
++
+
+
+ /* DO NOT MODIFY AFTER THIS LINE */
--- /dev/null
+--- mutt-0.95.4/protos.h.orig Sun Mar 28 20:19:44 1999
++++ mutt-0.95.4/protos.h Sun Mar 28 20:19:44 1999
+@@ -75,6 +75,7 @@
+
+ ADDRESS *mutt_lookup_alias (const char *s);
+ ADDRESS *mutt_remove_duplicates (ADDRESS *);
++ADDRESS *mutt_reverse_address (ADDRESS *);
+ ADDRESS *mutt_expand_aliases (ADDRESS *);
+ ADDRESS *mutt_parse_adrlist (ADDRESS *, const char *);
+
+--- mutt-1.1.11.orig/send.c Sun Apr 2 23:30:24 2000
++++ mutt-1.1.11/send.c Sun Apr 2 23:27:03 2000
+@@ -555,6 +555,10 @@
+ /* the CC field can get cluttered, especially with lists */
+ env->to = mutt_remove_duplicates (env->to);
+ env->cc = mutt_remove_duplicates (env->cc);
++ if (option (OPTREVALIAS)){
++ env->to = mutt_reverse_address (env->to);
++ env->cc = mutt_reverse_address (env->cc);
++ }
+ env->cc = mutt_remove_xrefs (env->to, env->cc);
+ }
+
+--- mutt-0.95.4/sendlib.c.orig Sun Mar 28 20:15:43 1999
++++ mutt-0.95.4/sendlib.c Sun Mar 28 22:43:16 1999
+@@ -1882,6 +1882,37 @@
+ return (top);
+ }
+
++/* given a list of addresses, return a list of reverse_alias'ed addresses */
++ADDRESS *mutt_reverse_address (ADDRESS *addr)
++{
++ ADDRESS *top,*tmp,*ptr,*ali;
++
++ if ((top=addr)==NULL)
++ return NULL;
++
++ if ((ali = alias_reverse_lookup (top)) && ali->personal){
++ tmp=rfc822_cpy_adr_real(ali);
++ tmp->next=top->next;
++ top->next=NULL;
++ rfc822_free_address(&top);
++ top=tmp;
++ }
++
++ ptr=top;
++ while (top->next != NULL){
++ tmp=top->next;
++ if ((ali = alias_reverse_lookup (tmp)) && ali->personal){
++ top->next=rfc822_cpy_adr_real(ali);
++ top->next->next=tmp->next;
++ tmp->next=NULL;
++ rfc822_free_address(&tmp);
++ tmp=top->next;
++ }
++ top=tmp;
++ }
++ return ptr;
++}
++
+ int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int post, char *fcc)
+ {
+ CONTEXT f;
+--- mutt-0.94.7i/patchlist.c.orig Sat Sep 19 02:29:51 1998
++++ mutt-0.94.7i/patchlist.c Sat Sep 19 02:54:16 1998
+@@ -16,6 +16,8 @@
+
+
+
++ printf("Feature patch: reverse-reply 0.95.4 by Stefan `Sec` Zehl\n");
++
+
+
+ /* DO NOT MODIFY AFTER THIS LINE */
--- /dev/null
+--- mutt-0.95.4/patchlist.c.orig Mon Mar 22 18:11:49 1999
++++ mutt-0.95.4/patchlist.c Tue Mar 23 13:19:30 1999
+@@ -16,6 +16,8 @@
+
+
+
++ printf("Feature patch: print_index 0.95.4 by Vikas Agnihotri\n");
++
+
+
+ /* DO NOT MODIFY AFTER THIS LINE */
+diff -bu mutt-0.95.4.orig/OPS mutt-0.95.4/OPS
+--- mutt-0.95.4.orig/OPS Sat Dec 12 09:05:35 1998
++++ mutt-0.95.4/OPS Tue Mar 23 13:43:00 1999
+@@ -148,6 +148,7 @@
+ OP_VERSION "show the Mutt version number and date"
+ OP_VIEW_ATTACH "view attachment using mailcap entry if necessary"
+ OP_VIEW_ATTACHMENTS "show MIME attachments"
++OP_MAIN_PRINT_INDEX "print message index"
+ OP_MAIN_SHOW_LIMIT "show currently active limit pattern"
+ OP_MAIN_COLLAPSE_THREAD "collapse/uncollapse current thread"
+ OP_MAIN_COLLAPSE_ALL "collapse/uncollapse all threads"
+diff -bu mutt-0.95.4.orig/commands.c mutt-0.95.4/commands.c
+--- mutt-0.95.4.orig/commands.c Tue Feb 9 21:53:38 1999
++++ mutt-0.95.4/commands.c Tue Mar 23 13:43:08 1999
+@@ -639,6 +639,54 @@
+ mutt_copy_message (fp, ctx, h, M_CM_DECODE, CH_WEED | CH_DECODE | CH_REORDER);
+ }
+
++void mutt_print_index (MUTTMENU *menu)
++{
++ int i;
++ pid_t thepid;
++ FILE *fp;
++ char buf[STRING];
++ static char AsciiChars[M_TREE_MAX] = " ,|-| >*&";
++
++ if (query_quadoption (OPT_PRINT,"Print message index?") != M_YES)
++ return;
++
++ endwin ();
++ if ((thepid = mutt_create_filter (PrintCmd, &fp, NULL, NULL)) == -1)
++ return;
++
++ menu_status_line (buf, sizeof (buf), menu, NONULL (Status));
++ fprintf(fp,"%s\n",buf);
++
++ for (i = 0; i<menu->max; i++)
++ {
++ char *s;
++ menu->make_entry(buf,sizeof(buf),menu,i);
++ s = buf;
++ while (*s)
++ {
++ if ((unsigned char) *s < M_TREE_MAX)
++ {
++ while (*s && (unsigned char) *s < M_TREE_MAX)
++ {
++ fputc (AsciiChars[*s], fp);
++ s++;
++ }
++ }
++ else
++ {
++ fputc(*s,fp);
++ s++;
++ }
++ }
++ fprintf(fp,"\n");
++ }
++
++ fclose (fp);
++ if (mutt_wait_filter (thepid) || option (OPTWAITKEY))
++ mutt_any_key_to_continue (NULL);
++ mutt_message ("Message index printed.");
++}
++
+ void mutt_print_message (HEADER *h)
+ {
+ int i, count = 0;
+diff -bu mutt-0.95.4.orig/curs_main.c mutt-0.95.4/curs_main.c
+--- mutt-0.95.4.orig/curs_main.c Wed Mar 3 20:36:41 1999
++++ mutt-0.95.4/curs_main.c Tue Mar 23 13:43:01 1999
+@@ -1572,6 +1572,12 @@
+ MAYBE_REDRAW (menu->redraw);
+ break;
+
++ case OP_MAIN_PRINT_INDEX:
++
++ CHECK_MSGCOUNT;
++ mutt_print_index(menu);
++ break;
++
+ case OP_PRINT:
+
+ CHECK_MSGCOUNT;
+diff -Nru mutt-1.1.11.orig/functions.h mutt-1.1.11/functions.h
+--- mutt-1.1.11.orig/functions.h Sun Apr 2 23:33:12 2000
++++ mutt-1.1.11/functions.h Sun Apr 2 23:34:45 2000
+@@ -130,6 +130,7 @@
+ { "previous-new", OP_MAIN_PREV_NEW, "\033\t" },
+ { "next-unread", OP_MAIN_NEXT_UNREAD, NULL },
+ { "previous-unread", OP_MAIN_PREV_UNREAD, NULL },
++ { "print-index", OP_MAIN_PRINT_INDEX, "P"},
+ { "parent-message", OP_MAIN_PARENT_MESSAGE, "P" },
+
+
+diff -bu mutt-0.95.4.orig/mutt_menu.h mutt-0.95.4/mutt_menu.h
+--- mutt-0.95.4.orig/mutt_menu.h Thu Jan 7 10:14:43 1999
++++ mutt-0.95.4/mutt_menu.h Tue Mar 23 13:43:02 1999
+@@ -90,6 +90,7 @@
+ void menu_current_bottom (MUTTMENU *);
+ void menu_check_recenter (MUTTMENU *);
+ void menu_status_line (char *, size_t, MUTTMENU *, const char *);
++void mutt_print_index (MUTTMENU *);
+
+ MUTTMENU *mutt_new_menu (void);
+ void mutt_menuDestroy (MUTTMENU **);
--- /dev/null
+--- mutt-0.95.6/mh.c.orig Wed Jun 9 12:03:57 1999
++++ mutt-0.95.6/mh.c Wed Jun 9 12:04:01 1999
+@@ -227,7 +227,7 @@
+ if(subdir)
+ {
+ snprintf(buf, sizeof(buf), "%s/%s", ctx->path, subdir);
+- is_old = (mutt_strcmp("cur", subdir) == 0) && option(OPTMARKOLD);
++ is_old = (mutt_strcmp("cur", subdir) == 0);
+ }
+ else
+ strfcpy(buf, ctx->path, sizeof(buf));
+--- mutt-0.95.6/parse.c.orig Wed Jun 9 12:03:38 1999
++++ mutt-0.95.6/parse.c Wed Jun 9 12:03:39 1999
+@@ -1112,7 +1112,6 @@
+ hdr->replied = 1;
+ break;
+ case 'O':
+- if (option (OPTMARKOLD))
+ hdr->old = 1;
+ break;
+ case 'R':
+--- mutt-0.95.6/patchlist.c.orig Fri Jun 4 01:40:18 1999
++++ mutt-0.95.6/patchlist.c Wed Jun 9 12:05:44 1999
+@@ -16,6 +16,8 @@
+
+
+
++ printf("Feature patch: mark-old 0.95.6 by Aaron Schrab\n");
++
+
+
+ /* DO NOT MODIFY AFTER THIS LINE */
--- /dev/null
+--- hash.c~ Sun Apr 2 23:37:07 2000
++++ hash.c Sun Apr 2 23:38:30 2000
+@@ -121,7 +121,7 @@
+ {
+ *last = ptr->next;
+ if (destroy) destroy (ptr->data);
+- FREE (&ptr);
++ free (ptr);
+ return;
+ }
+ }
+@@ -137,15 +137,38 @@ void hash_destroy (HASH **ptr, void (*de
+ HASH *pptr = *ptr;
+ struct hash_elem *elem, *tmp;
+
+- for (i = 0 ; i < pptr->nelem; i++)
++ /* We want to keep the test for the optional destroy argument out
++ * of the loop to get a faster execution. The price we pay is that
++ * we then have to have two versions of the loop.
++ */
++#if 0
++ /* Nobody use the destroy argument at the moment, so the destroy
++ * version of the loop is out-commented until somebody needs it.
++ */
++ if (destroy)
+ {
+- for (elem = pptr->table[i]; elem; )
++ for (i = 0 ; i < pptr->nelem; i++)
+ {
+- tmp = elem;
+- elem = elem->next;
+- if (destroy)
++ for (elem = pptr->table[i]; elem; )
++ {
++ tmp = elem;
++ elem = elem->next;
+ destroy (tmp->data);
+- safe_free ((void **) &tmp);
++ free (tmp);
++ }
++ }
++ }
++ else
++#endif
++ {
++ for (i = 0 ; i < pptr->nelem; i++)
++ {
++ for (elem = pptr->table[i]; elem; )
++ {
++ tmp = elem;
++ elem = elem->next;
++ free (tmp);
++ }
+ }
+ }
+ safe_free ((void **) &pptr->table);
+--- patchlist.c.orig Sat Sep 19 02:29:51 1998
++++ patchlist.c Sat Sep 19 02:54:16 1998
+@@ -16,6 +16,8 @@
+
+
+
++ printf("Feature patch: hash_destroy 0.95 by Byrial Jensen\n");
++
+
+
+ /* DO NOT MODIFY AFTER THIS LINE */
--- /dev/null
+--- mutt-1.1.11.orig/init.h Sun Apr 2 23:40:02 2000
++++ mutt-1.1.11/init.h Sun Apr 2 23:41:08 2000
+@@ -1169,6 +1169,7 @@
+ ** lead to problems with non-verifyable PGP signatures, so only change
+ ** this if you know what you are doing.
+ */
++ { "pgp_paranoid", DT_BOOL, R_NONE, OPTPGPPARANOID, 0 },
+ { "pgp_timeout", DT_NUM, R_NONE, UL &PgpTimeout, 300 },
+ /*
+ ** .pp
+--- mutt-0.95/mutt.h.orig Sat Dec 12 09:06:47 1998
++++ mutt-0.95/mutt.h Sun Jan 3 03:39:19 1999
+@@ -309,6 +309,7 @@
+ OPTMHPURGE,
+ OPTMIMEFORWDECODE,
+ OPTPAGERSTOP,
++ OPTPGPPARANOID,
+ OPTPIPEDECODE,
+ OPTPIPESPLIT,
+ OPTPOPDELETE,
+--- mutt-0.95/patchlist.c.orig Sun Jan 3 03:11:41 1999
++++ mutt-0.95/patchlist.c Sun Jan 3 03:39:19 1999
+@@ -16,6 +16,8 @@
+
+
+
++ printf("Feature patch: condense_pgp 0.95 by Stefan `Sec` Zehl\n");
++
+
+
+ /* DO NOT MODIFY AFTER THIS LINE */
+--- mutt-0.95/pgp.c.orig Sat Dec 12 09:07:00 1998
++++ mutt-0.95/pgp.c Sun Jan 3 03:41:29 1999
+@@ -216,6 +216,102 @@
+ }
+
+
++/*
++ * Scan PGP output; return information about state of signature.
++ * Flush the message (on stdout).
++ *
++ * If strat==0, the message is piped to PGP on stdin, the verified
++ * message is output on stdout, and runtime messages are on stderr.
++ * If strat==1, the message comes from a file, and the runtime
++ * messages are on stdout.
++ */
++
++int
++mutt_scan_pgp_output (FILE *infile, FILE *outfile, STATE *outstate)
++{
++ int sigstate=0, pgpwarning=0;
++ int nl=0;
++ char buffer[LONG_STRING];
++
++ while (fgets (buffer, sizeof(buffer), infile) != NULL) {
++ if (strncmp (buffer, "Good signature", 14) == 0)
++ if (sigstate!=3)
++ sigstate=1;
++ if (strncmp (buffer, "WARNING", 7) == 0 &&
++ strstr (buffer, "not certified") != NULL)
++ if (sigstate!=3)
++ sigstate=2;
++ if (strncmp (buffer, "Bad signature", 13) == 0)
++ sigstate=3;
++ if (strncmp (buffer, "\007Key matching", 13) == 0 &&
++ strstr (buffer, "not found") != NULL)
++ if (sigstate!=3)
++ sigstate=4;
++ if (strncmp (buffer, "WARNING", 7) == 0)
++ pgpwarning|=1;
++ if (strncmp (buffer, "\007WARNING", 7) == 0)
++ pgpwarning|=1;
++ if (strncmp (buffer, "Error", 5) == 0)
++ pgpwarning|=2;
++ if (strncmp (buffer, "\007Error", 5) == 0)
++ pgpwarning|=2;
++
++ /* pgp2 */
++ if (strncmp(buffer, "\007Key matching", 13) == 0 &&
++ strstr (buffer, "not found") != NULL)
++ continue;
++ if (strncmp(buffer, "File '", 6) == 0 &&
++ strstr (buffer, "has signature, but with no text") != NULL)
++ continue;
++ if (strncmp(buffer, "Text is assumed to be in file '", 31) == 0)
++ continue;
++ /* pgp5 */
++ if (strncmp(buffer, "No files specified. Using stdin.", 33) == 0)
++ continue;
++ if (strncmp(buffer, "Opening file \"stdout\" type text.", 32) == 0)
++ continue;
++ if (strncmp(buffer, "Message is encrypted.", 21) == 0)
++ continue;
++ /* pgp5 bogon makes pgp2 warn */
++ if (strncmp(buffer, "Warning",7) == 0 &&
++ strstr (buffer, "header label \"MessageID:\" ignored") != NULL)
++ continue;
++
++ if(buffer[0]=='\n'){
++ if(nl)continue;
++ nl=1;
++ }else{
++ nl=0;
++ }
++ if (outstate) {
++ if (strlen(buffer)>2 && buffer[strlen(buffer)-2]=='\007')
++ buffer[strlen(buffer)-2]=' ';
++ else if (strlen(buffer)>3 && buffer[strlen(buffer)-3]=='\007')
++ buffer[strlen(buffer)-3]=' ';
++
++ if (buffer[0] == '\007') {
++ state_puts(buffer+1, outstate);
++ }
++ else {
++ state_puts(buffer, outstate);
++ }
++ }
++ if (outfile) {
++ if (buffer[0] == '\007') {
++ fputs(buffer+1, outfile);
++ }
++ else {
++ fputs(buffer, outfile);
++ }
++ }
++ }
++
++ sigstate |= (pgpwarning<<4);
++
++ return sigstate;
++}
++
++
+ /* Support for the Application/PGP Content Type. */
+
+ void application_pgp_handler (BODY *m, STATE *s)
+@@ -334,7 +430,10 @@
+ fclose (pgpin);
+
+ if (s->flags & M_DISPLAY)
++ if(option(OPTPGPPARANOID))
+ pgp_current_time (s);
++ else
++ mutt_scan_pgp_output(pgperr,NULL,s);
+
+ mutt_wait_filter (thepid);
+
+@@ -345,17 +444,17 @@
+ fclose (pgperr);
+
+ if (s->flags & M_DISPLAY)
+- state_puts (_("\n[-- End of PGP output --]\n\n"), s);
++ state_puts (_("\n[-- End of PGP output --"), s);
+ }
+
+ if(s->flags & M_DISPLAY)
+ {
+ if (needpass)
+- state_puts (_("[-- BEGIN PGP MESSAGE --]\n\n"), s);
++ state_puts ("BEGIN PGP MESSAGE --]\n\n", s);
+ else if (pgp_keyblock)
+- state_puts (_("[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"), s);
++ state_puts ("BEGIN PGP PUBLIC KEY BLOCK --]\n", s);
+ else
+- state_puts (_("[-- BEGIN PGP SIGNED MESSAGE --]\n\n"), s);
++ state_puts ("BEGIN PGP SIGNED MESSAGE --]\n\n", s);
+ }
+
+ /* Use PGP's output if there was no clearsig signature. */
+diff -Nru mutt-1.1.11.orig/pgp.c mutt-1.1.11/pgp.c
+--- mutt-1.1.11.orig/pgp.c Sun Apr 2 23:49:51 2000
++++ mutt-1.1.11/pgp.c Sun Apr 2 23:51:58 2000
+@@ -678,7 +678,10 @@
+ -1, -1, fileno(pgperr),
+ tempfile, sigfile)) != -1)
+ {
++ if(option(OPTPGPPARANOID))
+ mutt_copy_stream(pgpout, s->fpout);
++ else
++ mutt_scan_pgp_output(pgpout,NULL,s);
+ fclose (pgpout);
+ fflush(pgperr);
+ rewind(pgperr);
--- /dev/null
+--- mutt-1.0pre2/hdrline.c.orig Wed Sep 1 16:14:20 1999
++++ mutt-1.0pre2/hdrline.c Sat Sep 11 03:32:57 1999
+@@ -187,6 +187,7 @@
+ }
+
+ /* %a = address of author
++ * %A = number of new messages in the mailbox
+ * %b = filename of the originating folder
+ * %B = the list to which the letter was sent
+ * %c = size of message in bytes
+@@ -255,6 +256,16 @@
+ dest[0] = '\0';
+ break;
+
++ case 'A':
++ if(ctx)
++ {
++ snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
++ snprintf (dest, destlen, fmt, ctx->new);
++ }
++ else
++ strfcpy(dest, "(null)", destlen);
++ break;
++
+ case 'B':
+ if (!first_mailing_list (dest, destlen, hdr->env->to) &&
+ !first_mailing_list (dest, destlen, hdr->env->cc))
+--- mutt-0.94.7i/patchlist.c.orig Sat Sep 19 02:29:51 1998
++++ mutt-0.94.7i/patchlist.c Sat Sep 19 02:54:16 1998
+@@ -16,6 +16,8 @@
+
+
+
++ printf("Feature patch: %%A 1.02 by Stefan `Sec` Zehl\n");
++
+
+
+ /* DO NOT MODIFY AFTER THIS LINE */
--- /dev/null
+
+ Patches for [1]Mutt
+
+ My patches have name after the version of mutt that they are made for.
+ But they should always be usable with the newest version, too. If not,
+ please [2]notify me about the problem, and I will update the patch.
+
+Bugfixes
+
+ [3]patch-0.95.3i.bj.keyattach.1.
+ Avoid to send out a temporary filename from your box when
+ sending a pgp key.
+
+New features and other changes in behaviour
+
+ [4]patch-0.95.bj.noquote_hdr_term.1.
+ Don't quote the header terminator when replying with headers.
+
+ [5]patch-0.95.4.bj.status-time.1.
+ You can show the current time in your preferred format in the
+ status line with this patch. (A bug which prevented compilation
+ of this patch on some systems was fixed on March 14).
+
+ [6]patch-0.95.4.bj.my_hdr_subject.3
+ Use this patch:
+
+ + To execute sendhooks before setting subject to make it
+ possible to set the subject in a sendhook. The price is that
+ you miss the possibility to let the sendhook depend upon the
+ subject.
+ + To let "my_hdr Subject" commands be controlled by $hdrs. Now
+ $hdrs only controls all other kinds of my_hdr commands.
+ + To let sendhooks work in batch mode.
+
+ Thank you to [7]Rob Reid for fixing a bug in the second version
+ of this patch.
+
+ [8]patch-0.95.3.bj.ed_mtime.1.
+ When you leave the editor, mutt will check if the edited file's
+ modification time have changed to decide if the file has been
+ modified. This means that it you are able to modify it in less
+ than one second (e.g. by running a script to generate some
+ text), Mutt may think that it is unmodified.
+
+ This patch solves this problem by seting the time stamp of a
+ new file to `one second ago' before calling the editor.
+
+ [9]patch-0.94.13.bj.current_shortcut.1
+ This patch will make the ^ character a shortcut for the
+ currently open mailbox.
+
+Optimizations
+
+ [10]patch-0.95.bj.hash_destroy.2.
+ This patch will speed up a little bit closing of mailboxes.
+ _________________________________________________________________
+
+
+ 1999-04-17 [11]Byrial Jensen <[12]byrial@image.dk>
+
+ This page: http://www.image.dk/~byrial/mutt/patches/
+ _________________________________________________________________
+
+References
+
+ 1. http://www.mutt.org/
+ 2. mailto:byrial@image.dk
+ 3. http://home.worldonline.dk/~byrial/mutt/patches/patch-0.95.3i.bj.keyattach.1
+ 4. http://home.worldonline.dk/~byrial/mutt/patches/patch-0.95.bj.noquote_hdr_term.1
+ 5. http://home.worldonline.dk/~byrial/mutt/patches/patch-0.95.4.bj.status-time.1
+ 6. http://home.worldonline.dk/~byrial/mutt/patches/patch-0.95.4.bj.my_hdr_subject.3
+ 7. http://astro.utoronto.ca/~reid/
+ 8. http://home.worldonline.dk/~byrial/mutt/patches/patch-0.95.3.bj.ed_mtime.1
+ 9. http://home.worldonline.dk/~byrial/mutt/patches/patch-0.94.13.bj.current_shortcut.1
+ 10. http://home.worldonline.dk/~byrial/mutt/patches/patch-0.95.bj.hash_destroy.2
+ 11. http://home.worldonline.dk/~byrial/
+ 12. mailto:byrial@image.dk
--- /dev/null
+
+ 42.org, resources, mutt-patches
+ _________________________________________________________________
+
+ Warning: Currently you need to apply patch-0.00.sec.patchlist.7 before
+ any other patches.
+ Here is the place where I keep all these little patches for mutt which
+ are so dangerous and big that they haven't gotten into mainstream mutt
+ yet (and probably never will). But they make my day brighter and
+ happier so i decided to keep & update them here. I'm currently running
+ [1]Mutt 1.0i so these patches here should cleanly apply to at least
+ this version.
+drwxr-xr-x 3 sec sec 512 May 10 1998 [2]contrib/
+-rw-r--r-- 1 sec sec 3270 Aug 25 15:22 [3]patch-0.00.sec.patchlist.7
+-rw-r--r-- 1 sec sec 2678 Mar 23 1999 [4]patch-0.94.12.oe.__.1
+-rw-r--r-- 1 sec sec 1695 Mar 22 1999 [5]patch-0.94.7.sec.backlog.1
+-rw-r--r-- 1 sec sec 3372 Mar 22 1999 [6]patch-0.94.7.sec.pager_status_on_t
+op.1
+-rw-r--r-- 1 sec sec 3468 Mar 22 1999 [7]patch-0.94.7.sec.previous_jump.1
+-rw-r--r-- 1 sec sec 3250 Mar 22 1999 [8]patch-0.94.7.sec.score_auto.1
+-rw-r--r-- 1 sec sec 2010 Mar 23 1999 [9]patch-0.94.7.vikas.word_chars.1
+-rw-r--r-- 1 sec sec 1102 Mar 31 1999 [10]patch-0.95.3.bj.ed_mtime.1
+-rw-r--r-- 1 sec sec 641 Mar 23 1999 [11]patch-0.95.3i.bj.keyattach.1
+-rw-r--r-- 1 sec sec 6176 Mar 31 1999 [12]patch-0.95.4.bj.status-time.1
+-rw-r--r-- 1 sec sec 1063 Mar 22 1999 [13]patch-0.95.4.sec.expand_hook.1
+-rw-r--r-- 1 sec sec 536 Mar 22 1999 [14]patch-0.95.4.sec.keypad.1
+-rw-r--r-- 1 sec sec 4035 Mar 29 1999 [15]patch-0.95.4.sec.mailcap-fix.1
+-rw-r--r-- 1 sec sec 2119 Mar 28 1999 [16]patch-0.95.4.sec.reverse_reply.1
+-rw-r--r-- 1 sec sec 3356 Mar 23 1999 [17]patch-0.95.4.vikas.print_index.1
+-rw-r--r-- 1 sec sec 877 Jun 16 20:57 [18]patch-0.95.6.as.mark-old.1
+-rw-r--r-- 1 sec sec 1625 Mar 31 1999 [19]patch-0.95.bj.hash_destroy.2
+-rw-r--r-- 1 sec sec 5662 Mar 22 1999 [20]patch-0.95.sec.condense_pgp.1
+-rw-r--r-- 1 sec sec 1164 Mar 22 1999 [21]patch-0.95.sec.position_on_new.1
+-rw-r--r-- 1 sec sec 996 Sep 12 14:44 [22]patch-1.02.sec._A.1
+ _________________________________________________________________
+
+ Due to popular demand short descripions of each patch follow:
+
+ [23]patch-0.00.sec.patchlist.7:
+ This simple patch brings back "patchlist.c" you need to apply before
+ any other patch you get from here.
+
+ [24]patch-0.94.12.oe.__.1:
+ From: "O'Shaughnessy Evans" <shaug@gstis.net>
+ toggle conversion to lowercase of subsequent %-expansions with %_
+ I find it useful in my default save-hook:
+ fcc-save-hook . +Users/%_%O
+
+ [25]patch-0.94.7.sec.backlog.1:
+ From: Stefan `Sec` Zehl <sec@42.org>
+ This patch adds a header "X-Current-Backlog:" (controlled by an
+ option) which contains the number of undeleted messages in your
+ folder. This really is bloatism but i've been bored a bit, and it
+ can't be done reasonably outside of mutt. Please do not distribute
+ this patch without my permission.
+
+ [26]patch-0.94.7.sec.pager_status_on_top.1:
+ This patch adds "set pager_status_on_top" which basically allows you
+ to control the status line in the pager independently of the normal
+ "status_on_top". It also adds a new color object pager_status, which
+ allows you to control the color of the pager_status independently.
+
+ [27]patch-0.94.7.sec.previous_jump.1:
+ This adds a new function "previous_jump" by default bound to 'ESC-b'
+ in the main menu and pager. It lets you jump to the message you last
+ jumped from. I.e. while moving through your mailbox with TAB, you can
+ go one step back with ESC-b.
+ this one needs some more work, but i didn't find the time to do it
+ 'right' yet.
+
+ [28]patch-0.94.7.sec.score_auto.1:
+ This one adds $score_auto which controls auto-deletion and
+ auto-flagging of mails with (score<0) or (score>=9999).
+
+ [29]patch-0.94.7.vikas.word_chars.1:
+ From: Vikas Agnihotri <VikasA@att.com>
+ Adds $word_chars, a list of nonalphanumeric characters considered part
+ of a word by the line editor.
+
+ [30]patch-0.95.3.bj.ed_mtime.1:
+ From: Byrial Jensen <byrial@image.dk>
+ Fix a problem where mutt would think you didn't edit a file, if your
+ computer is too fast.
+
+ [31]patch-0.95.3i.bj.keyattach.1:
+ From: Byrial Jensen <byrial@image.dk>
+ Avoid sending out a temporary filename from your box when sending a
+ pgp key.
+
+ [32]patch-0.95.4.bj.status-time.1:
+ From: Byrial Jensen <byrial@image.dk>
+ You can show the current time in your preferred format in the status
+ line with this patch.
+
+ [33]patch-0.95.4.sec.expand_hook.1:
+ From: Stefan `Sec` Zehl <sec@42.org>
+ This patch makes send-hooks expand %-expandos, too. I wrote that for
+ someone else, and think it's quite usable.
+
+ [34]patch-0.95.4.sec.keypad.1:
+ From: Stefan `Sec` Zehl <sec@42.org>
+ This re-enables the normal cursor keys on exit. It is needed on my
+ FreeBSD-2.2.7-STABLE system with ncurses.
+
+ [35]patch-0.95.4.sec.mailcap-fix.1:
+ From: Stefan `Sec` Zehl <sec@42.org>
+ This patch fixes the mailcap handling for mails which only contain an
+ non displayable attachment. It also brings back the 'M' Status
+ character to display this kind of mail.
+
+ [36]patch-0.95.4.sec.reverse_reply.1:
+ extends reverse_alias to also fix the Realnames in outgoing Mail.
+
+ [37]patch-0.95.4.vikas.print_index.1:
+ From: Vikas Agnihotri <VikasA@att.com>
+ This patch adds a command to the 'index' menu called print-index
+ (default binding 'P') that prints the current message index just as it
+ appears on the screen. Note that it prints the index entries for the
+ entire folder and not just what you can see on the current screen. It
+ honors the $print setting and uses $print_cmd to print.
+
+ [38]patch-0.95.6.as.mark-old.1:
+ From: Aaron Schrab <aaron+mutt@schrab.com>
+ With this patch, mutt will distinguish between old and new messages as
+ if mark_old were set, but it will only automatically change new
+ messages to old if mask_old is set, otherwise they're only marked old
+ manually (with set-flag).
+
+ [39]patch-0.95.bj.hash_destroy.2:
+ From: Byrial Jensen <byrial@image.dk>
+ This patch will speed up the closing of mailboxes a little bit.
+
+ [40]patch-0.95.sec.condense_pgp.1:
+ From: Stefan `Sec` Zehl <sec@42.org>
+ Here is the new version of condese_pgp. This patch condenses the
+ output of "pgp" in mutt to the relevant parts. (Parts of this patch
+ have been stolen from alt_pgp from Frank Pilhofer) you can view the
+ whole PGP output again by setting "pgp_paranoid".
+
+ [41]patch-0.95.sec.position_on_new.1:
+ This ugly but useful hack makes mutt position on a new message if you
+ hit TAB, even if the new message just arrived :)
+
+ [42]patch-1.02.sec._A.1:
+ From: Stefan `Sec` Zehl <sec@42.org>
+ adds %A to possible pager_format expandos. It lists number of new
+ Mails.
+ I find it useful in my pager_format:
+ set pager_format="[%Z] %A-%C/%m %.34f%>%[%d.%b %y, %H:%M]"
+ _________________________________________________________________
+
+ If you want to see [43]mutt's homepage or want to know something about
+ [44]mutt's advantages then click on the appropriate words. Other
+ people also keep patches around, which might be of interest. See
+ [45]Byrial's page, for example. You could also take a peek at dunc's
+ [46]wishlist, to see where mutt is going. If you are so inclined you
+ could also view the [47]script I use to generate this page or my
+ personal [48].muttrc. Your are also welcome to send your comments to
+ [49]sec@42.org.
+ _________________________________________________________________
+
+ [50]Stefan `Sec` Zehl 10-May-1997, 09.Nov.1999
+
+References
+
+ 1. http://sec.42.org/mutt/mutt_-v
+ 2. http://sec.42.org/mutt/contrib/
+ 3. http://sec.42.org/mutt/patch-0.00.sec.patchlist.7
+ 4. http://sec.42.org/mutt/patch-0.94.12.oe.__.1
+ 5. http://sec.42.org/mutt/patch-0.94.7.sec.backlog.1
+ 6. http://sec.42.org/mutt/patch-0.94.7.sec.pager_status_on_top.1
+ 7. http://sec.42.org/mutt/patch-0.94.7.sec.previous_jump.1
+ 8. http://sec.42.org/mutt/patch-0.94.7.sec.score_auto.1
+ 9. http://sec.42.org/mutt/patch-0.94.7.vikas.word_chars.1
+ 10. http://sec.42.org/mutt/patch-0.95.3.bj.ed_mtime.1
+ 11. http://sec.42.org/mutt/patch-0.95.3i.bj.keyattach.1
+ 12. http://sec.42.org/mutt/patch-0.95.4.bj.status-time.1
+ 13. http://sec.42.org/mutt/patch-0.95.4.sec.expand_hook.1
+ 14. http://sec.42.org/mutt/patch-0.95.4.sec.keypad.1
+ 15. http://sec.42.org/mutt/patch-0.95.4.sec.mailcap-fix.1
+ 16. http://sec.42.org/mutt/patch-0.95.4.sec.reverse_reply.1
+ 17. http://sec.42.org/mutt/patch-0.95.4.vikas.print_index.1
+ 18. http://sec.42.org/mutt/patch-0.95.6.as.mark-old.1
+ 19. http://sec.42.org/mutt/patch-0.95.bj.hash_destroy.2
+ 20. http://sec.42.org/mutt/patch-0.95.sec.condense_pgp.1
+ 21. http://sec.42.org/mutt/patch-0.95.sec.position_on_new.1
+ 22. http://sec.42.org/mutt/patch-1.02.sec._A.1
+ 23. http://sec.42.org/mutt/#patch-0.00.sec.patchlist.7
+ 24. http://sec.42.org/mutt/#patch-0.94.12.oe.__.1
+ 25. http://sec.42.org/mutt/#patch-0.94.7.sec.backlog.1
+ 26. http://sec.42.org/mutt/#patch-0.94.7.sec.pager_status_on_top.1
+ 27. http://sec.42.org/mutt/#patch-0.94.7.sec.previous_jump.1
+ 28. http://sec.42.org/mutt/#patch-0.94.7.sec.score_auto.1
+ 29. http://sec.42.org/mutt/#patch-0.94.7.vikas.word_chars.1
+ 30. http://sec.42.org/mutt/#patch-0.95.3.bj.ed_mtime.1
+ 31. http://sec.42.org/mutt/#patch-0.95.3i.bj.keyattach.1
+ 32. http://sec.42.org/mutt/#patch-0.95.4.bj.status-time.1
+ 33. http://sec.42.org/mutt/#patch-0.95.4.sec.expand_hook.1
+ 34. http://sec.42.org/mutt/#patch-0.95.4.sec.keypad.1
+ 35. http://sec.42.org/mutt/#patch-0.95.4.sec.mailcap-fix.1
+ 36. http://sec.42.org/mutt/#patch-0.95.4.sec.reverse_reply.1
+ 37. http://sec.42.org/mutt/#patch-0.95.4.vikas.print_index.1
+ 38. http://sec.42.org/mutt/#patch-0.95.6.as.mark-old.1
+ 39. http://sec.42.org/mutt/#patch-0.95.bj.hash_destroy.2
+ 40. http://sec.42.org/mutt/#patch-0.95.sec.condense_pgp.1
+ 41. http://sec.42.org/mutt/#patch-0.95.sec.position_on_new.1
+ 42. http://sec.42.org/mutt/#patch-1.02.sec._A.1
+ 43. http://www.mutt.org/
+ 44. http://www.math.fu-berlin.de/~guckes/mutt/elm.vs.mutt.html
+ 45. http://www.image.dk/~byrial/mutt/patches/
+ 46. http://www.ucc.gu.uwa.edu.au/~dunc/mutt/wishlist/
+ 47. http://sec.42.org/mutt/index.script
+ 48. http://sec.42.org/mutt/.mutt/muttrc-1.0i.html
+ 49. mailto:sec@42.org
+ 50. http://www.42.org/~sec/