1
0
forked from aniani/vim

patch 7.4.709

Problem:    ":tabmove" does not work as documented.
Solution:   Make it work consistently.  Update documentation and add tests.
            (Hirohito Higashi)
This commit is contained in:
Bram Moolenaar
2015-04-21 18:08:39 +02:00
parent 77354e78a8
commit 40ce3a4e1f
6 changed files with 93 additions and 38 deletions

View File

@@ -4120,18 +4120,27 @@ goto_tabpage_win(tp, wp)
}
/*
* Move the current tab page to before tab page "nr".
* Move the current tab page to after tab page "nr".
*/
void
tabpage_move(nr)
int nr;
{
int n = nr;
tabpage_T *tp;
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,17 +4155,15 @@ tabpage_move(nr)
}
/* Re-insert it at the specified position. */
if (n <= 0)
if (nr <= 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;
curtab->tp_next = tp_dst->tp_next;
tp_dst->tp_next = curtab;
}
/* Need to redraw the tabline. Tab page contents doesn't change. */