summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2018-09-10 19:34:03 +0200
committerAmadeusz Sławiński <amade@asmblr.net>2018-11-18 16:00:33 +0100
commit908458c7c3320697ec44ce0e402d5818699d993a (patch)
tree0c71dbc6e22bb517b2057c62082e96d135538405
parentc5db181b6e017cfccb8d7842ce140e59294d9f62 (diff)
downloadscreen-908458c7c3320697ec44ce0e402d5818699d993a.tar.gz
ansi: terminate xterm OSC response the same way as the request
There's two way to terinate an OSC: ST (\033\\) or BEL (\a). Use whatever the original request used instead of always forcing a BEL. Signed-off-by: Lubomir Rintel <lkundrak@v3.sk> (cherry picked from commit 11a74b838216bf3c90eb4c3369592f2632838095) Signed-off-by: Amadeusz Sławiński <amade@asmblr.net
-rw-r--r--src/ansi.c7
-rw-r--r--src/display.c7
-rw-r--r--src/extern.h2
-rw-r--r--src/process.c2
4 files changed, 12 insertions, 6 deletions
diff --git a/src/ansi.c b/src/ansi.c
index 28e3529..e0ba627 100644
--- a/src/ansi.c
+++ b/src/ansi.c
@@ -1522,6 +1522,11 @@ StringEnd()
struct canvas *cv;
char *p;
int typ;
+ char *t;
+
+ /* There's two ways to terminate an OSC. If we've seen an ESC
+ * then it's been ST otherwise it's BEL. */
+ t = curr->w_state == STRESC ? "\033\\" : "\a";
curr->w_state = LIT;
*curr->w_stringp = '\0';
@@ -1579,7 +1584,7 @@ StringEnd()
if (!D_CXT)
continue;
if (D_forecv->c_layer->l_bottom == &curr->w_layer)
- SetXtermOSC(typ2, p);
+ SetXtermOSC(typ2, p, t);
if ((typ2 == 3 || typ2 == 4) && D_xtermosc[typ2])
Redisplay(0);
if (typ == 11 && !strcmp("?", p))
diff --git a/src/display.c b/src/display.c
index dbc7d74..79155b8 100644
--- a/src/display.c
+++ b/src/display.c
@@ -2933,9 +2933,10 @@ int newtop, newbot;
#define WT_FLAG "2" /* change to "0" to set both title and icon */
void
-SetXtermOSC(i, s)
+SetXtermOSC(i, s, t)
int i;
char *s;
+char *t;
{
static char *oscs[][2] = {
{ WT_FLAG ";", "screen" }, /* set window title */
@@ -2960,7 +2961,7 @@ char *s;
AddStr("\033]");
AddStr(oscs[i][0]);
AddStr(s);
- AddChar(7);
+ AddStr(t);
}
void
@@ -2968,7 +2969,7 @@ ClearAllXtermOSC()
{
int i;
for (i = 4; i >= 0; i--)
- SetXtermOSC(i, 0);
+ SetXtermOSC(i, 0, "\a");
if (D_xtermosc[0])
AddStr("\033[23;" WT_FLAG "t"); /* unstack titles (xterm patch #251) */
}
diff --git a/src/extern.h b/src/extern.h
index 0701bf5..bb7d3fb 100644
--- a/src/extern.h
+++ b/src/extern.h
@@ -308,7 +308,7 @@ extern void NukePending __P((void));
#endif
#ifdef RXVT_OSC
extern void ClearAllXtermOSC __P((void));
-extern void SetXtermOSC __P((int, char *));
+extern void SetXtermOSC __P((int, char *, char *));
#endif
#ifdef COLOR
extern int color256to16 __P((int));
diff --git a/src/process.c b/src/process.c
index 3c7cce8..dcb3989 100644
--- a/src/process.c
+++ b/src/process.c
@@ -7191,7 +7191,7 @@ RefreshXtermOSC()
p = Layer2Window(D_forecv->c_layer);
for (i = 4; i >=0; i--)
- SetXtermOSC(i, p ? p->w_xtermosc[i] : 0);
+ SetXtermOSC(i, p ? p->w_xtermosc[i] : 0, "\a");
}
#endif