aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2022-05-02 08:27:20 +0200
committerGitHub <noreply@github.com>2022-05-02 08:27:20 +0200
commita23440bf7cf5102f18092bb4239c198e217bf928 (patch)
tree5e7d4d08ba5be6f3a6dbcfcdd5f81981f6e3547f /src
parent371dfb1746325ff9f219d4a42262e6409b951362 (diff)
parentbfb72f637b9d8dc9e4a05479c2b1a0fe1fbc5e36 (diff)
downloadrneovim-a23440bf7cf5102f18092bb4239c198e217bf928.tar.gz
rneovim-a23440bf7cf5102f18092bb4239c198e217bf928.tar.bz2
rneovim-a23440bf7cf5102f18092bb4239c198e217bf928.zip
Merge pull request #18354 from famiu/feat/api/parse_cmd
fix(api): make `nvim_parse_cmd` preserve command modifiers
Diffstat (limited to 'src')
-rw-r--r--src/nvim/api/vim.c30
-rw-r--r--src/nvim/ex_docmd.c2
2 files changed, 17 insertions, 15 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index 3d1b5eade4..061653c5af 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -2624,27 +2624,27 @@ Dictionary nvim_parse_cmd(String str, Dictionary opts, Error *err)
PUT(mods, "emsg_silent", BOOLEAN_OBJ(cmdinfo.emsg_silent));
PUT(mods, "sandbox", BOOLEAN_OBJ(cmdinfo.sandbox));
PUT(mods, "noautocmd", BOOLEAN_OBJ(cmdinfo.noautocmd));
- PUT(mods, "tab", INTEGER_OBJ(cmdmod.tab));
+ PUT(mods, "tab", INTEGER_OBJ(cmdinfo.cmdmod.tab));
PUT(mods, "verbose", INTEGER_OBJ(cmdinfo.verbose));
- PUT(mods, "browse", BOOLEAN_OBJ(cmdmod.browse));
- PUT(mods, "confirm", BOOLEAN_OBJ(cmdmod.confirm));
- PUT(mods, "hide", BOOLEAN_OBJ(cmdmod.hide));
- PUT(mods, "keepalt", BOOLEAN_OBJ(cmdmod.keepalt));
- PUT(mods, "keepjumps", BOOLEAN_OBJ(cmdmod.keepjumps));
- PUT(mods, "keepmarks", BOOLEAN_OBJ(cmdmod.keepmarks));
- PUT(mods, "keeppatterns", BOOLEAN_OBJ(cmdmod.keeppatterns));
- PUT(mods, "lockmarks", BOOLEAN_OBJ(cmdmod.lockmarks));
- PUT(mods, "noswapfile", BOOLEAN_OBJ(cmdmod.noswapfile));
- PUT(mods, "vertical", BOOLEAN_OBJ(cmdmod.split & WSP_VERT));
+ PUT(mods, "browse", BOOLEAN_OBJ(cmdinfo.cmdmod.browse));
+ PUT(mods, "confirm", BOOLEAN_OBJ(cmdinfo.cmdmod.confirm));
+ PUT(mods, "hide", BOOLEAN_OBJ(cmdinfo.cmdmod.hide));
+ PUT(mods, "keepalt", BOOLEAN_OBJ(cmdinfo.cmdmod.keepalt));
+ PUT(mods, "keepjumps", BOOLEAN_OBJ(cmdinfo.cmdmod.keepjumps));
+ PUT(mods, "keepmarks", BOOLEAN_OBJ(cmdinfo.cmdmod.keepmarks));
+ PUT(mods, "keeppatterns", BOOLEAN_OBJ(cmdinfo.cmdmod.keeppatterns));
+ PUT(mods, "lockmarks", BOOLEAN_OBJ(cmdinfo.cmdmod.lockmarks));
+ PUT(mods, "noswapfile", BOOLEAN_OBJ(cmdinfo.cmdmod.noswapfile));
+ PUT(mods, "vertical", BOOLEAN_OBJ(cmdinfo.cmdmod.split & WSP_VERT));
const char *split;
- if (cmdmod.split & WSP_BOT) {
+ if (cmdinfo.cmdmod.split & WSP_BOT) {
split = "botright";
- } else if (cmdmod.split & WSP_TOP) {
+ } else if (cmdinfo.cmdmod.split & WSP_TOP) {
split = "topleft";
- } else if (cmdmod.split & WSP_BELOW) {
+ } else if (cmdinfo.cmdmod.split & WSP_BELOW) {
split = "belowright";
- } else if (cmdmod.split & WSP_ABOVE) {
+ } else if (cmdinfo.cmdmod.split & WSP_ABOVE) {
split = "aboveleft";
} else {
split = "";
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index 7b5d14a404..b2a71b386b 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -1306,6 +1306,7 @@ bool parse_cmdline(char_u *cmdline, exarg_T *eap, CmdParseInfo *cmdinfo)
char *errormsg = NULL;
char *cmd;
char *p;
+ cmdmod_T save_cmdmod = cmdmod;
// Initialize cmdinfo
memset(cmdinfo, 0, sizeof(*cmdinfo));
@@ -1346,6 +1347,7 @@ bool parse_cmdline(char_u *cmdline, exarg_T *eap, CmdParseInfo *cmdinfo)
p_verbose = eap->verbose_save;
}
cmdinfo->cmdmod = cmdmod;
+ cmdmod = save_cmdmod;
// Save location after command modifiers
cmd = eap->cmd;