Re: [PATCH] Cygwin: pty: Trigger redraw screen if ESC[?3h or ESC[?3l is sent.

2019-11-15 Thread Corinna Vinschen
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.

2019-11-14 Thread Takashi Yano
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.

2019-11-14 Thread Corinna Vinschen
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.

2019-11-14 Thread Corinna Vinschen
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