changeset 11778:e8005055f845 v8.0.0771

patch 8.0.0771: cursor in terminal window not always updated in GUI commit https://github.com/vim/vim/commit/1c84493bbeda1d58b70e9b2b7723ce92fb2a49d4 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Jul 24 23:36:41 2017 +0200 patch 8.0.0771: cursor in terminal window not always updated in GUI Problem: Cursor in a terminal window not always updated in the GUI. Solution: Call gui_update_cursor(). (Yasuhiro Matsumoto, closes https://github.com/vim/vim/issues/1868)
author Christian Brabandt <cb@256bit.org>
date Mon, 24 Jul 2017 23:45:03 +0200
parents 22c7384b8a9e
children 8c6f35d0ee28
files src/terminal.c src/version.c
diffstat 2 files changed, 20 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -33,7 +33,8 @@
  * while, if the terminal window is visible, the screen contents is drawn.
  *
  * TODO:
- * - do not store terminal buffer in viminfo
+ * - include functions from #1871
+ * - do not store terminal buffer in viminfo.  Or prefix term:// ?
  * - Add a scrollback buffer (contains lines to scroll off the top).
  *   Can use the buf_T lines, store attributes somewhere else?
  * - When the job ends:
@@ -314,6 +315,18 @@ term_write_job_output(term_T *term, char
     vterm_screen_flush_damage(vterm_obtain_screen(vterm));
 }
 
+    static void
+update_cursor()
+{
+    /* TODO: this should not always be needed */
+    setcursor();
+    out_flush();
+#ifdef FEAT_GUI
+    if (gui.in_use)
+	gui_update_cursor(FALSE, FALSE);
+#endif
+}
+
 /*
  * Invoked when "msg" output from a job was received.  Write it to the terminal
  * of "buffer".
@@ -329,8 +342,7 @@ write_to_term(buf_T *buffer, char_u *msg
 
     /* TODO: only update once in a while. */
     update_screen(0);
-    setcursor();
-    out_flush();
+    update_cursor();
 }
 
 /*
@@ -461,8 +473,7 @@ terminal_loop(void)
     {
 	/* TODO: skip screen update when handling a sequence of keys. */
 	update_screen(0);
-	setcursor();
-	out_flush();
+	update_cursor();
 	++no_mapping;
 	++allow_keys;
 	got_int = FALSE;
@@ -550,8 +561,7 @@ term_job_ended(job_T *job)
     if (did_one)
     {
 	redraw_statuslines();
-	setcursor();
-	out_flush();
+	update_cursor();
     }
     if (curbuf->b_term != NULL && curbuf->b_term->tl_job == job)
 	maketitle();
@@ -616,10 +626,7 @@ handle_movecursor(
     }
 
     if (is_current)
-    {
-	setcursor();
-	out_flush();
-    }
+	update_cursor();
 
     return 1;
 }
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    771,
+/**/
     770,
 /**/
     769,