Cygwin: pty: Disable clear screen on new pty if TERM=dumb or emacs*.

- Pseudo console support introduced by commit
  169d65a577 shows garbage ^[[H^[[J in
  some of emacs screens. These screens do not handle ANSI escape
  sequences. Therefore, clear screen is disabled on these screens.
This commit is contained in:
Takashi Yano 2019-09-05 09:24:26 +09:00 committed by Corinna Vinschen
parent d4045fdbef
commit 433c6b8e0a
3 changed files with 16 additions and 5 deletions

View File

@ -962,6 +962,19 @@ skip_console_setting:
void
fhandler_pty_slave::reset_switch_to_pcon (void)
{
if (get_ttyp ()->need_clear_screen)
{
const char *term = getenv ("TERM");
if (term && strcmp (term, "dumb") && !strstr (term, "emacs"))
{
/* 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 = false;
}
if (ALWAYS_USE_PCON)
return;
if (isHybrid)
@ -2798,14 +2811,10 @@ fhandler_pty_slave::fixup_after_attach (bool native_maybe)
/* Clear screen to synchronize pseudo console screen buffer
with real terminal. This is necessary because pseudo
console screen buffer is empty at start. */
/* FIXME: Clearing sequence may not be "^[[H^[[J"
depending on the terminal type. */
DWORD n;
if (get_ttyp ()->num_pcon_attached_slaves == 0
&& !ALWAYS_USE_PCON)
/* Assume this is the first process using this pty slave. */
WriteFile (get_output_handle_cyg (),
"\033[H\033[J", 6, &n, NULL);
get_ttyp ()->need_clear_screen = true;
get_ttyp ()->num_pcon_attached_slaves ++;
}

View File

@ -243,6 +243,7 @@ tty::init ()
pcon_pid = 0;
num_pcon_attached_slaves = 0;
TermCodePage = 20127; /* ASCII */
need_clear_screen = false;
}
HANDLE

View File

@ -104,6 +104,7 @@ private:
pid_t pcon_pid;
int num_pcon_attached_slaves;
UINT TermCodePage;
bool need_clear_screen;
public:
HANDLE from_master () const { return _from_master; }