Merge pull request #4113 from jbradaric/vim-7.4.709

vim-patch:7.4.709
This commit is contained in:
Justin M. Keyes 2016-02-01 02:16:29 -05:00
commit 99067b7e56
5 changed files with 81 additions and 34 deletions

View File

@ -197,22 +197,29 @@ REORDERING TAB PAGES:
Move the current tab page to after tab page N. Use zero to 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 make the current tab page the first one. Without N the tab
page is made the last one. > page is made the last one. >
:.tabmove " do nothing
:-tabmove " move the tab page to the left :-tabmove " move the tab page to the left
:tabmove " move the tab page to the right :+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 :0tabmove " move the tab page to the beginning of the tab
" list " list
:$tabmove " move the tab page to the end 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]
:tabm[ove] -[N] :tabm[ove] -[N]
Move the current tab page N places to the right (with +) or to Move the current tab page N places to the right (with +) or to
the left (with -). 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 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 :Ntabmove. And move it by N places by using :+Ntabmove. For clarification what
clarification what +N means in this context see |[range]|. +N means in this context see |[range]|.
LOOPING OVER TAB PAGES: LOOPING OVER TAB PAGES:

View File

@ -6345,7 +6345,7 @@ static void ex_tabnext(exarg_T *eap)
*/ */
static void ex_tabmove(exarg_T *eap) static void ex_tabmove(exarg_T *eap)
{ {
int tab_number = 9999; int tab_number;
if (eap->arg && *eap->arg != NUL) { if (eap->arg && *eap->arg != NUL) {
char_u *p = eap->arg; char_u *p = eap->arg;
@ -6361,17 +6361,35 @@ static void ex_tabmove(exarg_T *eap)
} else } else
p = eap->arg; p = eap->arg;
if (p == skipdigits(p)) { if (relative == 0) {
/* No numbers as argument. */ if (STRCMP(p, "$") == 0) {
eap->errmsg = e_invarg; tab_number = LAST_TAB_NR;
return; } 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 = getdigits_int(&p);
if (relative != 0)
tab_number = tab_number * relative + tabpage_index(curtab) - 1; ;
} else if (eap->addr_count != 0)
tab_number = eap->line2; tab_number = eap->line2;
if (**eap->cmdlinep == '-') {
--tab_number;
}
} else {
tab_number = LAST_TAB_NR;
}
tabpage_move(tab_number); tabpage_move(tab_number);
} }

View File

@ -453,7 +453,7 @@ static int included_patches[] = {
712, 712,
711, 711,
710, 710,
// 709, 709,
// 708, // 708,
707, 707,
706, 706,

View File

@ -3281,17 +3281,27 @@ void goto_tabpage_win(tabpage_T *tp, win_T *wp)
} }
} }
/* // Move the current tab page to after tab page "nr".
* Move the current tab page to before tab page "nr".
*/
void tabpage_move(int nr) void tabpage_move(int nr)
{ {
int n = nr; int n = 1;
tabpage_T *tp; tabpage_T *tp;
tabpage_T *tp_dst;
if (first_tabpage->tp_next == NULL) if (first_tabpage->tp_next == NULL)
return; 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. */ /* Remove the current tab page from the list of tab pages. */
if (curtab == first_tabpage) if (curtab == first_tabpage)
first_tabpage = curtab->tp_next; first_tabpage = curtab->tp_next;
@ -3304,15 +3314,13 @@ void tabpage_move(int nr)
tp->tp_next = curtab->tp_next; tp->tp_next = curtab->tp_next;
} }
/* Re-insert it at the specified position. */ // Re-insert it at the specified position.
if (n <= 0) { if (nr <= 0) {
curtab->tp_next = first_tabpage; curtab->tp_next = first_tabpage;
first_tabpage = curtab; first_tabpage = curtab;
} else { } else {
for (tp = first_tabpage; tp->tp_next != NULL && n > 1; tp = tp->tp_next) curtab->tp_next = tp_dst->tp_next;
--n; tp_dst->tp_next = curtab;
curtab->tp_next = tp->tp_next;
tp->tp_next = curtab;
} }
/* Need to redraw the tabline. Tab page contents doesn't change. */ /* Need to redraw the tabline. Tab page contents doesn't change. */

View File

@ -86,21 +86,35 @@ describe('tab pages', function()
feed('1gt') feed('1gt')
eq(1, eval('tabpagenr()')) eq(1, eval('tabpagenr()'))
execute('tabmove 5') execute('tabmove 5')
eq(6, eval('tabpagenr()')) eq(5, eval('tabpagenr()'))
execute('tabmove -2') execute('.tabmove')
eq(5, eval('tabpagenr()'))
execute('tabmove -')
eq(4, eval('tabpagenr()')) eq(4, eval('tabpagenr()'))
execute('tabmove +')
eq(5, eval('tabpagenr()'))
execute('tabmove -2')
eq(3, eval('tabpagenr()'))
execute('tabmove +4') execute('tabmove +4')
eq(8, eval('tabpagenr()')) eq(7, eval('tabpagenr()'))
execute('tabmove') execute('tabmove')
eq(10, eval('tabpagenr()')) eq(10, eval('tabpagenr()'))
execute('tabmove -20') execute('tabmove -20')
eq(1, eval('tabpagenr()')) eq(1, eval('tabpagenr()'))
execute('tabmove +20') execute('tabmove +20')
eq(10, eval('tabpagenr()')) eq(10, eval('tabpagenr()'))
execute('0tabmove')
eq(1, eval('tabpagenr()'))
execute('$tabmove')
eq(10, eval('tabpagenr()'))
execute('tabmove 0')
eq(1, eval('tabpagenr()'))
execute('tabmove $')
eq(10, eval('tabpagenr()'))
execute('3tabmove') execute('3tabmove')
eq(4, eval('tabpagenr()')) eq(4, eval('tabpagenr()'))
execute('7tabmove 5') execute('7tabmove 5')
eq(6, eval('tabpagenr()')) eq(5, eval('tabpagenr()'))
execute('let a="No error caught."') execute('let a="No error caught."')
execute('try') execute('try')
execute('tabmove foo') execute('tabmove foo')