Re: [PATCH] Cygwin: pty: Trigger redraw screen if ESC[?3h or ESC[?3l is sent.
On Nov 14 20:51, Takashi Yano wrote: > Hi Corinna, > > On Thu, 14 Nov 2019 10:35:41 +0100 > Corinna Vinschen wrote: > > This is only correct if xterm hasn't been started with the c132 widget > > resource set to 'true'. This resource specifies whether the ESC[?3h > > and ESC[?3l ESC sequences are honored or not. The default is 'false'. > > > > However, if you specify the c132 resource, or if you start xterm > > with the commandline option -132, it will resize when these sequences > > are sent. And here's the joke: The resize also clears the screen > > in xterm. > > Thanks for the information. > > > My question now is, does this change anything in terms of the below > > code, or is it still valid as is? > > It still valid as is. Bacause, if -132 option is specified and the > real sreen is cleared by ESC[?3h and ESC[?3l, mismatch does not occur. > In this case, this patch tries to synchronize the real screen with > the console screen buffer in spite that they are already synchronized, > but there should be no side effects. Great, thanks. Patch pushed. Thanks, Corinna -- Corinna Vinschen Cygwin Maintainer signature.asc Description: PGP signature
Re: [PATCH] Cygwin: pty: Trigger redraw screen if ESC[?3h or ESC[?3l is sent.
Hi Corinna, On Thu, 14 Nov 2019 10:35:41 +0100 Corinna Vinschen wrote: > This is only correct if xterm hasn't been started with the c132 widget > resource set to 'true'. This resource specifies whether the ESC[?3h > and ESC[?3l ESC sequences are honored or not. The default is 'false'. > > However, if you specify the c132 resource, or if you start xterm > with the commandline option -132, it will resize when these sequences > are sent. And here's the joke: The resize also clears the screen > in xterm. Thanks for the information. > My question now is, does this change anything in terms of the below > code, or is it still valid as is? It still valid as is. Bacause, if -132 option is specified and the real sreen is cleared by ESC[?3h and ESC[?3l, mismatch does not occur. In this case, this patch tries to synchronize the real screen with the console screen buffer in spite that they are already synchronized, but there should be no side effects. -- Takashi Yano
Re: [PATCH] Cygwin: pty: Trigger redraw screen if ESC[?3h or ESC[?3l is sent.
On Nov 14 10:35, Corinna Vinschen wrote: > Hi Takashi, > > On Nov 13 19:49, Takashi Yano wrote: > > - Pseudo console clears console screen buffer if ESC[?3h or ESC[?3l > > is sent. However, xterm/vt100 does not clear screen. This cause Btw., this is not pseudo console behaviour per se, but the standard behaviour of the new Windows console with VT ESC sequences turned on. You can try this in a normal console under Cygwin. It will clear the screen after ESC[?3h, but it won't actually resize the console to switch into 132 column mode. This probably won't matter much for the problem at hand, I'm just writing this so this is mentioned somewhere searchable. Corinna > > This is only correct if xterm hasn't been started with the c132 widget > resource set to 'true'. This resource specifies whether the ESC[?3h > and ESC[?3l ESC sequences are honored or not. The default is 'false'. > > However, if you specify the c132 resource, or if you start xterm > with the commandline option -132, it will resize when these sequences > are sent. And here's the joke: The resize also clears the screen > in xterm. > > My question now is, does this change anything in terms of the below > code, or is it still valid as is? > > > Thanks, > Corinna > [...] -- Corinna Vinschen Cygwin Maintainer signature.asc Description: PGP signature
Re: [PATCH] Cygwin: pty: Trigger redraw screen if ESC[?3h or ESC[?3l is sent.
Hi Takashi, On Nov 13 19:49, Takashi Yano wrote: > - Pseudo console clears console screen buffer if ESC[?3h or ESC[?3l > is sent. However, xterm/vt100 does not clear screen. This cause This is only correct if xterm hasn't been started with the c132 widget resource set to 'true'. This resource specifies whether the ESC[?3h and ESC[?3l ESC sequences are honored or not. The default is 'false'. However, if you specify the c132 resource, or if you start xterm with the commandline option -132, it will resize when these sequences are sent. And here's the joke: The resize also clears the screen in xterm. My question now is, does this change anything in terms of the below code, or is it still valid as is? Thanks, Corinna > mismatch between real screen and console screen buffer. Therefore, > this patch triggers redraw screen in that situation so that the > synchronization is done on the next execution of native app. > This solves the problem reported in: > https://www.cygwin.com/ml/cygwin-patches/2019-q4/msg00116.html > --- > winsup/cygwin/fhandler_tty.cc | 22 ++ > 1 file changed, 22 insertions(+) > > diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc > index e02a8f43b..f9c7c3ade 100644 > --- a/winsup/cygwin/fhandler_tty.cc > +++ b/winsup/cygwin/fhandler_tty.cc > @@ -1255,6 +1255,28 @@ fhandler_pty_slave::push_to_pcon_screenbuffer (const > char *ptr, size_t len) >memmove (p0, p0+4, nlen - (p0+4 - buf)); >nlen -= 4; > } > + > + /* If the ESC sequence ESC[?3h or ESC[?3l which clears console screen > + buffer is pushed, set need_redraw_screen to trigger redraw screen. */ > + p0 = buf; > + while ((p0 = (char *) memmem (p0, nlen - (p0 - buf), "\033[?", 3))) > +{ > + p0 += 3; > + while (p0 < buf + nlen && *p0 != 'h' && *p0 != 'l') > + { > + int arg = 0; > + while (p0 < buf + nlen && isdigit (*p0)) > + arg = arg * 10 + (*p0 ++) - '0'; > + if (arg == 3) > + get_ttyp ()->need_redraw_screen = true; > + if (p0 < buf + nlen && *p0 == ';') > + p0 ++; > + } > + p0 ++; > + if (p0 >= buf + nlen) > + break; > +} > + >DWORD dwMode, flags; >flags = ENABLE_VIRTUAL_TERMINAL_PROCESSING; >GetConsoleMode (get_output_handle (), ); > -- > 2.21.0 -- Corinna Vinschen Cygwin Maintainer signature.asc Description: PGP signature