]> git.llucax.com Git - software/mutt-debian.git/blob - debian/patches/features/xtitles
bug annotations
[software/mutt-debian.git] / debian / patches / features / xtitles
1 # vi: ft=diff
2 This is the xterm title patch as found on the mutt mailing lists.
3
4 * Changes made:
5   - 2007-01-27 myon: using %P caused a segfault, updated status.c to catch
6     menu==NULL.
7   - 2007-02-20 myon: make the note about the xterm_set_titles defaults a
8     comment.
9   - 2008-08-02 myon: move set_xterm_* prototypes into the proper header file
10     (cleaner code, no functional change, evades conflict with sidebar patch)
11
12 == END PATCH
13 --- a/curs_main.c
14 +++ b/curs_main.c
15 @@ -110,6 +110,19 @@
16  
17  extern size_t UngetCount;
18  
19 +#define ASCII_CTRL_G                  0x07
20 +#define ASCII_CTRL_OPEN_SQUARE_BRAKET 0x1b
21 +
22 +void set_xterm_title_bar(char *title)
23 +{
24 +  fprintf(stderr ,"%c]2;%s%c", ASCII_CTRL_OPEN_SQUARE_BRAKET, title, ASCII_CTRL_G);
25 +}
26 +
27 +void set_xterm_icon_name(char *name)
28 +{
29 +  fprintf(stderr, "%c]1;%s%c", ASCII_CTRL_OPEN_SQUARE_BRAKET, name, ASCII_CTRL_G);
30 +}
31 +
32  void index_make_entry (char *s, size_t l, MUTTMENU *menu, int num)
33  {
34    format_flag flag = M_FORMAT_MAKEPRINT | M_FORMAT_ARROWCURSOR | M_FORMAT_INDEX;
35 @@ -566,6 +579,13 @@
36         SETCOLOR (MT_COLOR_NORMAL);
37          BKGDSET (MT_COLOR_NORMAL);
38         menu->redraw &= ~REDRAW_STATUS;
39 +       if (option(OPTXTERMSETTITLES))
40 +       {
41 +         menu_status_line (buf, sizeof (buf), menu, NONULL (XtermTitle));
42 +         set_xterm_title_bar(buf);
43 +         menu_status_line (buf, sizeof (buf), menu, NONULL (XtermIcon));
44 +         set_xterm_icon_name(buf);
45 +       }
46        }
47  
48        menu->redraw = 0;
49 --- a/globals.h
50 +++ b/globals.h
51 @@ -141,6 +141,8 @@
52  WHERE char *Tochars;
53  WHERE char *Username;
54  WHERE char *Visual;
55 +WHERE char *XtermTitle;
56 +WHERE char *XtermIcon;
57  
58  WHERE char *CurrentFolder;
59  WHERE char *LastFolder;
60 --- a/init.c
61 +++ b/init.c
62 @@ -1892,6 +1892,26 @@
63         toggle_option (MuttVars[idx].data);
64        else
65         set_option (MuttVars[idx].data);
66 +
67 +      /* sanity check for xterm */
68 +      if ((mutt_strcmp (MuttVars[idx].option, "xterm_set_titles") == 0)
69 +               && option (OPTXTERMSETTITLES))
70 +      {
71 +       char *ep = getenv ("TERM");
72 +       /* Make sure that the terminal can take the control codes */
73 +       if (ep == NULL) unset_option (MuttVars[idx].data);
74 +       else if (mutt_strncasecmp (ep, "xterm", 5) &&
75 +                mutt_strncasecmp (ep, "color-xterm", 11) &&
76 +                mutt_strncasecmp (ep, "eterm", 5) &&
77 +                mutt_strncasecmp (ep, "kterm", 5) &&
78 +                mutt_strncasecmp (ep, "nxterm", 6) &&
79 +                mutt_strncasecmp (ep, "putty", 5) &&
80 +                mutt_strncasecmp (ep, "screen", 6) &&
81 +                mutt_strncasecmp (ep, "cygwin", 6) &&
82 +                mutt_strncasecmp (ep, "rxvt", 4) )
83 +         unset_option (MuttVars[idx].  data);
84 +
85 +      }
86      }
87      else if (myvar || DTYPE (MuttVars[idx].type) == DT_STR ||
88              DTYPE (MuttVars[idx].type) == DT_PATH ||
89 --- a/init.h
90 +++ b/init.h
91 @@ -3347,6 +3347,27 @@
92    ** Also see the $$read_inc, $$net_inc and $$time_inc variables and the
93    ** ``$tuning'' section of the manual for performance considerations.
94    */
95 +  {"xterm_icon",       DT_STR,   R_BOTH, UL &XtermIcon,  UL "M%?n?AIL&ail?"},
96 +  /*
97 +  ** .pp
98 +  ** Controls the format of the icon title, as long as xterm_set_titles
99 +  ** is enabled. This string is identical in formatting to the one used by
100 +  ** ``$$status_format''.
101 +  */
102 +  {"xterm_set_titles", DT_BOOL,  R_BOTH, OPTXTERMSETTITLES, 0},
103 +  /* The default must be off to force in the validity checking. */
104 +  /*
105 +  ** .pp
106 +  ** Controls whether mutt sets the xterm title bar and icon name
107 +  ** (as long as you are in an appropriate terminal).
108 +  */
109 +  {"xterm_title",      DT_STR,   R_BOTH, UL &XtermTitle, UL "Mutt with %?m?%m messages&no messages?%?n? [%n NEW]?"},
110 +  /*
111 +  ** .pp
112 +  ** Controls the format of the title bar of the xterm provided that
113 +  ** xterm_set_titles has been set. This string is identical in formatting
114 +  ** to the one used by ``$$status_format''.
115 +  */
116    /*--*/
117    { NULL, 0, 0, 0, 0 }
118  };
119 --- a/mutt.h
120 +++ b/mutt.h
121 @@ -447,6 +447,7 @@
122    OPTWRAPSEARCH,
123    OPTWRITEBCC,         /* write out a bcc header? */
124    OPTXMAILER,
125 +  OPTXTERMSETTITLES,
126  
127    OPTCRYPTUSEGPGME,
128    OPTCRYPTUSEPKA,
129 --- a/pager.c
130 +++ b/pager.c
131 @@ -1784,6 +1784,13 @@
132        }
133        BKGDSET (MT_COLOR_NORMAL);
134        SETCOLOR (MT_COLOR_NORMAL);
135 +      if (option(OPTXTERMSETTITLES))
136 +      {
137 +       menu_status_line (buffer, sizeof (buffer), index, NONULL (XtermTitle));
138 +       set_xterm_title_bar(buffer);
139 +       menu_status_line (buffer, sizeof (buffer), index, NONULL (XtermIcon));
140 +       set_xterm_icon_name(buffer);
141 +      }
142      }
143  
144      if ((redraw & REDRAW_INDEX) && index)
145 --- a/status.c
146 +++ b/status.c
147 @@ -195,6 +195,8 @@
148        break;
149  
150      case 'P':
151 +      if (!menu)
152 +       break;
153        if (menu->top + menu->pagelen >= menu->max)
154         cp = menu->top ? "end" : "all";
155        else
156 --- a/mutt_menu.h
157 +++ b/mutt_menu.h
158 @@ -103,6 +103,8 @@
159  void menu_current_bottom (MUTTMENU *);
160  void menu_check_recenter (MUTTMENU *);
161  void menu_status_line (char *, size_t, MUTTMENU *, const char *);
162 +void set_xterm_title_bar (char *title);
163 +void set_xterm_icon_name (char *name);
164  
165  MUTTMENU *mutt_new_menu (int);
166  void mutt_menuDestroy (MUTTMENU **);