diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-11-04 20:12:14 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-11-04 20:12:14 +0100 |
commit | 1232624ae5b56c167c5982a2620f736c4bbc19ef (patch) | |
tree | b6f255dc8111cbe81e2d2fa43668ba25d4c676e8 | |
parent | ab8b1c14a31e36ae87cc7e13c4a75318d513fc7b (diff) | |
download | vim-git-1232624ae5b56c167c5982a2620f736c4bbc19ef.tar.gz |
patch 8.0.1261: program in terminal window gets NL instead of CRv8.0.1261
Problem: Program in terminal window gets NL instead of CR. (Lifepillar)
Solution: Check the tty setup more often. (closes #1998)
-rw-r--r-- | src/terminal.c | 37 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 22 insertions, 17 deletions
diff --git a/src/terminal.c b/src/terminal.c index 25c7d66cb..c6b3860d3 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -38,6 +38,8 @@ * in tl_scrollback are no longer used. * * 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 * Higashi, 2017 Sep 19) * - double click in Window toolbar starts Visual mode (but not always?). @@ -51,8 +53,6 @@ * Also: #2223 * - implement term_setsize() * - 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: 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 @@ -1535,6 +1535,9 @@ terminal_loop(int blocking) int c; int termkey = 0; 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 * might be closed while waiting for a character, e.g. typing "exit" in a @@ -1547,35 +1550,35 @@ terminal_loop(int blocking) position_cursor(curwin, &curbuf->b_term->tl_cursor_pos); may_set_cursor_props(curbuf->b_term); -#ifdef UNIX + while (blocking || vpeekc() != NUL) { - int part = get_tty_part(curbuf->b_term); - int fd = curbuf->b_term->tl_job->jv_channel->ch_part[part].ch_fd; + /* TODO: skip screen update when handling a sequence of keys. */ + /* Repeat redrawing in case a message is received while redrawing. */ + while (must_redraw != 0) + if (update_screen(0) == FAIL) + break; + update_cursor(curbuf->b_term, FALSE); - if (isatty(fd)) +#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(fd, &info) == OK) + 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 - while (blocking || vpeekc() != NUL) - { - /* TODO: skip screen update when handling a sequence of keys. */ - /* Repeat redrawing in case a message is received while redrawing. */ - while (must_redraw != 0) - if (update_screen(0) == FAIL) - break; - update_cursor(curbuf->b_term, FALSE); - c = term_vgetc(); if (!term_use_loop()) /* job finished while waiting for a character */ diff --git a/src/version.c b/src/version.c index 4fa6ea578..7d049d08f 100644 --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1261, +/**/ 1260, /**/ 1259, |