diff -dur -x '*~' -x '*.orig' mutt-1.5.10.orig/curs_main.c mutt-1.5.10/curs_main.c --- mutt-1.5.20.b/curs_main.c 2009-07-14 12:34:25.000000000 +0200 +++ mutt-1.5.20/curs_main.c 2009-07-14 12:42:41.000000000 +0200 @@ -556,7 +556,7 @@ 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.5.18/globals.h.orig 2008-01-30 05:26:50.000000000 +0100 +++ mutt-1.5.18/globals.h 2008-07-25 17:41:02.532746787 +0200 @@ -200,6 +200,7 @@ WHERE short SaveHist; WHERE short SendmailWait; WHERE short SleepTime INITVAL (1); +WHERE short StatusUpdate; WHERE short TimeInc; WHERE short Timeout; WHERE short Wrap; diff -dur -x '*~' -x '*.orig' mutt-1.5.10.orig/init.h mutt-1.5.10/init.h --- mutt-1.5.10.orig/init.h 2005-10-07 09:28:10.000000000 +0200 +++ mutt-1.5.10/init.h 2005-10-07 09:28:24.000000000 +0200 @@ -2626,6 +2626,9 @@ ** .dt %u .dd number of unread messages * ** .dt %v .dd Mutt version string ** .dt %V .dd currently active limit pattern, if any * + ** .dt %[fmt] .dd the current date and time. ``fmt'' is + ** expanded by the system call ``strftime''; + ** a leading bang disables locales ** .dt %>X .dd right justify the rest of the string and pad with ``X'' ** .dt %|X .dd pad to the end of the line with ``X'' ** .dt %*X .dd soft-fill with character ``X'' as pad @@ -2671,6 +2674,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 be 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 diff -dur -x '*~' -x '*.orig' mutt-1.5.10.orig/menu.c mutt-1.5.10/menu.c --- mutt-1.5.10.orig/menu.c 2005-06-12 20:32:46.000000000 +0200 +++ mutt-1.5.10/menu.c 2005-10-07 09:28:24.000000000 +0200 @@ -1087,3 +1087,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; +} diff -dur -x '*~' -x '*.orig' mutt-1.5.10.orig/mutt_menu.h mutt-1.5.10/mutt_menu.h --- mutt-1.5.10.orig/mutt_menu.h 2005-08-11 21:37:02.000000000 +0200 +++ mutt-1.5.10/mutt_menu.h 2005-10-07 09:28:59.000000000 +0200 @@ -112,4 +112,5 @@ void index_make_entry (char *, size_t, struct menu_t *, int); int index_color (int); +int update_status_time (void); #endif /* _MUTT_MENU_H_ */ diff -dur -x '*~' -x '*.orig' mutt-1.5.10.orig/pager.c mutt-1.5.10/pager.c --- mutt-1.5.10.orig/pager.c 2005-08-11 21:37:02.000000000 +0200 +++ mutt-1.5.10/pager.c 2005-10-07 09:28:24.000000000 +0200 @@ -1763,7 +1763,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. */ diff -dur -x '*~' -x '*.orig' mutt-1.5.10.orig/status.c mutt-1.5.10/status.c --- mutt-1.5.10.orig/status.c 2005-10-07 09:28:10.000000000 +0200 +++ mutt-1.5.10/status.c 2005-10-07 09:28:24.000000000 +0200 @@ -30,6 +30,7 @@ #include #include #include +#include static char *get_sort_str (char *buf, size_t buflen, int method) { @@ -288,6 +289,61 @@ *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); break;