summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2011-05-08 19:53:09 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2011-05-08 19:53:09 +0000
commit9f2d1ec07419dca4c66f639ab37ac5bcc7adba04 (patch)
treeb3a159f1ee2f57aa8bd3783a208b99f304269102
parentccf47d1672cad6888d700a022f431f1ee8d54a95 (diff)
Use the tsl and fsl terminfo(5) capabilities to update terminal title
and automatically fill them in on terminals with the XT capability (which means their title setting is xterm-compatible). From hsim at gmx.li.
-rw-r--r--usr.bin/tmux/options-table.c4
-rw-r--r--usr.bin/tmux/tmux.16
-rw-r--r--usr.bin/tmux/tmux.h9
-rw-r--r--usr.bin/tmux/tty-term.c21
-rw-r--r--usr.bin/tmux/tty.c11
5 files changed, 34 insertions, 17 deletions
diff --git a/usr.bin/tmux/options-table.c b/usr.bin/tmux/options-table.c
index 509cca04b74..98af34420fd 100644
--- a/usr.bin/tmux/options-table.c
+++ b/usr.bin/tmux/options-table.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: options-table.c,v 1.5 2011/04/18 19:49:05 nicm Exp $ */
+/* $OpenBSD: options-table.c,v 1.6 2011/05/08 19:53:06 nicm Exp $ */
/*
* Copyright (c) 2011 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -355,7 +355,7 @@ const struct options_table_entry session_options_table[] = {
{ .name = "terminal-overrides",
.type = OPTIONS_TABLE_STRING,
- .default_str = "*88col*:colors=88,*256col*:colors=256"
+ .default_str = "*88col*:colors=88,*256col*:colors=256,xterm*:XT"
},
{ .name = "update-environment",
diff --git a/usr.bin/tmux/tmux.1 b/usr.bin/tmux/tmux.1
index b5388e49587..2f7763273ed 100644
--- a/usr.bin/tmux/tmux.1
+++ b/usr.bin/tmux/tmux.1
@@ -1,4 +1,4 @@
-.\" $OpenBSD: tmux.1,v 1.224 2011/04/24 21:32:07 nicm Exp $
+.\" $OpenBSD: tmux.1,v 1.225 2011/05/08 19:53:06 nicm Exp $
.\"
.\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
.\"
@@ -14,7 +14,7 @@
.\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
.\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: April 24 2011 $
+.Dd $Mdocdate: May 8 2011 $
.Dt TMUX 1
.Os
.Sh NAME
@@ -2145,7 +2145,7 @@ The default value forcibly corrects the
.Ql colors
entry for terminals which support 88 or 256 colours:
.Bd -literal -offset indent
-"*88col*:colors=88,*256col*:colors=256"
+"*88col*:colors=88,*256col*:colors=256,xterm*:XT"
.Ed
.It Ic update-environment Ar variables
Set a space-separated string containing a list of environment variables to be
diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h
index 007ff0659ef..4ee800443d9 100644
--- a/usr.bin/tmux/tmux.h
+++ b/usr.bin/tmux/tmux.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.282 2011/04/19 21:31:33 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.283 2011/05/08 19:53:07 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -205,6 +205,7 @@ enum tty_code_code {
TTYC_EL, /* clr_eol, ce */
TTYC_EL1, /* clr_bol, cb */
TTYC_ENACS, /* ena_acs, eA */
+ TTYC_FSL, /* from_status_line, fsl */
TTYC_HOME, /* cursor_home, ho */
TTYC_HPA, /* column_address, ch */
TTYC_ICH, /* parm_ich, IC */
@@ -317,17 +318,19 @@ enum tty_code_code {
TTYC_SETAB, /* set_a_background, AB */
TTYC_SETAF, /* set_a_foreground, AF */
TTYC_SGR0, /* exit_attribute_mode, me */
+ TTYC_SITM, /* enter_italics_mode, it */
TTYC_SMACS, /* enter_alt_charset_mode, as */
TTYC_SMCUP, /* enter_ca_mode, ti */
TTYC_SMIR, /* enter_insert_mode, im */
TTYC_SMKX, /* keypad_xmit, ks */
TTYC_SMSO, /* enter_standout_mode, so */
TTYC_SMUL, /* enter_underline_mode, us */
- TTYC_SITM, /* enter_italics_mode, it */
+ TTYC_TSL, /* to_status_line, tsl */
TTYC_VPA, /* row_address, cv */
TTYC_XENL, /* eat_newline_glitch, xn */
+ TTYC_XT, /* xterm(1)-compatible title, XT */
};
-#define NTTYCODE (TTYC_XENL + 1)
+#define NTTYCODE (TTYC_XT + 1)
/* Termcap types. */
enum tty_code_type {
diff --git a/usr.bin/tmux/tty-term.c b/usr.bin/tmux/tty-term.c
index 2073d2e4f09..93b912ad159 100644
--- a/usr.bin/tmux/tty-term.c
+++ b/usr.bin/tmux/tty-term.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tty-term.c,v 1.21 2011/04/09 07:48:08 nicm Exp $ */
+/* $OpenBSD: tty-term.c,v 1.22 2011/05/08 19:53:08 nicm Exp $ */
/*
* Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -60,6 +60,7 @@ const struct tty_term_code_entry tty_term_codes[NTTYCODE] = {
{ TTYC_EL, TTYCODE_STRING, "el" },
{ TTYC_EL1, TTYCODE_STRING, "el1" },
{ TTYC_ENACS, TTYCODE_STRING, "enacs" },
+ { TTYC_FSL, TTYCODE_STRING, "fsl" },
{ TTYC_HOME, TTYCODE_STRING, "home" },
{ TTYC_HPA, TTYCODE_STRING, "hpa" },
{ TTYC_ICH, TTYCODE_STRING, "ich" },
@@ -172,15 +173,17 @@ const struct tty_term_code_entry tty_term_codes[NTTYCODE] = {
{ TTYC_SETAB, TTYCODE_STRING, "setab" },
{ TTYC_SETAF, TTYCODE_STRING, "setaf" },
{ TTYC_SGR0, TTYCODE_STRING, "sgr0" },
+ { TTYC_SITM, TTYCODE_STRING, "sitm" },
{ TTYC_SMACS, TTYCODE_STRING, "smacs" },
{ TTYC_SMCUP, TTYCODE_STRING, "smcup" },
{ TTYC_SMIR, TTYCODE_STRING, "smir" },
{ TTYC_SMKX, TTYCODE_STRING, "smkx" },
{ TTYC_SMSO, TTYCODE_STRING, "smso" },
{ TTYC_SMUL, TTYCODE_STRING, "smul" },
- { TTYC_SITM, TTYCODE_STRING, "sitm" },
+ { TTYC_TSL, TTYCODE_STRING, "tsl" },
{ TTYC_VPA, TTYCODE_STRING, "vpa" },
{ TTYC_XENL, TTYCODE_FLAG, "xenl" },
+ { TTYC_XT, TTYCODE_FLAG, "XT" },
};
char *
@@ -252,7 +255,7 @@ tty_term_override(struct tty_term *term, const char *overrides)
entstr[strlen(entstr) - 1] = '\0';
removeflag = 1;
} else
- continue;
+ val = xstrdup("");
for (i = 0; i < NTTYCODE; i++) {
ent = &tty_term_codes[i];
@@ -423,6 +426,18 @@ tty_term_find(char *name, int fd, const char *overrides, char **cause)
for (; acs[0] != '\0' && acs[1] != '\0'; acs += 2)
term->acs[(u_char) acs[0]][0] = acs[1];
+ /* On terminals with xterm titles (XT), fill in tsl and fsl. */
+ if (tty_term_flag(term, TTYC_XT) &&
+ !tty_term_has(term, TTYC_TSL) &&
+ !tty_term_has(term, TTYC_FSL)) {
+ code = &term->codes[TTYC_TSL];
+ code->value.string = xstrdup("\033]0;");
+ code->type = TTYCODE_STRING;
+ code = &term->codes[TTYC_FSL];
+ code->value.string = xstrdup("\007");
+ code->type = TTYCODE_STRING;
+ }
+
return (term);
error:
diff --git a/usr.bin/tmux/tty.c b/usr.bin/tmux/tty.c
index d26af944bd6..d1fe3acce08 100644
--- a/usr.bin/tmux/tty.c
+++ b/usr.bin/tmux/tty.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tty.c,v 1.104 2011/04/09 07:48:08 nicm Exp $ */
+/* $OpenBSD: tty.c,v 1.105 2011/05/08 19:53:08 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -369,14 +369,13 @@ tty_pututf8(struct tty *tty, const struct grid_utf8 *gu)
void
tty_set_title(struct tty *tty, const char *title)
{
- if (strstr(tty->termname, "xterm") == NULL &&
- strstr(tty->termname, "rxvt") == NULL &&
- strcmp(tty->termname, "screen") != 0)
+ if (!tty_term_has(tty->term, TTYC_TSL) ||
+ !tty_term_has(tty->term, TTYC_FSL))
return;
- tty_puts(tty, "\033]0;");
+ tty_putcode(tty, TTYC_TSL);
tty_puts(tty, title);
- tty_putc(tty, '\007');
+ tty_putcode(tty, TTYC_FSL);
}
void