screen-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]