summaryrefslogtreecommitdiffstats
path: root/tty-term.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2011-05-08 19:53:06 +0000
committerNicholas Marriott <nicm@openbsd.org>2011-05-08 19:53:06 +0000
commit295ace682020769be8a6a6a02835099d93c392ef (patch)
treed55f3d1563aa55d9a5d9aa95eb4bdc29fed2afee /tty-term.c
parentb0a88ebeadd56ebcb0cdbe9967a869d361b96c6f (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.
Diffstat (limited to 'tty-term.c')
-rw-r--r--tty-term.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/tty-term.c b/tty-term.c
index 59a1bbba..f1e6d878 100644
--- a/tty-term.c
+++ b/tty-term.c
@@ -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: