mirror of
https://github.com/vim/vim.git
synced 2025-10-02 05:04:20 -04:00
patch 8.0.1261: program in terminal window gets NL instead of CR
Problem: Program in terminal window gets NL instead of CR. (Lifepillar) Solution: Check the tty setup more often. (closes #1998)
This commit is contained in:
@@ -38,6 +38,8 @@
|
|||||||
* in tl_scrollback are no longer used.
|
* in tl_scrollback are no longer used.
|
||||||
*
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
|
* - Termdebug: issue #2154 might be avoided by adding -quiet to gdb?
|
||||||
|
* patch by Christian, 2017 Oct 23.
|
||||||
* - in GUI vertical split causes problems. Cursor is flickering. (Hirohito
|
* - in GUI vertical split causes problems. Cursor is flickering. (Hirohito
|
||||||
* Higashi, 2017 Sep 19)
|
* Higashi, 2017 Sep 19)
|
||||||
* - double click in Window toolbar starts Visual mode (but not always?).
|
* - double click in Window toolbar starts Visual mode (but not always?).
|
||||||
@@ -51,8 +53,6 @@
|
|||||||
* Also: #2223
|
* Also: #2223
|
||||||
* - implement term_setsize()
|
* - implement term_setsize()
|
||||||
* - Termdebug does not work when Vim build with mzscheme. gdb hangs.
|
* - Termdebug does not work when Vim build with mzscheme. gdb hangs.
|
||||||
* - Termdebug: issue #2154 might be avoided by adding -quiet to gdb?
|
|
||||||
* patch by Christian, 2017 Oct 23.
|
|
||||||
* - MS-Windows GUI: WinBar has tearoff item
|
* - MS-Windows GUI: WinBar has tearoff item
|
||||||
* - MS-Windows GUI: still need to type a key after shell exits? #1924
|
* - MS-Windows GUI: still need to type a key after shell exits? #1924
|
||||||
* - What to store in a session file? Shell at the prompt would be OK to
|
* - What to store in a session file? Shell at the prompt would be OK to
|
||||||
@@ -1535,6 +1535,9 @@ terminal_loop(int blocking)
|
|||||||
int c;
|
int c;
|
||||||
int termkey = 0;
|
int termkey = 0;
|
||||||
int ret;
|
int ret;
|
||||||
|
#ifdef UNIX
|
||||||
|
int tty_fd = curbuf->b_term->tl_job->jv_channel->ch_part[get_tty_part(curbuf->b_term)].ch_fd;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Remember the terminal we are sending keys to. However, the terminal
|
/* Remember the terminal we are sending keys to. However, the terminal
|
||||||
* might be closed while waiting for a character, e.g. typing "exit" in a
|
* might be closed while waiting for a character, e.g. typing "exit" in a
|
||||||
@@ -1547,26 +1550,6 @@ terminal_loop(int blocking)
|
|||||||
position_cursor(curwin, &curbuf->b_term->tl_cursor_pos);
|
position_cursor(curwin, &curbuf->b_term->tl_cursor_pos);
|
||||||
may_set_cursor_props(curbuf->b_term);
|
may_set_cursor_props(curbuf->b_term);
|
||||||
|
|
||||||
#ifdef UNIX
|
|
||||||
{
|
|
||||||
int part = get_tty_part(curbuf->b_term);
|
|
||||||
int fd = curbuf->b_term->tl_job->jv_channel->ch_part[part].ch_fd;
|
|
||||||
|
|
||||||
if (isatty(fd))
|
|
||||||
{
|
|
||||||
ttyinfo_T info;
|
|
||||||
|
|
||||||
/* Get the current backspace and enter characters of the pty. */
|
|
||||||
if (get_tty_info(fd, &info) == OK)
|
|
||||||
{
|
|
||||||
term_backspace_char = info.backspace;
|
|
||||||
term_enter_char = info.enter;
|
|
||||||
term_nl_does_cr = info.nl_does_cr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
while (blocking || vpeekc() != NUL)
|
while (blocking || vpeekc() != NUL)
|
||||||
{
|
{
|
||||||
/* TODO: skip screen update when handling a sequence of keys. */
|
/* TODO: skip screen update when handling a sequence of keys. */
|
||||||
@@ -1576,6 +1559,26 @@ terminal_loop(int blocking)
|
|||||||
break;
|
break;
|
||||||
update_cursor(curbuf->b_term, FALSE);
|
update_cursor(curbuf->b_term, FALSE);
|
||||||
|
|
||||||
|
#ifdef UNIX
|
||||||
|
/*
|
||||||
|
* The shell or another program may change the tty settings. Getting
|
||||||
|
* them for every typed character is a bit of overhead, but it's needed
|
||||||
|
* for the first CR typed, e.g. when Vim starts in a shell.
|
||||||
|
*/
|
||||||
|
if (isatty(tty_fd))
|
||||||
|
{
|
||||||
|
ttyinfo_T info;
|
||||||
|
|
||||||
|
/* Get the current backspace and enter characters of the pty. */
|
||||||
|
if (get_tty_info(tty_fd, &info) == OK)
|
||||||
|
{
|
||||||
|
term_backspace_char = info.backspace;
|
||||||
|
term_enter_char = info.enter;
|
||||||
|
term_nl_does_cr = info.nl_does_cr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
c = term_vgetc();
|
c = term_vgetc();
|
||||||
if (!term_use_loop())
|
if (!term_use_loop())
|
||||||
/* job finished while waiting for a character */
|
/* job finished while waiting for a character */
|
||||||
|
@@ -761,6 +761,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1261,
|
||||||
/**/
|
/**/
|
||||||
1260,
|
1260,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user