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 <lkund...@v3.sk> --- 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