--- mutt-1.4.1/PATCHES.orig Mon Nov 26 20:16:52 2001 +++ mutt-1.4.1/PATCHES Mon Mar 31 12:21:55 2003 @@ -0,0 +1 @@ +Feature patch: status-time 0.95.4 by Byrial Jensen --- mutt-1.4.1/curs_main.c.orig Wed Jan 16 21:44:25 2002 +++ mutt-1.4.1/curs_main.c Mon Mar 31 12:16:33 2003 @@ -546,7 +546,8 @@ 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); --- mutt-1.4.1/globals.h.orig Thu Jan 3 21:57:19 2002 +++ mutt-1.4.1/globals.h Mon Mar 31 12:17:31 2003 @@ -149,6 +149,7 @@ WHERE short ReadInc; WHERE short SendmailWait; WHERE short SleepTime INITVAL (1); +WHERE short StatusUpdate; WHERE short Timeout; WHERE short WrapMargin; WHERE short WriteInc; --- mutt-1.4.1/init.h.orig Wed Jul 24 10:41:29 2002 +++ mutt-1.4.1/init.h Mon Mar 31 12:21:32 2003 @@ -2181,6 +2181,16 @@ ** 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 }, + /* + ** .pp + ** 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 $$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. + */ { "strict_threads", DT_BOOL, R_RESORT|R_RESORT_INIT|R_INDEX, OPTSTRICTTHREADS, 0 }, /* ** .pp --- mutt-1.4.1/menu.c.orig Mon Jan 28 11:18:50 2002 +++ mutt-1.4.1/menu.c Mon Mar 31 12:16:43 2003 @@ -1045,3 +1045,23 @@ } /* 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; +} --- mutt-1.4.1/mutt_menu.h.orig Tue Sep 11 13:20:34 2001 +++ mutt-1.4.1/mutt_menu.h Mon Mar 31 12:16:43 2003 @@ -107,3 +107,5 @@ /* 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); --- mutt-1.4.1/pager.c.orig Sun Jan 13 09:52:15 2002 +++ mutt-1.4.1/pager.c Mon Mar 31 12:16:44 2003 @@ -1717,7 +1717,7 @@ 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. */ --- mutt-1.4.1/status.c.orig Fri Mar 3 11:10:14 2000 +++ mutt-1.4.1/status.c Mon Mar 31 12:16:44 2003 @@ -26,6 +26,7 @@ #include #include #include +#include static char *get_sort_str (char *buf, size_t buflen, int method) { @@ -275,6 +276,61 @@ 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);