patch 9.1.0321: Garbled output on serial terminals with XON/XOFF flow control

Problem:  When used terminal with XON/XOFF flow control, vim tries to
          still make CTRL-S mapping available, which results in severe
          screen corruption, especially on large redraws, and even
          spurious inputs (John Tsiombikas)
Solution: Disallow CTRL-S mapping if such terminal is recognized.
          Don't remove IXON from the bitmask inversion.
          (Anton Sharonov)

*** When started like this:

    TERM=vt420 vim

:set termcap

    shows "t_xon=y"

map <C-S> :echo "abc"<CR>

    does nothing (after <C-S> output freezes and subsequent <C-Q>
    unfreezes it)

*** When started like this:

    TERM=xterm vim

:set termcap

    shows "t_xon="

map <C-S> :echo "abc"<CR>

    works (after <C-S> one see "abc" string echo-ed)

fixes: #12674
closes: #14542

Signed-off-by: Anton Sharonov <anton.sharonov@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Anton Sharonov
2024-04-14 20:02:24 +02:00
committed by Christian Brabandt
parent 4052474a1b
commit 49528da8a6
10 changed files with 60 additions and 6 deletions

View File

@ -115,10 +115,11 @@ enum SpecialKey
KS_SRI, // restore icon text
KS_FD, // disable focus event tracking
KS_FE, // enable focus event tracking
KS_CF // set terminal alternate font
KS_CF, // set terminal alternate font
KS_XON // terminal uses xon/xoff handshaking
};
#define KS_LAST KS_CF
#define KS_LAST KS_XON
/*
* the terminal capabilities are stored in this array
@ -224,6 +225,7 @@ extern char_u *(term_strings[]); // current terminal strings
#define T_SRI (TERM_STR(KS_SRI)) // restore icon text
#define T_FD (TERM_STR(KS_FD)) // disable focus event tracking
#define T_FE (TERM_STR(KS_FE)) // enable focus event tracking
#define T_XON (TERM_STR(KS_XON)) // terminal uses xon/xoff handshaking
typedef enum {
TMODE_COOK, // terminal mode for external cmds and Ex mode