Re: To Ryan Claycamp 2007-01-27 <20070127183112.GG32656@xxxxxxxx> > > When I pressed "?" for help in the mailboxes view my mutt reproducible > > crashed. This did not happen to other users on my box. > > > > Finally, the configuration lines > > set xterm_title="Mutt: %f %r [%?M?%M/?%m%?n? N:%n?%?o? O:%o?%?d? > > D:%d?%?F? F:%F?%?t? T:%t?%?p? P:%p?%?b? I:%b?%?l? %l?]-(%s/%S)-(%P)-" > > # look here: > > this one is never closed: ^ > > I just tracked this down - the xterm_title line quoted above is > actually fine (the %l is closed) but the culprit is %P. When called > for the xterm title, "menu" is undefined. Hi, here's the updated xtitles patch. (See http://bugs.debian.org/365683 for the full discussion.) Christoph -- cb@xxxxxxxx | http://www.df7cb.de/
# vi: ft=diff This is the xterm title patch as found on the mutt mailing lists. * Changes made: - 2007-01-27 myon: using %P caused a segfault, updated status.c to catch menu==NULL. == END PATCH Index: mutt/PATCHES =================================================================== --- mutt.orig/PATCHES 2007-01-27 19:33:32.932962104 +0100 +++ mutt/PATCHES 2007-01-27 19:33:32.932962104 +0100 @@ -0,0 +1 @@ +patch-1.5.13.nt+ab.xtitles.4 Index: mutt/curs_main.c =================================================================== --- mutt.orig/curs_main.c 2006-12-12 14:15:02.000000000 +0100 +++ mutt/curs_main.c 2007-01-27 19:33:32.933961952 +0100 @@ -110,6 +110,19 @@ static const char *No_visible = N_("No v extern size_t UngetCount; +#define ASCII_CTRL_G 0x07 +#define ASCII_CTRL_OPEN_SQUARE_BRAKET 0x1b + +void set_xterm_title_bar(char *title) +{ + fprintf(stderr ,"%c]2;%s%c", ASCII_CTRL_OPEN_SQUARE_BRAKET, title, ASCII_CTRL_G); +} + +void set_xterm_icon_name(char *name) +{ + fprintf(stderr, "%c]1;%s%c", ASCII_CTRL_OPEN_SQUARE_BRAKET, name, ASCII_CTRL_G); +} + void index_make_entry (char *s, size_t l, MUTTMENU *menu, int num) { format_flag flag = M_FORMAT_MAKEPRINT | M_FORMAT_ARROWCURSOR | M_FORMAT_INDEX; @@ -568,6 +581,13 @@ int mutt_index_menu (void) SETCOLOR (MT_COLOR_NORMAL); BKGDSET (MT_COLOR_NORMAL); menu->redraw &= ~REDRAW_STATUS; + if (option(OPTXTERMSETTITLES)) + { + menu_status_line (buf, sizeof (buf), menu, NONULL (XtermTitle)); + set_xterm_title_bar(buf); + menu_status_line (buf, sizeof (buf), menu, NONULL (XtermIcon)); + set_xterm_icon_name(buf); + } } menu->redraw = 0; Index: mutt/globals.h =================================================================== --- mutt.orig/globals.h 2007-01-04 15:23:49.000000000 +0100 +++ mutt/globals.h 2007-01-27 19:33:32.933961952 +0100 @@ -137,6 +137,8 @@ WHERE char *Tempdir; WHERE char *Tochars; WHERE char *Username; WHERE char *Visual; +WHERE char *XtermTitle; +WHERE char *XtermIcon; WHERE char *CurrentFolder; WHERE char *LastFolder; Index: mutt/init.c =================================================================== --- mutt.orig/init.c 2006-12-12 14:15:03.000000000 +0100 +++ mutt/init.c 2007-01-27 19:33:32.934961800 +0100 @@ -1747,6 +1747,26 @@ static int parse_set (BUFFER *tmp, BUFFE toggle_option (MuttVars[idx].data); else set_option (MuttVars[idx].data); + + /* sanity check for xterm */ + if ((mutt_strcmp (MuttVars[idx].option, "xterm_set_titles") == 0) + && option (OPTXTERMSETTITLES)) + { + char *ep = getenv ("TERM"); + /* Make sure that the terminal can take the control codes */ + if (ep == NULL) unset_option (MuttVars[idx].data); + else if (mutt_strncasecmp (ep, "xterm", 5) && + mutt_strncasecmp (ep, "color-xterm", 11) && + mutt_strncasecmp (ep, "eterm", 5) && + mutt_strncasecmp (ep, "kterm", 5) && + mutt_strncasecmp (ep, "nxterm", 6) && + mutt_strncasecmp (ep, "putty", 5) && + mutt_strncasecmp (ep, "screen", 6) && + mutt_strncasecmp (ep, "cygwin", 6) && + mutt_strncasecmp (ep, "rxvt", 4) ) + unset_option (MuttVars[idx]. data); + + } } else if (myvar || DTYPE (MuttVars[idx].type) == DT_STR || DTYPE (MuttVars[idx].type) == DT_PATH || Index: mutt/init.h =================================================================== --- mutt.orig/init.h 2006-12-12 14:15:03.000000000 +0100 +++ mutt/init.h 2007-01-27 19:33:32.936961496 +0100 @@ -2941,6 +2941,27 @@ struct option_t MuttVars[] = { ** Controls whether mutt writes out the Bcc header when preparing ** messages to be sent. Exim users may wish to unset this. */ + {"xterm_icon", DT_STR, R_BOTH, UL &XtermIcon, UL "M%?n?AIL&ail?"}, + /* + ** .pp + ** Controls the format of the icon title, as long as xterm_set_titles + ** is enabled. This string is identical in formatting to the one used by + ** ``$$status_format''. + */ + {"xterm_set_titles", DT_BOOL, R_BOTH, OPTXTERMSETTITLES, 0}, + /* + ** .pp + ** Controls whether mutt sets the xterm title bar and icon name + ** (as long as you're in an appropriate terminal). The default must + ** be off to force in the validity checking. + */ + {"xterm_title", DT_STR, R_BOTH, UL &XtermTitle, UL "Mutt with %?m?%m messages&no messages?%?n? [%n NEW]?"}, + /* + ** .pp + ** Controls the format of the title bar of the xterm provided that + ** xterm_set_titles has been set. This string is identical in formatting + ** to the one used by ``$$status_format''. + */ /*--*/ { NULL } }; Index: mutt/mutt.h =================================================================== --- mutt.orig/mutt.h 2007-01-04 15:23:49.000000000 +0100 +++ mutt/mutt.h 2007-01-27 19:33:32.936961496 +0100 @@ -451,6 +451,7 @@ enum OPTWRAPSEARCH, OPTWRITEBCC, /* write out a bcc header? */ OPTXMAILER, + OPTXTERMSETTITLES, OPTCRYPTUSEGPGME, Index: mutt/pager.c =================================================================== --- mutt.orig/pager.c 2006-12-12 14:15:03.000000000 +0100 +++ mutt/pager.c 2007-01-27 19:33:32.937961344 +0100 @@ -30,6 +30,8 @@ #include "pager.h" #include "attach.h" #include "mbyte.h" +void set_xterm_title_bar(char *title); +void set_xterm_icon_name(char *name); #include "mx.h" @@ -1765,6 +1767,13 @@ mutt_pager (const char *banner, const ch addstr (topline == 0 ? "all)" : "end)"); BKGDSET (MT_COLOR_NORMAL); SETCOLOR (MT_COLOR_NORMAL); + if (option(OPTXTERMSETTITLES)) + { + menu_status_line (buffer, sizeof (buffer), index, NONULL (XtermTitle)); + set_xterm_title_bar(buffer); + menu_status_line (buffer, sizeof (buffer), index, NONULL (XtermIcon)); + set_xterm_icon_name(buffer); + } } if ((redraw & REDRAW_INDEX) && index) Index: mutt/status.c =================================================================== --- mutt.orig/status.c 2007-01-27 19:33:36.429430560 +0100 +++ mutt/status.c 2007-01-27 19:34:11.072164064 +0100 @@ -191,6 +191,8 @@ status_format_str (char *buf, size_t buf break; case 'P': + if (!menu) + break; if (menu->top + menu->pagelen >= menu->max) cp = menu->top ? "end" : "all"; else
Attachment:
signature.asc
Description: Digital signature