Date: Tuesday, September 15, 2015 @ 23:34:49 Author: heftig Revision: 140335
Fix standout coming out as italics on xterm with ncurses 6 Added: tmux/trunk/default-TERM-tmux.patch tmux/trunk/ncurses6-xterm-standout.patch Modified: tmux/trunk/PKGBUILD -------------------------------+ PKGBUILD | 11 ++ default-TERM-tmux.patch | 25 ++++++ ncurses6-xterm-standout.patch | 157 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 192 insertions(+), 1 deletion(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2015-09-15 15:37:04 UTC (rev 140334) +++ PKGBUILD 2015-09-15 21:34:49 UTC (rev 140335) @@ -5,7 +5,7 @@ pkgname=tmux pkgver=2.0 -pkgrel=2 +pkgrel=3 pkgdesc='A terminal multiplexer' url='http://tmux.github.io/' arch=('i686' 'x86_64') @@ -12,10 +12,19 @@ license=('BSD') depends=('ncurses' 'libevent' 'libutempter') source=(https://github.com/tmux/tmux/releases/download/$pkgver/tmux-$pkgver.tar.gz + ncurses6-xterm-standout.patch default-TERM-tmux.patch LICENSE) md5sums=('9fb6b443392c3978da5d599f1e814eaa' + '70347df93ed1922d6718d91491a7d9b4' + 'a7b0b43c1725d23cc5540f9adfd7ddf4' '71601bc37fa44e4395580b321963018e') +prepare() { + cd "$srcdir/$pkgname-${pkgver/_/}" + patch -Np1 -i ../ncurses6-xterm-standout.patch + patch -Np1 -i ../default-TERM-tmux.patch +} + build() { cd "$srcdir/$pkgname-${pkgver/_/}" ./configure --prefix=/usr Added: default-TERM-tmux.patch =================================================================== --- default-TERM-tmux.patch (rev 0) +++ default-TERM-tmux.patch 2015-09-15 21:34:49 UTC (rev 140335) @@ -0,0 +1,25 @@ +From c6c789f045182a95908d5013af190dfb2111043b Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" <[email protected]> +Date: Tue, 15 Sep 2015 23:20:15 +0200 +Subject: [PATCH] Use TERM=tmux by default, since we have it + +--- + options-table.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/options-table.c b/options-table.c +index c99937d..c25b0fd 100644 +--- a/options-table.c ++++ b/options-table.c +@@ -62,7 +62,7 @@ const struct options_table_entry server_options_table[] = { + + { .name = "default-terminal", + .type = OPTIONS_TABLE_STRING, +- .default_str = "screen" ++ .default_str = "tmux" + }, + + { .name = "escape-time", +-- +2.5.2 + Added: ncurses6-xterm-standout.patch =================================================================== --- ncurses6-xterm-standout.patch (rev 0) +++ ncurses6-xterm-standout.patch 2015-09-15 21:34:49 UTC (rev 140335) @@ -0,0 +1,157 @@ +From 7382ba82c5b366be84ca55c7842426bcf3d1f521 Mon Sep 17 00:00:00 2001 +From: nicm <nicm> +Date: Wed, 29 Apr 2015 15:59:08 +0000 +Subject: [PATCH] If default-terminal is set to "screen" or "screen-*", emulate + screen's historical (incorrect) behaviour for SGR 3 and send smso (standout). + Previously, we would send sitm (italics) if the terminal outside had it and + smso otherwise. This was acceptably until recently because xterm's terminfo + entry lacked sitm, so most users got smso. + +People who want italics should set default-terminal to the forthcoming +"tmux" entry (and be prepared to deal with it being missing on older +hosts). + +As a side-effect this changes default-terminal to be a server rather +than a session option. + +suggested by and ok naddy +--- + options-table.c | 10 +++++----- + server-fn.c | 2 +- + tmux.1 | 25 +++++++++++++------------ + tty.c | 24 ++++++++++++++++++------ + 4 files changed, 37 insertions(+), 24 deletions(-) + +diff --git a/options-table.c b/options-table.c +index 5e21c69..089a9b8 100644 +--- a/options-table.c ++++ b/options-table.c +@@ -61,6 +61,11 @@ const struct options_table_entry server_options_table[] = { + .default_num = 20 + }, + ++ { .name = "default-terminal", ++ .type = OPTIONS_TABLE_STRING, ++ .default_str = "screen" ++ }, ++ + { .name = "escape-time", + .type = OPTIONS_TABLE_NUMBER, + .minimum = 0, +@@ -143,11 +148,6 @@ const struct options_table_entry session_options_table[] = { + .default_str = _PATH_BSHELL + }, + +- { .name = "default-terminal", +- .type = OPTIONS_TABLE_STRING, +- .default_str = "screen" +- }, +- + { .name = "destroy-unattached", + .type = OPTIONS_TABLE_FLAG, + .default_num = 0 +diff --git a/server-fn.c b/server-fn.c +index 85067a8..0e6e4d4 100644 +--- a/server-fn.c ++++ b/server-fn.c +@@ -36,7 +36,7 @@ server_fill_environ(struct session *s, struct environ *env) + long pid; + + if (s != NULL) { +- term = options_get_string(&s->options, "default-terminal"); ++ term = options_get_string(&global_options, "default-terminal"); + environ_set(env, "TERM", term); + + idx = s->id; +diff --git a/tmux.1 b/tmux.1 +index 5bf7782..a7f5f3e 100644 +--- a/tmux.1 ++++ b/tmux.1 +@@ -2266,6 +2266,19 @@ Available server options are: + Set the number of buffers; as new buffers are added to the top of the stack, + old ones are removed from the bottom if necessary to maintain this maximum + length. ++.It Ic default-terminal Ar terminal ++Set the default terminal for new windows created in this session - the ++default value of the ++.Ev TERM ++environment variable. ++For ++.Nm ++to work correctly, this ++.Em must ++be set to ++.Ql screen , ++.Ql tmux ++or a derivative of them. + .It Ic escape-time Ar time + Set the time in milliseconds for which + .Nm +@@ -2405,18 +2418,6 @@ or + This option should be configured when + .Nm + is used as a login shell. +-.It Ic default-terminal Ar terminal +-Set the default terminal for new windows created in this session - the +-default value of the +-.Ev TERM +-environment variable. +-For +-.Nm +-to work correctly, this +-.Em must +-be set to +-.Ql screen +-or a derivative of it. + .It Xo Ic destroy-unattached + .Op Ic on | off + .Xc +diff --git a/tty.c b/tty.c +index ee52d03..f6db8e2 100644 +--- a/tty.c ++++ b/tty.c +@@ -34,6 +34,7 @@ + void tty_read_callback(struct bufferevent *, void *); + void tty_error_callback(struct bufferevent *, short, void *); + ++void tty_set_italics(struct tty *); + int tty_try_256(struct tty *, u_char, const char *); + + void tty_colours(struct tty *, const struct grid_cell *); +@@ -457,6 +458,21 @@ tty_putn(struct tty *tty, const void *buf, size_t len, u_int width) + } + + void ++tty_set_italics(struct tty *tty) ++{ ++ const char *s; ++ ++ if (tty_term_has(tty->term, TTYC_SITM)) { ++ s = options_get_string(&global_options, "default-terminal"); ++ if (strcmp(s, "screen") != 0 && strncmp(s, "screen-", 7) != 0) { ++ tty_putcode(tty, TTYC_SITM); ++ return; ++ } ++ } ++ tty_putcode(tty, TTYC_SMSO); ++} ++ ++void + tty_set_title(struct tty *tty, const char *title) + { + if (!tty_term_has(tty->term, TTYC_TSL) || +@@ -1396,12 +1412,8 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc, + tty_putcode(tty, TTYC_BOLD); + if (changed & GRID_ATTR_DIM) + tty_putcode(tty, TTYC_DIM); +- if (changed & GRID_ATTR_ITALICS) { +- if (tty_term_has(tty->term, TTYC_SITM)) +- tty_putcode(tty, TTYC_SITM); +- else +- tty_putcode(tty, TTYC_SMSO); +- } ++ if (changed & GRID_ATTR_ITALICS) ++ tty_set_italics(tty); + if (changed & GRID_ATTR_UNDERSCORE) + tty_putcode(tty, TTYC_SMUL); + if (changed & GRID_ATTR_BLINK)
