aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarco Hinz <mh.codebro@gmail.com>2022-05-12 16:43:20 +0200
committerGitHub <noreply@github.com>2022-05-12 16:43:20 +0200
commit8fba428bc6f36ae038a9286517e15b33257a1359 (patch)
tree3d0297f740c695389c65a2ab867ec03eb749ff08 /src
parent78a1e6bc0060eec1afa7de099c4cee35ca35527f (diff)
downloadrneovim-8fba428bc6f36ae038a9286517e15b33257a1359.tar.gz
rneovim-8fba428bc6f36ae038a9286517e15b33257a1359.tar.bz2
rneovim-8fba428bc6f36ae038a9286517e15b33257a1359.zip
fix(cmd): make :-tabmove work with modifiers (#18447)
`:tabmove` takes either an argument (`:tabmove -`) or an address (`:-tabmove`). The code assumed that `:tabmove` is the first command on the cmdline, but that is not the case when using additional modifiers like `:silent`. Make the addr parsing more robust by searching the command first, then going back to check for a potential address `-`.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/ex_docmd.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index 91b8628c33..34f306bdfd 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -5248,7 +5248,9 @@ static int get_tabpage_arg(exarg_T *eap)
tab_number = 0;
} else {
tab_number = (int)eap->line2;
- if (!unaccept_arg0 && *skipwhite(*eap->cmdlinep) == '-') {
+ char *cmdp = eap->cmd;
+ while (--cmdp > *eap->cmdlinep && (*cmdp == ' ' || ascii_isdigit(*cmdp))) {}
+ if (!unaccept_arg0 && *cmdp == '-') {
tab_number--;
if (tab_number < unaccept_arg0) {
eap->errmsg = e_invarg;