summarylogtreecommitdiffstats
path: root/xtitles.patch
diff options
context:
space:
mode:
authorOscar Morante2015-06-11 14:34:58 +0300
committerOscar Morante2015-06-11 14:35:29 +0300
commite6384b51f68c57d993111a2a0faf8a2bdd69bb32 (patch)
tree30ecb81ba7e885e11deb6ba536bf6893bacc0c5f /xtitles.patch
downloadaur-e6384b51f68c57d993111a2a0faf8a2bdd69bb32.tar.gz
initial import
Diffstat (limited to 'xtitles.patch')
-rw-r--r--xtitles.patch198
1 files changed, 198 insertions, 0 deletions
diff --git a/xtitles.patch b/xtitles.patch
new file mode 100644
index 000000000000..df64beb1485c
--- /dev/null
+++ b/xtitles.patch
@@ -0,0 +1,198 @@
+From: Cristoph Berg <myon@debian.org>
+Date: Thu, 27 Feb 2014 12:25:51 +0100
+Subject: xtitles
+
+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.
+ - 2007-02-20 myon: make the note about the xterm_set_titles defaults a
+ comment.
+ - 2008-08-02 myon: move set_xterm_* prototypes into the proper header file
+ (cleaner code, no functional change, evades conflict with sidebar patch)
+
+Signed-off-by: Matteo F. Vescovi <mfvescovi@gmail.com>
+
+Gbp-Pq: Topic features
+---
+ curs_main.c | 20 ++++++++++++++++++++
+ globals.h | 2 ++
+ init.c | 20 ++++++++++++++++++++
+ init.h | 21 +++++++++++++++++++++
+ mutt.h | 1 +
+ mutt_menu.h | 2 ++
+ pager.c | 7 +++++++
+ status.c | 2 ++
+ 8 files changed, 75 insertions(+)
+
+diff --git a/curs_main.c b/curs_main.c
+index aa4b044..16ddbc9 100644
+--- a/curs_main.c
++++ b/curs_main.c
+@@ -110,6 +110,19 @@ static const char *No_visible = N_("No visible messages.");
+
+ 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;
+@@ -560,6 +573,13 @@ int mutt_index_menu (void)
+ mutt_paddstr (COLS, buf);
+ NORMAL_COLOR;
+ 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;
+diff --git a/globals.h b/globals.h
+index 6fefe5b..584cd0c 100644
+--- a/globals.h
++++ b/globals.h
+@@ -141,6 +141,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;
+diff --git a/init.c b/init.c
+index cc3cf4b..81bb9e7 100644
+--- a/init.c
++++ b/init.c
+@@ -1877,6 +1877,26 @@ static int parse_set (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err)
+ 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 ||
+diff --git a/init.h b/init.h
+index 80d05ce..cf8e75a 100644
+--- a/init.h
++++ b/init.h
+@@ -3412,6 +3412,27 @@ struct option_t MuttVars[] = {
+ ** Also see the $$read_inc, $$net_inc and $$time_inc variables and the
+ ** ``$tuning'' section of the manual for performance considerations.
+ */
++ {"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},
++ /* The default must be off to force in the validity checking. */
++ /*
++ ** .pp
++ ** Controls whether mutt sets the xterm title bar and icon name
++ ** (as long as you are in an appropriate terminal).
++ */
++ {"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, 0, 0, 0, 0 }
+ };
+diff --git a/mutt.h b/mutt.h
+index dcd7dc5..1d7e177 100644
+--- a/mutt.h
++++ b/mutt.h
+@@ -449,6 +449,7 @@ enum
+ OPTWRAPSEARCH,
+ OPTWRITEBCC, /* write out a bcc header? */
+ OPTXMAILER,
++ OPTXTERMSETTITLES,
+
+ OPTCRYPTUSEGPGME,
+ OPTCRYPTUSEPKA,
+diff --git a/mutt_menu.h b/mutt_menu.h
+index d459bef..82abecd 100644
+--- a/mutt_menu.h
++++ b/mutt_menu.h
+@@ -103,6 +103,8 @@ void menu_current_middle (MUTTMENU *);
+ void menu_current_bottom (MUTTMENU *);
+ void menu_check_recenter (MUTTMENU *);
+ void menu_status_line (char *, size_t, MUTTMENU *, const char *);
++void set_xterm_title_bar (char *title);
++void set_xterm_icon_name (char *name);
+
+ MUTTMENU *mutt_new_menu (int);
+ void mutt_menuDestroy (MUTTMENU **);
+diff --git a/pager.c b/pager.c
+index 486d8c8..23eb8ca 100644
+--- a/pager.c
++++ b/pager.c
+@@ -1812,6 +1812,13 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t *extra)
+ mutt_paddstr (COLS, bn);
+ }
+ NORMAL_COLOR;
++ 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)
+diff --git a/status.c b/status.c
+index 1bb9a5a..6051e3a 100644
+--- a/status.c
++++ b/status.c
+@@ -195,6 +195,8 @@ status_format_str (char *buf, size_t buflen, size_t col, char op, const char *sr
+ break;
+
+ case 'P':
++ if (!menu)
++ break;
+ if (menu->top + menu->pagelen >= menu->max)
+ cp = menu->top ? "end" : "all";
+ else