summaryrefslogtreecommitdiff
path: root/src/ex_docmd.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2012-07-06 18:27:39 +0200
committerBram Moolenaar <Bram@vim.org>2012-07-06 18:27:39 +0200
commit8cb8dca2f0683a29a2cb441a8cd995d25c29d79c (patch)
tree5f470668d9ab29bac417a4d2083ebb8bb3cdb008 /src/ex_docmd.c
parent0306ac33a53114113825242d22d103ee0e3504f9 (diff)
downloadvim-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)
Diffstat (limited to 'src/ex_docmd.c')
-rw-r--r--src/ex_docmd.c37
1 files changed, 36 insertions, 1 deletions
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);
}
/*