Patch 7.4.1895
Problem:    Cannot use a window ID where a window number is expected.
Solution:   Add LOWEST_WIN_ID, so that the window ID can be used where a
            number is expected.
Files:      src/window.c, src/eval.c, src/vim.h, runtime/doc/eval.txt,
            src/testdir/test_window_id.vim


*** ../vim-7.4.1894/src/window.c        2016-05-24 11:31:10.523505120 +0200
--- src/window.c        2016-06-04 18:13:00.770099953 +0200
***************
*** 4422,4428 ****
  }
  #endif
  
! static int last_win_id = 0;
  
  /*
   * Allocate a window structure and link it in the window list when "hidden" is
--- 4422,4428 ----
  }
  #endif
  
! static int last_win_id = LOWEST_WIN_ID - 1;
  
  /*
   * Allocate a window structure and link it in the window list when "hidden" is
*** ../vim-7.4.1894/src/eval.c  2016-06-04 18:09:39.466102722 +0200
--- src/eval.c  2016-06-04 18:25:35.962089565 +0200
***************
*** 13566,13576 ****
  
      for (wp = (tp == NULL || tp == curtab) ? firstwin : tp->tp_firstwin;
                                                  wp != NULL; wp = wp->w_next)
!       if (--nr <= 0)
            break;
      return wp;
  #else
!     if (nr == 0 || nr == 1)
        return curwin;
      return NULL;
  #endif
--- 13566,13583 ----
  
      for (wp = (tp == NULL || tp == curtab) ? firstwin : tp->tp_firstwin;
                                                  wp != NULL; wp = wp->w_next)
!       if (nr >= LOWEST_WIN_ID)
!       {
!           if (wp->w_id == nr)
!               return wp;
!       }
!       else if (--nr <= 0)
            break;
+     if (nr >= LOWEST_WIN_ID)
+       return NULL;
      return wp;
  #else
!     if (nr == 0 || nr == 1 || nr == curwin->w_id)
        return curwin;
      return NULL;
  #endif
*** ../vim-7.4.1894/src/vim.h   2016-06-04 18:09:39.470102722 +0200
--- src/vim.h   2016-06-04 18:14:50.506098443 +0200
***************
*** 2334,2337 ****
--- 2334,2340 ----
  #define DIP_OPT           0x10        /* also use "opt" directory in 
'packpath' */
  #define DIP_NORTP   0x20      /* do not use 'runtimepath' */
  
+ /* Lowest number used for window ID. Cannot have this many windows. */
+ #define LOWEST_WIN_ID 1000
+ 
  #endif /* VIM__H */
*** ../vim-7.4.1894/runtime/doc/eval.txt        2016-06-04 18:09:39.474102722 
+0200
--- runtime/doc/eval.txt        2016-06-04 18:24:47.266090235 +0200
***************
*** 1341,1346 ****
--- 1358,1367 ----
                window has number zero (unlike most other places where a
                window gets a number).
  
+                                       *v:beval_winid* *beval_winid-variable*
+ v:beval_winid The window ID of the window, over which the mouse pointer is.
+               Otherwise like v:beval_winnr.
+ 
                                        *v:char* *char-variable*
  v:char                Argument for evaluating 'formatexpr' and used for the 
typed
                character when using <expr> in an abbreviation |:map-<expr>|.
***************
*** 2297,2312 ****
                the first file.  argc() - 1 is the last one.  See |arglist|.
  
                                                        *arglistid()*
! arglistid([{winnr}, [ {tabnr} ]])
                Return the argument list ID.  This is a number which
                identifies the argument list being used.  Zero is used for the
!               global argument list.
!               Return zero if the arguments are invalid.
  
                Without arguments use the current window.
                With {winnr} only use this window in the current tab page.
                With {winnr} and {tabnr} use the window in the specified tab
                page.
  
                                                        *argv()*
  argv([{nr}])  The result is the {nr}th file in the argument list of the
--- 2320,2336 ----
                the first file.  argc() - 1 is the last one.  See |arglist|.
  
                                                        *arglistid()*
! arglistid([{winnr} [, {tabnr}]])
                Return the argument list ID.  This is a number which
                identifies the argument list being used.  Zero is used for the
!               global argument list.  See |arglist|.
!               Return -1 if the arguments are invalid.
  
                Without arguments use the current window.
                With {winnr} only use this window in the current tab page.
                With {winnr} and {tabnr} use the window in the specified tab
                page.
+               {winnr} can be the window number or the window ID.
  
                                                        *argv()*
  argv([{nr}])  The result is the {nr}th file in the argument list of the
***************
*** 3921,3926 ****
--- 3988,3994 ----
                in the current tab page.
                With {winnr} and {tabnr} return the local current directory of
                the window in the specified tab page.
+               {winnr} can be the window number or the window ID.
                Return an empty string if the arguments are invalid.
  
  getfsize({fname})                                     *getfsize()*
***************
*** 4016,4022 ****
  
  getloclist({nr})                                      *getloclist()*
                Returns a list with all the entries in the location list for
!               window {nr}. When {nr} is zero the current window is used.
                For a location list window, the displayed location list is
                returned.  For an invalid window number {nr}, an empty list is
                returned. Otherwise, same as |getqflist()|.
--- 4085,4093 ----
  
  getloclist({nr})                                      *getloclist()*
                Returns a list with all the entries in the location list for
!               window {nr}.  {nr} can be the window number or the window ID.
!               When {nr} is zero the current window is used.
! 
                For a location list window, the displayed location list is
                returned.  For an invalid window number {nr}, an empty list is
                returned. Otherwise, same as |getqflist()|.
***************
*** 4117,4122 ****
--- 4221,4227 ----
                Note that {varname} must be the name without "w:".
                Tabs are numbered starting with one.  For the current tabpage
                use |getwinvar()|.
+               {winnr} can be the window number or the window ID.
                When {winnr} is zero the current window is used.
                This also works for a global option, buffer-local option and
                window-local option, but it doesn't work for a global variable
***************
*** 4234,4239 ****
--- 4346,4352 ----
                With {winnr} use this window in the current tab page.
                With {winnr} and {tabnr} use the window in the specified tab
                page.
+               {winnr} can be the window number or the window ID.
                Return 0 if the arguments are invalid.
  
  hasmapto({what} [, {mode} [, {abbr}]])                        *hasmapto()*
***************
*** 6191,6199 ****
  
  setloclist({nr}, {list} [, {action}])                 *setloclist()*
                Create or replace or add to the location list for window {nr}.
!               When {nr} is zero the current window is used. For a location
!               list window, the displayed location list is modified.  For an
!               invalid window number {nr}, -1 is returned.
                Otherwise, same as |setqflist()|.
                Also see |location-list|.
  
--- 6293,6303 ----
  
  setloclist({nr}, {list} [, {action}])                 *setloclist()*
                Create or replace or add to the location list for window {nr}.
!               {nr} can be the window number or the window ID.
!               When {nr} is zero the current window is used.
! 
!               For a location list window, the displayed location list is
!               modified.  For an invalid window number {nr}, -1 is returned.
                Otherwise, same as |setqflist()|.
                Also see |location-list|.
  
***************
*** 6354,6359 ****
--- 6464,6470 ----
                {val}.
                Tabs are numbered starting with one.  For the current tabpage
                use |setwinvar()|.
+               {winnr} can be the window number or the window ID.
                When {winnr} is zero the current window is used.
                This also works for a global or local buffer option, but it
                doesn't work for a global or local buffer variable.
***************
*** 7378,7386 ****
  
                                                        *winbufnr()*
  winbufnr({nr})        The result is a Number, which is the number of the 
buffer
!               associated with window {nr}.  When {nr} is zero, the number of
!               the buffer in the current window is returned.  When window
!               {nr} doesn't exist, -1 is returned.
                Example: >
    :echo "The file in the current window is " . bufname(winbufnr(0))
  <
--- 7537,7547 ----
  
                                                        *winbufnr()*
  winbufnr({nr})        The result is a Number, which is the number of the 
buffer
!               associated with window {nr}.  {nr} can be the window number or
!               the window ID.
!               When {nr} is zero, the number of the buffer in the current
!               window is returned.
!               When window {nr} doesn't exist, -1 is returned.
                Example: >
    :echo "The file in the current window is " . bufname(winbufnr(0))
  <
***************
*** 7391,7396 ****
--- 7552,7558 ----
  
  winheight({nr})                                               *winheight()*
                The result is a Number, which is the height of window {nr}.
+               {nr} can be the window number or the window ID.
                When {nr} is zero, the height of the current window is
                returned.  When window {nr} doesn't exist, -1 is returned.
                An existing window always has a height of zero or more.
***************
*** 7470,7475 ****
--- 7632,7638 ----
  
  winwidth({nr})                                                *winwidth()*
                The result is a Number, which is the width of window {nr}.
+               {nr} can be the window number or the window ID.
                When {nr} is zero, the width of the current window is
                returned.  When window {nr} doesn't exist, -1 is returned.
                An existing window always has a width of zero or more.
*** ../vim-7.4.1894/src/testdir/test_window_id.vim      2016-03-13 
19:04:45.381224860 +0100
--- src/testdir/test_window_id.vim      2016-06-04 18:45:17.826073307 +0200
***************
*** 3,19 ****
--- 3,24 ----
  func Test_win_getid()
    edit one
    let id1 = win_getid()
+   let w:one = 'one'
    split two
    let id2 = win_getid()
    let bufnr2 = bufnr('%')
+   let w:two = 'two'
    split three
    let id3 = win_getid()
+   let w:three = 'three'
    tabnew
    edit four
    let id4 = win_getid()
+   let w:four = 'four'
    split five
    let id5 = win_getid()
    let bufnr5 = bufnr('%')
+   let w:five = 'five'
    tabnext
  
    wincmd w
***************
*** 28,33 ****
--- 33,41 ----
    call assert_equal("three", expand("%"))
    call assert_equal(id3, win_getid())
    let nr3 = winnr()
+   call assert_equal('one', getwinvar(id1, 'one'))
+   call assert_equal('two', getwinvar(id2, 'two'))
+   call assert_equal('three', getwinvar(id3, 'three'))
    tabnext
    call assert_equal("five", expand("%"))
    call assert_equal(id5, win_getid())
***************
*** 36,42 ****
--- 44,57 ----
    call assert_equal("four", expand("%"))
    call assert_equal(id4, win_getid())
    let nr4 = winnr()
+   call assert_equal('four', getwinvar(id4, 'four'))
+   call assert_equal('five', getwinvar(id5, 'five'))
+   call settabwinvar(1, id2, 'two', '2')
+   call setwinvar(id4, 'four', '4')
    tabnext
+   call assert_equal('4', gettabwinvar(2, id4, 'four'))
+   call assert_equal('five', gettabwinvar(2, id5, 'five'))
+   call assert_equal('2', getwinvar(id2, 'two'))
  
    exe nr1 . "wincmd w"
    call assert_equal(id1, win_getid())
*** ../vim-7.4.1894/src/version.c       2016-06-04 18:09:39.474102722 +0200
--- src/version.c       2016-06-04 18:25:20.974089771 +0200
***************
*** 755,756 ****
--- 755,758 ----
  {   /* Add new patch number below this line */
+ /**/
+     1895,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
43. You tell the kids they can't use the computer because "Daddy's got work to
    do" and you don't even have a job.

 /// 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