vim/7.4.709
2015-04-22 18:00:04 +02:00

379 lines
8.6 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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