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.

Raspunde prin e-mail lui