aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/api.txt8
-rw-r--r--runtime/lua/vim/_meta/api.lua8
-rw-r--r--src/nvim/api/win_config.c16
-rw-r--r--test/functional/api/window_spec.lua9
4 files changed, 27 insertions, 14 deletions
diff --git a/runtime/doc/api.txt b/runtime/doc/api.txt
index 1b00777532..125976342b 100644
--- a/runtime/doc/api.txt
+++ b/runtime/doc/api.txt
@@ -3291,11 +3291,11 @@ nvim_win_get_config({window}) *nvim_win_get_config()*
Map defining the window configuration, see |nvim_open_win()|
nvim_win_set_config({window}, {config}) *nvim_win_set_config()*
- 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.
Parameters: ~
• {window} Window handle, or 0 for current window
diff --git a/runtime/lua/vim/_meta/api.lua b/runtime/lua/vim/_meta/api.lua
index 94eab72291..4a179d49f3 100644
--- a/runtime/lua/vim/_meta/api.lua
+++ b/runtime/lua/vim/_meta/api.lua
@@ -2207,11 +2207,11 @@ function vim.api.nvim_win_remove_ns(window, ns_id) end
--- @param buffer integer Buffer handle
function vim.api.nvim_win_set_buf(window, buffer) end
---- 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.
---
--- @param window integer Window handle, or 0 for current window
--- @param config vim.api.keyset.win_config Map defining the window configuration, see `nvim_open_win()`
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;
}
}
diff --git a/test/functional/api/window_spec.lua b/test/functional/api/window_spec.lua
index 30235d6b84..246ff50ddc 100644
--- a/test/functional/api/window_spec.lua
+++ b/test/functional/api/window_spec.lua
@@ -1727,6 +1727,15 @@ describe('API/win', function()
config = api.nvim_win_get_config(win)
eq('', config.relative)
eq('below', config.split)
+
+ eq(
+ "non-float with 'win' requires at least 'split' or 'vertical'",
+ pcall_err(api.nvim_win_set_config, 0, { win = 0 })
+ )
+ eq(
+ "non-float with 'win' requires at least 'split' or 'vertical'",
+ pcall_err(api.nvim_win_set_config, 0, { win = 0, relative = '' })
+ )
end)
it('creates top-level splits', function()