This is the mail archive of the
cygwin-patches
mailing list for the Cygwin project.
[PATCH] Cygwin: pty: Disable clear screen for ssh sessions with -t option.
- From: Takashi Yano <takashi dot yano at nifty dot ne dot jp>
- To: cygwin-patches at cygwin dot com
- Cc: Takashi Yano <takashi dot yano at nifty dot ne dot jp>
- Date: Fri, 18 Oct 2019 20:37:21 +0900
- Subject: [PATCH] Cygwin: pty: Disable clear screen for ssh sessions with -t option.
- Dkim-filter: OpenDKIM Filter v2.10.3 conuserg-06.nifty.com x9IBbMtc011786
---
winsup/cygwin/fhandler_tty.cc | 21 ++++++++++++++++++++-
winsup/cygwin/tty.cc | 1 +
winsup/cygwin/tty.h | 1 +
3 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc
index da6119dfb..163f93f35 100644
--- a/winsup/cygwin/fhandler_tty.cc
+++ b/winsup/cygwin/fhandler_tty.cc
@@ -1305,6 +1305,20 @@ fhandler_pty_slave::write (const void *ptr, size_t len)
if (bg <= bg_eof)
return (ssize_t) bg;
+ if (get_ttyp ()->need_clear_screen_on_write)
+ {
+ const char *term = getenv ("TERM");
+ if (term && strcmp (term, "dumb") && !strstr (term, "emacs") &&
+ wcsstr (myself->progname, L"\\usr\\sbin\\sshd.exe"))
+ {
+ /* FIXME: Clearing sequence may not be "^[[H^[[J"
+ depending on the terminal type. */
+ DWORD n;
+ WriteFile (get_output_handle_cyg (), "\033[H\033[J", 6, &n, NULL);
+ }
+ get_ttyp ()->need_clear_screen_on_write = false;
+ }
+
termios_printf ("pty%d, write(%p, %lu)", get_minor (), ptr, len);
push_process_state process_state (PID_TTYOU);
@@ -2668,7 +2682,12 @@ fhandler_pty_slave::fixup_after_attach (bool native_maybe, int fd_set)
if (get_ttyp ()->num_pcon_attached_slaves == 0
&& !ALWAYS_USE_PCON)
/* Assume this is the first process using this pty slave. */
- get_ttyp ()->need_clear_screen = true;
+ {
+ if (wcsstr (myself->progname, L"\\usr\\sbin\\sshd.exe"))
+ get_ttyp ()->need_clear_screen_on_write = true;
+ else
+ get_ttyp ()->need_clear_screen = true;
+ }
get_ttyp ()->num_pcon_attached_slaves ++;
}
diff --git a/winsup/cygwin/tty.cc b/winsup/cygwin/tty.cc
index 460153cdb..1595d0278 100644
--- a/winsup/cygwin/tty.cc
+++ b/winsup/cygwin/tty.cc
@@ -245,6 +245,7 @@ tty::init ()
num_pcon_attached_slaves = 0;
term_code_page = 0;
need_clear_screen = false;
+ need_clear_screen_on_write = false;
}
HANDLE
diff --git a/winsup/cygwin/tty.h b/winsup/cygwin/tty.h
index 927d7afd9..c7aeef85b 100644
--- a/winsup/cygwin/tty.h
+++ b/winsup/cygwin/tty.h
@@ -106,6 +106,7 @@ private:
int num_pcon_attached_slaves;
UINT term_code_page;
bool need_clear_screen;
+ bool need_clear_screen_on_write;
public:
HANDLE from_master () const { return _from_master; }
--
2.21.0