aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/api
diff options
context:
space:
mode:
authorSean Dewar <seandewar@users.noreply.github.com>2024-02-07 21:44:42 +0000
committerSean Dewar <6256228+seandewar@users.noreply.github.com>2024-03-08 23:24:04 +0000
commitb1577d371a6db43222de9e3a525def82320ebdb1 (patch)
tree0be83eff7c0686f63c553f92b1de0486f1867706 /src/nvim/api
parent5d58136cccc760f6d95eb45b46f2ad60f06b103b (diff)
downloadrneovim-b1577d371a6db43222de9e3a525def82320ebdb1.tar.gz
rneovim-b1577d371a6db43222de9e3a525def82320ebdb1.tar.bz2
rneovim-b1577d371a6db43222de9e3a525def82320ebdb1.zip
fix(api): make win_set_config with "win" for splits need "split/vertical"
Problem: currently, for splits, nvim_win_set_config accepts win without any of split or vertical set, which has little effect and seems error-prone. Solution: require at least one of split or vertical to also be set for splits. Also, update nvim_win_set_config docs, as it's no longer limited to just floating and external windows.
Diffstat (limited to 'src/nvim/api')
-rw-r--r--src/nvim/api/win_config.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/nvim/api/win_config.c b/src/nvim/api/win_config.c
index 557c2f37f9..21d6d59b1e 100644
--- a/src/nvim/api/win_config.c
+++ b/src/nvim/api/win_config.c
@@ -361,11 +361,11 @@ static int win_split_flags(WinSplit split, bool toplevel)
return flags;
}
-/// Configures window layout. Currently only for floating and external windows
-/// (including changing a split window to those layouts).
+/// Configures window layout. Cannot be used to move the last window in a
+/// tabpage to a different one.
///
-/// When reconfiguring a floating window, absent option keys will not be
-/// changed. `row`/`col` and `relative` must be reconfigured together.
+/// When reconfiguring a window, absent option keys will not be changed.
+/// `row`/`col` and `relative` must be reconfigured together.
///
/// @see |nvim_open_win()|
///
@@ -1099,11 +1099,15 @@ static bool parse_float_config(Dict(win_config) *config, WinConfig *fconfig, boo
fconfig->window = config->win;
}
}
- } else if (has_relative) {
- if (HAS_KEY_X(config, win)) {
+ } else if (HAS_KEY_X(config, win)) {
+ if (has_relative) {
api_set_error(err, kErrorTypeValidation,
"'win' key is only valid with relative='win' and relative=''");
return false;
+ } else if (!is_split) {
+ api_set_error(err, kErrorTypeValidation,
+ "non-float with 'win' requires at least 'split' or 'vertical'");
+ return false;
}
}