public inbox for cygwin-cvs@sourceware.org help / color / mirror / Atom feed
From: Corinna Vinschen <corinna@sourceware.org> To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: pty: Trigger redraw screen if ESC[?3h or ESC[?3l is sent. Date: Fri, 15 Nov 2019 12:08:00 -0000 [thread overview] Message-ID: <20191115120839.98622.qmail@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=1626569222066ee601f6c41b29efcc95202674b7 commit 1626569222066ee601f6c41b29efcc95202674b7 Author: Takashi Yano <takashi.yano@nifty.ne.jp> Date: Wed Nov 13 19:49:29 2019 +0900 Cygwin: pty: Trigger redraw screen if ESC[?3h or ESC[?3l is sent. - Pseudo console clears console screen buffer if ESC[?3h or ESC[?3l is sent. However, xterm/vt100 does not clear screen. This cause 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 Diff: --- 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 e02a8f4..f9c7c3a 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 (), &dwMode);
reply other threads:[~2019-11-15 12:08 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20191115120839.98622.qmail@sourceware.org \ --to=corinna@sourceware.org \ --cc=cygwin-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).