Patch 8.1.0706
Problem:    Tabline is not always redrawn when something that is used in
            'tabline' changes.
Solution:   Add ":redrawtabline" so that a plugin can at least cause the
            redraw when needed.
Files:      runtime/doc/various.txt, runtime/doc/options.txt, src/ex_docmd.c,
            src/ex_cmds.h, src/screen.c, src/proto/screen.pro,
            src/ex_cmdidxs.h, src/testdir/test_tabline.vim


*** ../vim-8.1.0705/runtime/doc/various.txt     2018-10-25 13:31:33.825906932 
+0200
--- runtime/doc/various.txt     2019-01-08 21:30:41.024061801 +0100
***************
*** 30,35 ****
--- 30,40 ----
                        includes an item that doesn't cause automatic
                        updating.
  
+                                               *:redrawt* *:redrawtabline*
+ :redrawt[abline]      Redraw the tabline.  Useful to update the tabline when
+                       'tabline' includes an item that doesn't trigger
+                       automatic updating.
+ 
                                                        *N<Del>*
  <Del>                 When entering a number: Remove the last digit.
                        Note: if you like to use <BS> for this, add this
***************
*** 448,453 ****
--- 453,459 ----
  N  *+termresponse*    support for |t_RV| and |v:termresponse|
  B  *+termguicolors*   24-bit color in xterm-compatible terminals support
  N  *+textobjects*     |text-objects| selection
+ N  *+textprop*                |text-properties|
     *+tgetent*         non-Unix only: able to use external termcap
  N  *+timers*          the |timer_start()| function
  N  *+title*           Setting the window 'title' and 'icon'
*** ../vim-8.1.0705/runtime/doc/options.txt     2018-12-16 18:19:56.142140712 
+0100
--- runtime/doc/options.txt     2019-01-08 21:33:05.538835954 +0100
***************
*** 7716,7721 ****
--- 7761,7769 ----
        the text to be displayed.  Use "%1T" for the first label, "%2T" for
        the second one, etc.  Use "%X" items for closing labels.
  
+       When changing something that is used in 'tabline' that does not
+       trigger it to be updated, use |:redrawtabline|.
+ 
        Keep in mind that only one of the tab pages is the current one, others
        are invisible and you can't jump to their windows.
  
*** ../vim-8.1.0705/src/ex_docmd.c      2018-12-26 21:44:49.815970351 +0100
--- src/ex_docmd.c      2019-01-08 21:37:20.140705263 +0100
***************
*** 296,301 ****
--- 296,302 ----
  static void   ex_later(exarg_T *eap);
  static void   ex_redir(exarg_T *eap);
  static void   ex_redrawstatus(exarg_T *eap);
+ static void   ex_redrawtabline(exarg_T *eap);
  static void   close_redir(void);
  static void   ex_mkrc(exarg_T *eap);
  static void   ex_mark(exarg_T *eap);
***************
*** 9916,9921 ****
--- 9917,9941 ----
      RedrawingDisabled = r;
      p_lz = p;
      out_flush();
+ }
+ 
+ /*
+  * ":redrawtabline": force redraw of the tabline
+  */
+     static void
+ ex_redrawtabline(exarg_T *eap UNUSED)
+ {
+     int               r = RedrawingDisabled;
+     int               p = p_lz;
+ 
+     RedrawingDisabled = 0;
+     p_lz = FALSE;
+ 
+     draw_tabline();
+ 
+     RedrawingDisabled = r;
+     p_lz = p;
+     out_flush();
  }
  
      static void
*** ../vim-8.1.0705/src/ex_cmds.h       2018-12-14 18:52:57.169528762 +0100
--- src/ex_cmds.h       2019-01-08 21:37:55.296413236 +0100
***************
*** 1175,1180 ****
--- 1175,1183 ----
  EX(CMD_redrawstatus,  "redrawstatus", ex_redrawstatus,
                        BANG|TRLBAR|CMDWIN,
                        ADDR_LINES),
+ EX(CMD_redrawtabline, "redrawtabline", ex_redrawtabline,
+                       TRLBAR|CMDWIN,
+                       ADDR_LINES),
  EX(CMD_registers,     "registers",    ex_display,
                        EXTRA|NOTRLCOM|TRLBAR|CMDWIN,
                        ADDR_LINES),
*** ../vim-8.1.0705/src/screen.c        2019-01-06 22:22:03.323843894 +0100
--- src/screen.c        2019-01-08 21:39:59.155387564 +0100
***************
*** 154,160 ****
  static void win_rest_invalid(win_T *wp);
  static void msg_pos_mode(void);
  static void recording_mode(int attr);
- static void draw_tabline(void);
  static int fillchar_status(int *attr, win_T *wp);
  static int fillchar_vsep(int *attr);
  #ifdef FEAT_MENU
--- 154,159 ----
***************
*** 10693,10699 ****
  /*
   * Draw the tab pages line at the top of the Vim window.
   */
!     static void
  draw_tabline(void)
  {
      int               tabcount = 0;
--- 10692,10698 ----
  /*
   * Draw the tab pages line at the top of the Vim window.
   */
!     void
  draw_tabline(void)
  {
      int               tabcount = 0;
*** ../vim-8.1.0705/src/proto/screen.pro        2018-09-12 21:52:14.323799725 
+0200
--- src/proto/screen.pro        2019-01-08 21:40:02.323361391 +0100
***************
*** 52,57 ****
--- 52,58 ----
  int showmode(void);
  void unshowmode(int force);
  void clearmode(void);
+ void draw_tabline(void);
  void get_trans_bufname(buf_T *buf);
  int redrawing(void);
  int messaging(void);
*** ../vim-8.1.0705/src/ex_cmdidxs.h    2018-10-19 22:35:04.885189994 +0200
--- src/ex_cmdidxs.h    2019-01-08 21:41:34.674599461 +0100
***************
*** 23,36 ****
    /* p */ 309,
    /* q */ 348,
    /* r */ 351,
!   /* s */ 370,
!   /* t */ 437,
!   /* u */ 480,
!   /* v */ 491,
!   /* w */ 509,
!   /* x */ 524,
!   /* y */ 533,
!   /* z */ 534
  };
  
  /*
--- 23,36 ----
    /* p */ 309,
    /* q */ 348,
    /* r */ 351,
!   /* s */ 371,
!   /* t */ 438,
!   /* u */ 481,
!   /* v */ 492,
!   /* w */ 510,
!   /* x */ 525,
!   /* y */ 534,
!   /* z */ 535
  };
  
  /*
***************
*** 58,64 ****
    /* o */ {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  2,  5,  0,  0,  
0,  0,  0,  0,  9,  0, 11,  0,  0,  0 },
    /* p */ {  1,  0,  3,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,  9,  
0,  0, 16, 17, 26,  0, 27,  0, 28,  0 },
    /* q */ {  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
!   /* r */ {  0,  0,  0,  0,  0,  0,  0,  0, 11,  0,  0,  0,  0,  0,  0,  0,  
0,  0,  0,  0, 13, 18,  0,  0,  0,  0 },
    /* s */ {  2,  6, 15,  0, 18, 22,  0, 24, 25,  0,  0, 28, 30, 34, 38, 40,  
0, 48,  0, 49,  0, 61, 62,  0, 63,  0 },
    /* t */ {  2,  0, 19,  0, 22, 24,  0, 25,  0, 26,  0, 27, 31, 34, 36, 37,  
0, 38, 40,  0, 41,  0,  0,  0,  0,  0 },
    /* u */ {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 10,  
0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
--- 58,64 ----
    /* o */ {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  2,  5,  0,  0,  
0,  0,  0,  0,  9,  0, 11,  0,  0,  0 },
    /* p */ {  1,  0,  3,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,  9,  
0,  0, 16, 17, 26,  0, 27,  0, 28,  0 },
    /* q */ {  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
!   /* r */ {  0,  0,  0,  0,  0,  0,  0,  0, 12,  0,  0,  0,  0,  0,  0,  0,  
0,  0,  0,  0, 14, 19,  0,  0,  0,  0 },
    /* s */ {  2,  6, 15,  0, 18, 22,  0, 24, 25,  0,  0, 28, 30, 34, 38, 40,  
0, 48,  0, 49,  0, 61, 62,  0, 63,  0 },
    /* t */ {  2,  0, 19,  0, 22, 24,  0, 25,  0, 26,  0, 27, 31, 34, 36, 37,  
0, 38, 40,  0, 41,  0,  0,  0,  0,  0 },
    /* u */ {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 10,  
0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
***************
*** 69,72 ****
    /* z */ {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
0,  0,  0,  0,  0,  0,  0,  0,  0,  0 }
  };
  
! static const int command_count = 547;
--- 69,72 ----
    /* z */ {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
0,  0,  0,  0,  0,  0,  0,  0,  0,  0 }
  };
  
! static const int command_count = 548;
*** ../vim-8.1.0705/src/testdir/test_tabline.vim        2016-04-11 
22:47:00.000000000 +0200
--- src/testdir/test_tabline.vim        2019-01-08 21:58:51.558123995 +0100
***************
*** 1,19 ****
! function! TablineWithCaughtError()
    let s:func_in_tabline_called = 1
    try
      call eval('unknown expression')
    catch
    endtry
    return ''
! endfunction
  
! function! TablineWithError()
    let s:func_in_tabline_called = 1
    call eval('unknown expression')
    return ''
! endfunction
  
! function! Test_caught_error_in_tabline()
    if has('gui')
      set guioptions-=e
    endif
--- 1,22 ----
! 
! source shared.vim
! 
! func TablineWithCaughtError()
    let s:func_in_tabline_called = 1
    try
      call eval('unknown expression')
    catch
    endtry
    return ''
! endfunc
  
! func TablineWithError()
    let s:func_in_tabline_called = 1
    call eval('unknown expression')
    return ''
! endfunc
  
! func Test_caught_error_in_tabline()
    if has('gui')
      set guioptions-=e
    endif
***************
*** 27,35 ****
    call assert_equal(tabline, &tabline)
    set tabline=
    let &showtabline = showtabline_save
! endfunction
  
! function! Test_tabline_will_be_disabled_with_error()
    if has('gui')
      set guioptions-=e
    endif
--- 30,38 ----
    call assert_equal(tabline, &tabline)
    set tabline=
    let &showtabline = showtabline_save
! endfunc
  
! func Test_tabline_will_be_disabled_with_error()
    if has('gui')
      set guioptions-=e
    endif
***************
*** 46,49 ****
    call assert_equal('', &tabline)
    set tabline=
    let &showtabline = showtabline_save
! endfunction
--- 49,72 ----
    call assert_equal('', &tabline)
    set tabline=
    let &showtabline = showtabline_save
! endfunc
! 
! func Test_redrawtabline()
!   if has('gui')
!     set guioptions-=e
!   endif
!   let showtabline_save = &showtabline
!   set showtabline=2
!   set tabline=%{bufnr('$')}
!   edit Xtabline1
!   edit Xtabline2
!   redraw
!   call assert_match(bufnr('$') . '', Screenline(1))
!   au BufAdd * redrawtabline
!   badd Xtabline3
!   call assert_match(bufnr('$') . '', Screenline(1))
! 
!   set tabline=
!   let &showtabline = showtabline_save
!   au! Bufadd
! endfunc
*** ../vim-8.1.0705/src/version.c       2019-01-08 21:05:47.820952657 +0100
--- src/version.c       2019-01-08 21:53:43.416634012 +0100
***************
*** 801,802 ****
--- 801,804 ----
  {   /* Add new patch number below this line */
+ /**/
+     706,
  /**/

-- 
Never eat yellow snow.

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
-- 
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui