diff options
author | Bram Moolenaar <Bram@vim.org> | 2012-07-06 18:27:39 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2012-07-06 18:27:39 +0200 |
commit | 8cb8dca2f0683a29a2cb441a8cd995d25c29d79c (patch) | |
tree | 5f470668d9ab29bac417a4d2083ebb8bb3cdb008 | |
parent | 0306ac33a53114113825242d22d103ee0e3504f9 (diff) | |
download | vim-git-8cb8dca2f0683a29a2cb441a8cd995d25c29d79c.tar.gz |
updated for version 7.3.591v7.3.591
Problem: Can only move to a tab by absolute number.
Solution: Move a number of tabs to the left or the right. (Lech Lorens)
-rw-r--r-- | runtime/doc/tabpage.txt | 10 | ||||
-rw-r--r-- | src/ex_cmds.h | 2 | ||||
-rw-r--r-- | src/ex_docmd.c | 37 | ||||
-rw-r--r-- | src/testdir/test62.in | 28 | ||||
-rw-r--r-- | src/testdir/test62.ok | 10 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/window.c | 2 |
7 files changed, 88 insertions, 3 deletions
diff --git a/runtime/doc/tabpage.txt b/runtime/doc/tabpage.txt index a30d3a179..a2da5b307 100644 --- a/runtime/doc/tabpage.txt +++ b/runtime/doc/tabpage.txt @@ -173,10 +173,20 @@ Other commands: REORDERING TAB PAGES: :tabm[ove] [N] *:tabm* *:tabmove* +:[N]tabm[ove] 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. +: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: diff --git a/src/ex_cmds.h b/src/ex_cmds.h index ac61f1a0a..cfe150225 100644 --- a/src/ex_cmds.h +++ b/src/ex_cmds.h @@ -944,7 +944,7 @@ EX(CMD_tabfind, "tabfind", ex_splitview, EX(CMD_tabfirst, "tabfirst", ex_tabnext, TRLBAR), EX(CMD_tabmove, "tabmove", ex_tabmove, - RANGE|NOTADR|ZEROR|COUNT|TRLBAR|ZEROR), + RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR), EX(CMD_tablast, "tablast", ex_tabnext, TRLBAR), EX(CMD_tabnext, "tabnext", ex_tabnext, diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 6740a51da..cc80c14b7 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -7478,7 +7478,42 @@ ex_tabnext(eap) ex_tabmove(eap) exarg_T *eap; { - tabpage_move(eap->addr_count == 0 ? 9999 : (int)eap->line2); + int tab_number = 9999; + + if (eap->arg && *eap->arg != NUL) + { + char_u *p = eap->arg; + int relative = 0; /* argument +N/-N means: move N places to the + * right/left relative to the current position. */ + + if (*eap->arg == '-') + { + relative = -1; + p = eap->arg + 1; + } + else if (*eap->arg == '+') + { + relative = 1; + p = eap->arg + 1; + } + 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); } /* diff --git a/src/testdir/test62.in b/src/testdir/test62.in index 1e514cd21..fd1844bdc 100644 --- a/src/testdir/test62.in +++ b/src/testdir/test62.in @@ -93,6 +93,34 @@ STARTTEST :endif :" :" +: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
+:" +:" :/^Results/,$w! test.out :qa! ENDTEST diff --git a/src/testdir/test62.ok b/src/testdir/test62.ok index 7625cd2e2..0ac1fcbbd 100644 --- a/src/testdir/test62.ok +++ b/src/testdir/test62.ok @@ -8,3 +8,13 @@ settabvar: pass tab drop 1: pass tab drop 2: pass tab drop 3: pass +1 +6 +4 +8 +10 +1 +10 +4 +6 +E474 caught. diff --git a/src/version.c b/src/version.c index 637abb7df..4bfec7865 100644 --- a/src/version.c +++ b/src/version.c @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 591, +/**/ 590, /**/ 589, diff --git a/src/window.c b/src/window.c index c65f49d79..6460684bc 100644 --- a/src/window.c +++ b/src/window.c @@ -3929,7 +3929,7 @@ tabpage_move(nr) } /* Re-insert it at the specified position. */ - if (n == 0) + if (n <= 0) { curtab->tp_next = first_tabpage; first_tabpage = curtab; |