On Saturday, June 4, 2016 at 5:24:42 PM UTC+3, Bram Moolenaar wrote: > Patch 7.4.1890 > Problem: GUI: When channel data is received the cursor blinking is > interrupted. (Ramel Eshed) > Solution: Don't update the cursor when it is blinking. > Files: src/screen.c, src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro, > src/gui_mac.c, src/proto/gui_mac.pro, src/gui_photon.c, > src/proto/gui_photon.pro, src/gui_w32.c, src/proto/gui_w32.pro, > src/gui_x11.c, src/proto/gui_x11.pro > > > *** ../vim-7.4.1889/src/screen.c 2016-05-24 10:51:26.543537913 +0200 > --- src/screen.c 2016-06-04 15:53:40.674214953 +0200 > *************** > *** 432,438 **** > #ifdef FEAT_GUI > if (gui.in_use) > { > ! gui_update_cursor(TRUE, FALSE); > gui_mch_flush(); > } > #endif > --- 432,441 ---- > #ifdef FEAT_GUI > if (gui.in_use) > { > ! /* Don't update the cursor while it is blinking, it will get > ! * updated soon and this avoids interrupting the blinking. */ > ! if (!gui_mch_is_blinking()) > ! gui_update_cursor(FALSE, FALSE); > gui_mch_flush(); > } > #endif > *** ../vim-7.4.1889/src/gui_gtk_x11.c 2016-06-02 14:29:59.132661030 +0200 > --- src/gui_gtk_x11.c 2016-06-04 16:03:17.514207018 +0200 > *************** > *** 810,815 **** > --- 810,821 ---- > } > #endif > > + int > + gui_mch_is_blinking(void) > + { > + return blink_state != BLINK_NONE; > + } > + > void > gui_mch_set_blinking(long waittime, long on, long off) > { > *** ../vim-7.4.1889/src/proto/gui_gtk_x11.pro 2016-01-19 13:21:55.837334377 > +0100 > --- src/proto/gui_gtk_x11.pro 2016-06-04 15:42:58.986223780 +0200 > *************** > *** 1,6 **** > --- 1,7 ---- > /* gui_gtk_x11.c */ > void gui_mch_prepare(int *argc, char **argv); > void gui_mch_free_all(void); > + int gui_mch_is_blinking(void); > void gui_mch_set_blinking(long waittime, long on, long off); > void gui_mch_stop_blink(void); > void gui_mch_start_blink(void); > *** ../vim-7.4.1889/src/gui_mac.c 2016-06-02 22:27:04.256267269 +0200 > --- src/gui_mac.c 2016-06-04 16:03:02.278207227 +0200 > *************** > *** 5114,5119 **** > --- 5114,5124 ---- > #endif > } > > + int > + gui_mch_is_blinking(void) > + { > + return FALSE; > + } > > /* > * Cursor blink functions. > *** ../vim-7.4.1889/src/proto/gui_mac.pro 2016-01-30 13:28:23.925007165 > +0100 > --- src/proto/gui_mac.pro 2016-06-04 16:02:58.858207274 +0200 > *************** > *** 14,19 **** > --- 14,20 ---- > void gui_mac_focus_change(EventRecord *event); > void gui_mac_update(EventRecord *event); > short gui_mch_get_mac_menu_item_index(vimmenu_T *menu, vimmenu_T *parent); > + int gui_mch_is_blinking(void); > void gui_mch_set_blinking(long wait, long on, long off); > void gui_mch_stop_blink(void); > void gui_mch_start_blink(void); > *** ../vim-7.4.1889/src/gui_photon.c 2016-04-26 20:59:24.728486510 +0200 > --- src/gui_photon.c 2016-06-04 16:04:51.706205722 +0200 > *************** > *** 2232,2237 **** > --- 2232,2243 ---- > DRAW_END; > } > > + int > + gui_mch_is_blinking(void) > + { > + return blink_state != BLINK_NONE; > + } > + > void > gui_mch_set_blinking(long wait, long on, long off) > { > *** ../vim-7.4.1889/src/proto/gui_photon.pro 2016-01-19 13:21:55.837334377 > +0100 > --- src/proto/gui_photon.pro 2016-06-04 16:05:13.258205426 +0200 > *************** > *** 39,44 **** > --- 39,45 ---- > void gui_mch_draw_string(int row, int col, char_u *s, int len, int flags); > void gui_mch_draw_hollow_cursor(guicolor_T color); > void gui_mch_draw_part_cursor(int w, int h, guicolor_T color); > + int gui_mch_is_blinking(void); > void gui_mch_set_blinking(long wait, long on, long off); > void gui_mch_start_blink(void); > void gui_mch_stop_blink(void); > *** ../vim-7.4.1889/src/gui_w32.c 2016-06-02 15:49:33.008595362 +0200 > --- src/gui_w32.c 2016-06-04 16:05:47.706204952 +0200 > *************** > *** 540,545 **** > --- 540,551 ---- > static long_u blink_offtime = 250; > static UINT blink_timer = 0; > > + int > + gui_mch_is_blinking(void) > + { > + return blink_state != BLINK_NONE; > + } > + > void > gui_mch_set_blinking(long wait, long on, long off) > { > *** ../vim-7.4.1889/src/proto/gui_w32.pro 2016-01-29 21:11:20.967061365 > +0100 > --- src/proto/gui_w32.pro 2016-06-04 16:05:52.486204886 +0200 > *************** > *** 1,6 **** > --- 1,7 ---- > /* gui_w32.c */ > int directx_enabled(void); > int gui_mch_set_rendering_options(char_u *s); > + int gui_mch_is_blinking(void); > void gui_mch_set_blinking(long wait, long on, long off); > void gui_mch_stop_blink(void); > void gui_mch_start_blink(void); > *** ../vim-7.4.1889/src/gui_x11.c 2016-06-02 14:29:59.136661030 +0200 > --- src/gui_x11.c 2016-06-04 16:06:17.030204548 +0200 > *************** > *** 3155,3160 **** > --- 3155,3166 ---- > static long_u blink_offtime = 250; > static XtIntervalId blink_timer = (XtIntervalId)0; > > + int > + gui_mch_is_blinking(void) > + { > + return blink_state != BLINK_NONE; > + } > + > void > gui_mch_set_blinking(long waittime, long on, long off) > { > *** ../vim-7.4.1889/src/proto/gui_x11.pro 2016-01-19 13:21:55.841334333 > +0100 > --- src/proto/gui_x11.pro 2016-06-04 16:06:20.258204504 +0200 > *************** > *** 53,58 **** > --- 53,59 ---- > void gui_mch_menu_hidden(vimmenu_T *menu, int hidden); > void gui_mch_draw_menubar(void); > void gui_x11_menu_cb(Widget w, XtPointer client_data, XtPointer call_data); > + int gui_mch_is_blinking(void); > void gui_mch_set_blinking(long waittime, long on, long off); > void gui_mch_stop_blink(void); > void gui_mch_start_blink(void); > *** ../vim-7.4.1889/src/version.c 2016-06-04 14:51:56.434265908 +0200 > --- src/version.c 2016-06-04 16:23:02.862190712 +0200 > *************** > *** 755,756 **** > --- 755,758 ---- > { /* Add new patch number below this line */ > + /**/ > + 1890, > /**/ > > -- > The future isn't what it used to be. > > /// Bram Moolenaar -- b...@moolenaar.net -- http://www.Moolenaar.net \\\ > /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ > \\\ an exciting new programming language -- http://www.Zimbu.org /// > \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
I'm not sure if this patch was supposed to fix the issue completely, but there are still issues with the gui cursor. 1) When job output is redirected to a buffer: vim -u NONE -N :new :call job_start(['/bin/sh', '-c', 'ls -R / | head -500000'], { 'out_io': 'buffer', 'out_buf': 1 }) -The cursor disappears from the upper window (most of the time). Also, when the window is not scrolled (if you insert 2 letters before the :new) the cursor doesn't blink normally. 2) When updating the status line: source the following script: set laststatus=2 let tcount = 0 func! Timer_cb(timer) let g:tcount += 1 call setbufvar(1, '&stl', g:tcount) endfunc call timer_start(50, 'Timer_cb', {'repeat': 100}) Both behave very well in the terminal. Thanks, Ramel -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.