379 lines
8.6 KiB
Plaintext
379 lines
8.6 KiB
Plaintext
|
To: vim_dev@googlegroups.com
|
|||
|
Subject: Patch 7.4.709
|
|||
|
Fcc: outbox
|
|||
|
From: Bram Moolenaar <Bram@moolenaar.net>
|
|||
|
Mime-Version: 1.0
|
|||
|
Content-Type: text/plain; charset=UTF-8
|
|||
|
Content-Transfer-Encoding: 8bit
|
|||
|
------------
|
|||
|
|
|||
|
Patch 7.4.709
|
|||
|
Problem: ":tabmove" does not work as documented.
|
|||
|
Solution: Make it work consistently. Update documentation and add tests.
|
|||
|
(Hirohito Higashi)
|
|||
|
Files: src/window.c, runtime/doc/tabpage.txt, src/ex_docmd.c,
|
|||
|
src/testdir/test62.in, src/testdir/test62.ok
|
|||
|
|
|||
|
|
|||
|
*** ../vim-7.4.708/src/window.c 2015-04-21 15:43:00.338397578 +0200
|
|||
|
--- src/window.c 2015-04-21 18:05:36.180477302 +0200
|
|||
|
***************
|
|||
|
*** 4120,4137 ****
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
! * Move the current tab page to before tab page "nr".
|
|||
|
*/
|
|||
|
void
|
|||
|
tabpage_move(nr)
|
|||
|
int nr;
|
|||
|
{
|
|||
|
! int n = nr;
|
|||
|
! tabpage_T *tp;
|
|||
|
|
|||
|
if (first_tabpage->tp_next == NULL)
|
|||
|
return;
|
|||
|
|
|||
|
/* Remove the current tab page from the list of tab pages. */
|
|||
|
if (curtab == first_tabpage)
|
|||
|
first_tabpage = curtab->tp_next;
|
|||
|
--- 4120,4146 ----
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
! * Move the current tab page to after tab page "nr".
|
|||
|
*/
|
|||
|
void
|
|||
|
tabpage_move(nr)
|
|||
|
int nr;
|
|||
|
{
|
|||
|
! int n = 1;
|
|||
|
! tabpage_T *tp, *tp_dst;
|
|||
|
|
|||
|
if (first_tabpage->tp_next == NULL)
|
|||
|
return;
|
|||
|
|
|||
|
+ for (tp = first_tabpage; tp->tp_next != NULL && n < nr; tp = tp->tp_next)
|
|||
|
+ ++n;
|
|||
|
+
|
|||
|
+ if (tp == curtab || (nr > 0 && tp->tp_next != NULL
|
|||
|
+ && tp->tp_next == curtab))
|
|||
|
+ return;
|
|||
|
+
|
|||
|
+ tp_dst = tp;
|
|||
|
+
|
|||
|
/* Remove the current tab page from the list of tab pages. */
|
|||
|
if (curtab == first_tabpage)
|
|||
|
first_tabpage = curtab->tp_next;
|
|||
|
***************
|
|||
|
*** 4146,4162 ****
|
|||
|
}
|
|||
|
|
|||
|
/* Re-insert it at the specified position. */
|
|||
|
! if (n <= 0)
|
|||
|
{
|
|||
|
curtab->tp_next = first_tabpage;
|
|||
|
first_tabpage = curtab;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
! for (tp = first_tabpage; tp->tp_next != NULL && n > 1; tp = tp->tp_next)
|
|||
|
! --n;
|
|||
|
! curtab->tp_next = tp->tp_next;
|
|||
|
! tp->tp_next = curtab;
|
|||
|
}
|
|||
|
|
|||
|
/* Need to redraw the tabline. Tab page contents doesn't change. */
|
|||
|
--- 4155,4169 ----
|
|||
|
}
|
|||
|
|
|||
|
/* Re-insert it at the specified position. */
|
|||
|
! if (nr <= 0)
|
|||
|
{
|
|||
|
curtab->tp_next = first_tabpage;
|
|||
|
first_tabpage = curtab;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
! curtab->tp_next = tp_dst->tp_next;
|
|||
|
! tp_dst->tp_next = curtab;
|
|||
|
}
|
|||
|
|
|||
|
/* Need to redraw the tabline. Tab page contents doesn't change. */
|
|||
|
*** ../vim-7.4.708/runtime/doc/tabpage.txt 2015-01-07 16:52:53.506792420 +0100
|
|||
|
--- runtime/doc/tabpage.txt 2015-04-21 18:01:53.042846350 +0200
|
|||
|
***************
|
|||
|
*** 202,224 ****
|
|||
|
Move the current tab page to after tab page N. Use zero to
|
|||
|
make the current tab page the first one. Without N the tab
|
|||
|
page is made the last one. >
|
|||
|
:-tabmove " move the tab page to the left
|
|||
|
! :tabmove " move the tab page to the right
|
|||
|
! :.tabmove " as above
|
|||
|
! :+tabmove " as above
|
|||
|
:0tabmove " move the tab page to the beginning of the tab
|
|||
|
" list
|
|||
|
! :$tabmove " move the tab page to the end of the tab list
|
|||
|
! <
|
|||
|
|
|||
|
:tabm[ove] +[N]
|
|||
|
:tabm[ove] -[N]
|
|||
|
Move the current tab page N places to the right (with +) or to
|
|||
|
! the left (with -).
|
|||
|
|
|||
|
Note that although it is possible to move a tab behind the N-th one by using
|
|||
|
! :Ntabmove, it is impossible to move it by N places by using :+Ntabmove. For
|
|||
|
! clarification what +N means in this context see |[range]|.
|
|||
|
|
|||
|
|
|||
|
LOOPING OVER TAB PAGES:
|
|||
|
--- 202,230 ----
|
|||
|
Move the current tab page to after tab page N. Use zero to
|
|||
|
make the current tab page the first one. Without N the tab
|
|||
|
page is made the last one. >
|
|||
|
+ :.tabmove " do nothing
|
|||
|
:-tabmove " move the tab page to the left
|
|||
|
! :+tabmove " move the tab page to the right
|
|||
|
:0tabmove " move the tab page to the beginning of the tab
|
|||
|
" list
|
|||
|
! :tabmove 0 " as above
|
|||
|
! :tabmove " move the tab page to the last
|
|||
|
! :$tabmove " as above
|
|||
|
! :tabmove $ " as above
|
|||
|
|
|||
|
:tabm[ove] +[N]
|
|||
|
:tabm[ove] -[N]
|
|||
|
Move the current tab page N places to the right (with +) or to
|
|||
|
! the left (with -). >
|
|||
|
! :tabmove - " move the tab page to the left
|
|||
|
! :tabmove -1 " as above
|
|||
|
! :tabmove + " move the tab page to the right
|
|||
|
! :tabmove +1 " as above
|
|||
|
!
|
|||
|
|
|||
|
Note that although it is possible to move a tab behind the N-th one by using
|
|||
|
! :Ntabmove. And move it by N places by using :+Ntabmove. For clarification what
|
|||
|
! +N means in this context see |[range]|.
|
|||
|
|
|||
|
|
|||
|
LOOPING OVER TAB PAGES:
|
|||
|
*** ../vim-7.4.708/src/ex_docmd.c 2015-04-13 12:35:50.180593380 +0200
|
|||
|
--- src/ex_docmd.c 2015-04-21 18:01:53.042846350 +0200
|
|||
|
***************
|
|||
|
*** 8145,8151 ****
|
|||
|
ex_tabmove(eap)
|
|||
|
exarg_T *eap;
|
|||
|
{
|
|||
|
! int tab_number = 9999;
|
|||
|
|
|||
|
if (eap->arg && *eap->arg != NUL)
|
|||
|
{
|
|||
|
--- 8145,8151 ----
|
|||
|
ex_tabmove(eap)
|
|||
|
exarg_T *eap;
|
|||
|
{
|
|||
|
! int tab_number;
|
|||
|
|
|||
|
if (eap->arg && *eap->arg != NUL)
|
|||
|
{
|
|||
|
***************
|
|||
|
*** 8166,8184 ****
|
|||
|
else
|
|||
|
p = eap->arg;
|
|||
|
|
|||
|
! if (p == skipdigits(p))
|
|||
|
{
|
|||
|
! /* No numbers as argument. */
|
|||
|
! eap->errmsg = e_invarg;
|
|||
|
! return;
|
|||
|
}
|
|||
|
-
|
|||
|
- tab_number = getdigits(&p);
|
|||
|
- if (relative != 0)
|
|||
|
- tab_number = tab_number * relative + tabpage_index(curtab) - 1;;
|
|||
|
}
|
|||
|
else if (eap->addr_count != 0)
|
|||
|
tab_number = eap->line2;
|
|||
|
|
|||
|
tabpage_move(tab_number);
|
|||
|
}
|
|||
|
--- 8166,8203 ----
|
|||
|
else
|
|||
|
p = eap->arg;
|
|||
|
|
|||
|
! if (relative == 0)
|
|||
|
{
|
|||
|
! if (STRCMP(p, "$") == 0)
|
|||
|
! tab_number = LAST_TAB_NR;
|
|||
|
! else if (p == skipdigits(p))
|
|||
|
! {
|
|||
|
! /* No numbers as argument. */
|
|||
|
! eap->errmsg = e_invarg;
|
|||
|
! return;
|
|||
|
! }
|
|||
|
! else
|
|||
|
! tab_number = getdigits(&p);
|
|||
|
! }
|
|||
|
! else
|
|||
|
! {
|
|||
|
! if (*p != NUL)
|
|||
|
! tab_number = getdigits(&p);
|
|||
|
! else
|
|||
|
! tab_number = 1;
|
|||
|
! tab_number = tab_number * relative + tabpage_index(curtab);
|
|||
|
! if (relative == -1)
|
|||
|
! --tab_number;
|
|||
|
}
|
|||
|
}
|
|||
|
else if (eap->addr_count != 0)
|
|||
|
+ {
|
|||
|
tab_number = eap->line2;
|
|||
|
+ if (**eap->cmdlinep == '-')
|
|||
|
+ --tab_number;
|
|||
|
+ }
|
|||
|
+ else
|
|||
|
+ tab_number = LAST_TAB_NR;
|
|||
|
|
|||
|
tabpage_move(tab_number);
|
|||
|
}
|
|||
|
*** ../vim-7.4.708/src/testdir/test62.in 2015-01-07 15:57:13.145559792 +0100
|
|||
|
--- src/testdir/test62.in 2015-04-21 18:01:15.231247887 +0200
|
|||
|
***************
|
|||
|
*** 96,125 ****
|
|||
|
:"
|
|||
|
:for i in range(9) | tabnew | endfor
|
|||
|
1gt
|
|||
|
! Go=tabpagenr()
|
|||
|
:tabmove 5
|
|||
|
! i=tabpagenr()
|
|||
|
:tabmove -2
|
|||
|
! i=tabpagenr()
|
|||
|
:tabmove +4
|
|||
|
! i=tabpagenr()
|
|||
|
:tabmove
|
|||
|
! i=tabpagenr()
|
|||
|
:tabmove -20
|
|||
|
! i=tabpagenr()
|
|||
|
:tabmove +20
|
|||
|
! i=tabpagenr()
|
|||
|
:3tabmove
|
|||
|
! i=tabpagenr()
|
|||
|
:7tabmove 5
|
|||
|
! i=tabpagenr()
|
|||
|
:let a='No error caught.'
|
|||
|
:try
|
|||
|
:tabmove foo
|
|||
|
:catch E474
|
|||
|
:let a='E474 caught.'
|
|||
|
:endtry
|
|||
|
! i=a
|
|||
|
:"
|
|||
|
:" Test autocommands
|
|||
|
:tabonly!
|
|||
|
--- 96,139 ----
|
|||
|
:"
|
|||
|
:for i in range(9) | tabnew | endfor
|
|||
|
1gt
|
|||
|
! :$put =tabpagenr()
|
|||
|
:tabmove 5
|
|||
|
! :$put =tabpagenr()
|
|||
|
! :.tabmove
|
|||
|
! :$put =tabpagenr()
|
|||
|
! :tabmove -
|
|||
|
! :$put =tabpagenr()
|
|||
|
! :tabmove +
|
|||
|
! :$put =tabpagenr()
|
|||
|
:tabmove -2
|
|||
|
! :$put =tabpagenr()
|
|||
|
:tabmove +4
|
|||
|
! :$put =tabpagenr()
|
|||
|
:tabmove
|
|||
|
! :$put =tabpagenr()
|
|||
|
:tabmove -20
|
|||
|
! :$put =tabpagenr()
|
|||
|
:tabmove +20
|
|||
|
! :$put =tabpagenr()
|
|||
|
! :0tabmove
|
|||
|
! :$put =tabpagenr()
|
|||
|
! :$tabmove
|
|||
|
! :$put =tabpagenr()
|
|||
|
! :tabmove 0
|
|||
|
! :$put =tabpagenr()
|
|||
|
! :tabmove $
|
|||
|
! :$put =tabpagenr()
|
|||
|
:3tabmove
|
|||
|
! :$put =tabpagenr()
|
|||
|
:7tabmove 5
|
|||
|
! :$put =tabpagenr()
|
|||
|
:let a='No error caught.'
|
|||
|
:try
|
|||
|
:tabmove foo
|
|||
|
:catch E474
|
|||
|
:let a='E474 caught.'
|
|||
|
:endtry
|
|||
|
! :$put =a
|
|||
|
:"
|
|||
|
:" Test autocommands
|
|||
|
:tabonly!
|
|||
|
*** ../vim-7.4.708/src/testdir/test62.ok 2013-07-14 12:16:20.000000000 +0200
|
|||
|
--- src/testdir/test62.ok 2015-04-21 18:01:15.231247887 +0200
|
|||
|
***************
|
|||
|
*** 9,22 ****
|
|||
|
tab drop 2: pass
|
|||
|
tab drop 3: pass
|
|||
|
1
|
|||
|
! 6
|
|||
|
4
|
|||
|
! 8
|
|||
|
10
|
|||
|
1
|
|||
|
10
|
|||
|
4
|
|||
|
! 6
|
|||
|
E474 caught.
|
|||
|
=== tab split ===
|
|||
|
WinLeave
|
|||
|
--- 9,29 ----
|
|||
|
tab drop 2: pass
|
|||
|
tab drop 3: pass
|
|||
|
1
|
|||
|
! 5
|
|||
|
! 5
|
|||
|
4
|
|||
|
! 5
|
|||
|
! 3
|
|||
|
! 7
|
|||
|
! 10
|
|||
|
! 1
|
|||
|
! 10
|
|||
|
! 1
|
|||
|
10
|
|||
|
1
|
|||
|
10
|
|||
|
4
|
|||
|
! 5
|
|||
|
E474 caught.
|
|||
|
=== tab split ===
|
|||
|
WinLeave
|
|||
|
*** ../vim-7.4.708/src/version.c 2015-04-21 16:48:55.028917216 +0200
|
|||
|
--- src/version.c 2015-04-21 18:00:49.083525577 +0200
|
|||
|
***************
|
|||
|
*** 743,744 ****
|
|||
|
--- 743,746 ----
|
|||
|
{ /* Add new patch number below this line */
|
|||
|
+ /**/
|
|||
|
+ 709,
|
|||
|
/**/
|
|||
|
|
|||
|
--
|
|||
|
BEDEVERE: Why do you think she is a witch?
|
|||
|
SECOND VILLAGER: She turned me into a newt.
|
|||
|
BEDEVERE: A newt?
|
|||
|
SECOND VILLAGER: (After looking at himself for some time) I got better.
|
|||
|
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
|
|||
|
|
|||
|
/// Bram Moolenaar -- Bram@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 ///
|