[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[screen-devel] [PATCH 2/2] ansi: terminate xterm OSC response the same w
From: |
Lubomir Rintel |
Subject: |
[screen-devel] [PATCH 2/2] ansi: terminate xterm OSC response the same way as the request |
Date: |
Thu, 31 Aug 2017 16:27:56 +0200 |
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 <address@hidden>
---
src/ansi.c | 7 ++++++-
src/display.c | 6 +++---
src/display.h | 2 +-
src/process.c | 2 +-
4 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/src/ansi.c b/src/ansi.c
index b3e3889..cfc5d79 100644
--- a/src/ansi.c
+++ b/src/ansi.c
@@ -1216,6 +1216,11 @@ static int StringEnd(Window *win)
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 = win->w_state == STRESC ? "\033\\" : "\a";
win->w_state = LIT;
*win->w_stringp = '\0';
@@ -1263,7 +1268,7 @@ static int StringEnd(Window *win)
if (!D_CXT)
continue;
if (D_forecv->c_layer->l_bottom ==
&win->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 43546b0..7ece400 100644
--- a/src/display.c
+++ b/src/display.c
@@ -2124,7 +2124,7 @@ void ChangeScrollRegion(int newtop, int newbot)
#define WT_FLAG "2" /* change to "0" to set both title and icon */
-void SetXtermOSC(int i, char *s)
+void SetXtermOSC(int i, char *s, char *t)
{
static char *oscs[][2] = {
{WT_FLAG ";", "screen"}, /* set window title */
@@ -2148,14 +2148,14 @@ void SetXtermOSC(int i, char *s)
AddStr("\033]");
AddStr(oscs[i][0]);
AddStr(s);
- AddChar(7);
+ AddStr(t);
}
void 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/display.h b/src/display.h
index 967585c..6d1b8f2 100644
--- a/src/display.h
+++ b/src/display.h
@@ -359,7 +359,7 @@ void freetty (void);
void Resize_obuf (void);
void NukePending (void);
void ClearAllXtermOSC (void);
-void SetXtermOSC (int, char *);
+void SetXtermOSC (int, char *, char *);
void ResetIdle (void);
void KillBlanker (void);
void DisplaySleep1000 (int, int);
diff --git a/src/process.c b/src/process.c
index d8794cd..362bf12 100644
--- a/src/process.c
+++ b/src/process.c
@@ -5669,7 +5669,7 @@ void 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");
}
/*
--
2.13.5