Sync OpenBSD patchset 904:

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.
pull/1/head
Tiago Cunha 2011-05-18 20:28:43 +00:00
parent 046e8363b4
commit 4fcbf4b872
5 changed files with 34 additions and 17 deletions

View File

@ -1,4 +1,4 @@
/* $Id: options-table.c,v 1.7 2011-04-18 21:07:58 nicm Exp $ */ /* $Id: options-table.c,v 1.8 2011-05-18 20:28:40 tcunha Exp $ */
/* /*
* Copyright (c) 2011 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2011 Nicholas Marriott <nicm@users.sourceforge.net>
@ -354,7 +354,7 @@ const struct options_table_entry session_options_table[] = {
{ .name = "terminal-overrides", { .name = "terminal-overrides",
.type = OPTIONS_TABLE_STRING, .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", { .name = "update-environment",

6
tmux.1
View File

@ -1,4 +1,4 @@
.\" $Id: tmux.1,v 1.310 2011-04-25 20:35:22 tcunha Exp $ .\" $Id: tmux.1,v 1.311 2011-05-18 20:28:40 tcunha Exp $
.\" .\"
.\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> .\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
.\" .\"
@ -14,7 +14,7 @@
.\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
.\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" 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 .Dt TMUX 1
.Os .Os
.Sh NAME .Sh NAME
@ -2149,7 +2149,7 @@ The default value forcibly corrects the
.Ql colors .Ql colors
entry for terminals which support 88 or 256 colours: entry for terminals which support 88 or 256 colours:
.Bd -literal -offset indent .Bd -literal -offset indent
"*88col*:colors=88,*256col*:colors=256" "*88col*:colors=88,*256col*:colors=256,xterm*:XT"
.Ed .Ed
.It Ic update-environment Ar variables .It Ic update-environment Ar variables
Set a space-separated string containing a list of environment variables to be Set a space-separated string containing a list of environment variables to be

9
tmux.h
View File

@ -1,4 +1,4 @@
/* $Id: tmux.h,v 1.621 2011-04-25 20:33:42 tcunha Exp $ */ /* $Id: tmux.h,v 1.622 2011-05-18 20:28:41 tcunha Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -201,6 +201,7 @@ enum tty_code_code {
TTYC_EL, /* clr_eol, ce */ TTYC_EL, /* clr_eol, ce */
TTYC_EL1, /* clr_bol, cb */ TTYC_EL1, /* clr_bol, cb */
TTYC_ENACS, /* ena_acs, eA */ TTYC_ENACS, /* ena_acs, eA */
TTYC_FSL, /* from_status_line, fsl */
TTYC_HOME, /* cursor_home, ho */ TTYC_HOME, /* cursor_home, ho */
TTYC_HPA, /* column_address, ch */ TTYC_HPA, /* column_address, ch */
TTYC_ICH, /* parm_ich, IC */ TTYC_ICH, /* parm_ich, IC */
@ -313,17 +314,19 @@ enum tty_code_code {
TTYC_SETAB, /* set_a_background, AB */ TTYC_SETAB, /* set_a_background, AB */
TTYC_SETAF, /* set_a_foreground, AF */ TTYC_SETAF, /* set_a_foreground, AF */
TTYC_SGR0, /* exit_attribute_mode, me */ TTYC_SGR0, /* exit_attribute_mode, me */
TTYC_SITM, /* enter_italics_mode, it */
TTYC_SMACS, /* enter_alt_charset_mode, as */ TTYC_SMACS, /* enter_alt_charset_mode, as */
TTYC_SMCUP, /* enter_ca_mode, ti */ TTYC_SMCUP, /* enter_ca_mode, ti */
TTYC_SMIR, /* enter_insert_mode, im */ TTYC_SMIR, /* enter_insert_mode, im */
TTYC_SMKX, /* keypad_xmit, ks */ TTYC_SMKX, /* keypad_xmit, ks */
TTYC_SMSO, /* enter_standout_mode, so */ TTYC_SMSO, /* enter_standout_mode, so */
TTYC_SMUL, /* enter_underline_mode, us */ TTYC_SMUL, /* enter_underline_mode, us */
TTYC_SITM, /* enter_italics_mode, it */ TTYC_TSL, /* to_status_line, tsl */
TTYC_VPA, /* row_address, cv */ TTYC_VPA, /* row_address, cv */
TTYC_XENL, /* eat_newline_glitch, xn */ 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. */ /* Termcap types. */
enum tty_code_type { enum tty_code_type {

View File

@ -1,4 +1,4 @@
/* $Id: tty-term.c,v 1.47 2011-04-09 07:48:58 nicm Exp $ */ /* $Id: tty-term.c,v 1.48 2011-05-18 20:28:43 tcunha Exp $ */
/* /*
* Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
@ -63,6 +63,7 @@ const struct tty_term_code_entry tty_term_codes[NTTYCODE] = {
{ TTYC_EL, TTYCODE_STRING, "el" }, { TTYC_EL, TTYCODE_STRING, "el" },
{ TTYC_EL1, TTYCODE_STRING, "el1" }, { TTYC_EL1, TTYCODE_STRING, "el1" },
{ TTYC_ENACS, TTYCODE_STRING, "enacs" }, { TTYC_ENACS, TTYCODE_STRING, "enacs" },
{ TTYC_FSL, TTYCODE_STRING, "fsl" },
{ TTYC_HOME, TTYCODE_STRING, "home" }, { TTYC_HOME, TTYCODE_STRING, "home" },
{ TTYC_HPA, TTYCODE_STRING, "hpa" }, { TTYC_HPA, TTYCODE_STRING, "hpa" },
{ TTYC_ICH, TTYCODE_STRING, "ich" }, { TTYC_ICH, TTYCODE_STRING, "ich" },
@ -175,15 +176,17 @@ const struct tty_term_code_entry tty_term_codes[NTTYCODE] = {
{ TTYC_SETAB, TTYCODE_STRING, "setab" }, { TTYC_SETAB, TTYCODE_STRING, "setab" },
{ TTYC_SETAF, TTYCODE_STRING, "setaf" }, { TTYC_SETAF, TTYCODE_STRING, "setaf" },
{ TTYC_SGR0, TTYCODE_STRING, "sgr0" }, { TTYC_SGR0, TTYCODE_STRING, "sgr0" },
{ TTYC_SITM, TTYCODE_STRING, "sitm" },
{ TTYC_SMACS, TTYCODE_STRING, "smacs" }, { TTYC_SMACS, TTYCODE_STRING, "smacs" },
{ TTYC_SMCUP, TTYCODE_STRING, "smcup" }, { TTYC_SMCUP, TTYCODE_STRING, "smcup" },
{ TTYC_SMIR, TTYCODE_STRING, "smir" }, { TTYC_SMIR, TTYCODE_STRING, "smir" },
{ TTYC_SMKX, TTYCODE_STRING, "smkx" }, { TTYC_SMKX, TTYCODE_STRING, "smkx" },
{ TTYC_SMSO, TTYCODE_STRING, "smso" }, { TTYC_SMSO, TTYCODE_STRING, "smso" },
{ TTYC_SMUL, TTYCODE_STRING, "smul" }, { TTYC_SMUL, TTYCODE_STRING, "smul" },
{ TTYC_SITM, TTYCODE_STRING, "sitm" }, { TTYC_TSL, TTYCODE_STRING, "tsl" },
{ TTYC_VPA, TTYCODE_STRING, "vpa" }, { TTYC_VPA, TTYCODE_STRING, "vpa" },
{ TTYC_XENL, TTYCODE_FLAG, "xenl" }, { TTYC_XENL, TTYCODE_FLAG, "xenl" },
{ TTYC_XT, TTYCODE_FLAG, "XT" },
}; };
char * char *
@ -255,7 +258,7 @@ tty_term_override(struct tty_term *term, const char *overrides)
entstr[strlen(entstr) - 1] = '\0'; entstr[strlen(entstr) - 1] = '\0';
removeflag = 1; removeflag = 1;
} else } else
continue; val = xstrdup("");
for (i = 0; i < NTTYCODE; i++) { for (i = 0; i < NTTYCODE; i++) {
ent = &tty_term_codes[i]; ent = &tty_term_codes[i];
@ -428,6 +431,18 @@ tty_term_find(char *name, int fd, const char *overrides, char **cause)
for (; acs[0] != '\0' && acs[1] != '\0'; acs += 2) for (; acs[0] != '\0' && acs[1] != '\0'; acs += 2)
term->acs[(u_char) acs[0]][0] = acs[1]; 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); return (term);
error: error:

11
tty.c
View File

@ -1,4 +1,4 @@
/* $Id: tty.c,v 1.208 2011-04-09 07:48:58 nicm Exp $ */ /* $Id: tty.c,v 1.209 2011-05-18 20:28:43 tcunha Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -369,14 +369,13 @@ tty_pututf8(struct tty *tty, const struct grid_utf8 *gu)
void void
tty_set_title(struct tty *tty, const char *title) tty_set_title(struct tty *tty, const char *title)
{ {
if (strstr(tty->termname, "xterm") == NULL && if (!tty_term_has(tty->term, TTYC_TSL) ||
strstr(tty->termname, "rxvt") == NULL && !tty_term_has(tty->term, TTYC_FSL))
strcmp(tty->termname, "screen") != 0)
return; return;
tty_puts(tty, "\033]0;"); tty_putcode(tty, TTYC_TSL);
tty_puts(tty, title); tty_puts(tty, title);
tty_putc(tty, '\007'); tty_putcode(tty, TTYC_FSL);
} }
void void