summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-11-04 20:12:14 +0100
committerBram Moolenaar <Bram@vim.org>2017-11-04 20:12:14 +0100
commit1232624ae5b56c167c5982a2620f736c4bbc19ef (patch)
treeb6f255dc8111cbe81e2d2fa43668ba25d4c676e8
parentab8b1c14a31e36ae87cc7e13c4a75318d513fc7b (diff)
downloadvim-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.c37
-rw-r--r--src/version.c2
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,