diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2024-05-12 23:12:25 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2024-05-12 23:53:24 +0200 |
commit | 97c7646501d5cd6f57c57ce30acca89c5b8573ff (patch) | |
tree | a2e0e786f5f6b829ebb39b58e0e536ffd87c546c /runtime | |
parent | 8f0a166da4cd919947ef1ed634d350ef602acc63 (diff) | |
download | rneovim-97c7646501d5cd6f57c57ce30acca89c5b8573ff.tar.gz rneovim-97c7646501d5cd6f57c57ce30acca89c5b8573ff.tar.bz2 rneovim-97c7646501d5cd6f57c57ce30acca89c5b8573ff.zip |
refactor(api): nvim_win_xx_ns are EXPERIMENTAL
Problem:
The nvim_win_xx_ns function family introduced in ba0370b1d718d473d0ef51c35d88b98ba220082b
needs more bake-time. Currently it's narrowly defined for windows, but
other scopes ("buffer") and features are likely in the future.
Solution:
- Rename the API with double-underscore to mark it as EXPERIMENTAL.
TODO/FUTURE:
- Rename and change the signature to support more than just "window"
scope, and for other flexibility.
- Open question: we could choose either:
- "store scopes on namespaces", or
- "store namespaces on scopes (w:/b:/…)"
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/doc/api.txt | 14 | ||||
-rw-r--r-- | runtime/doc/news.txt | 2 | ||||
-rw-r--r-- | runtime/lua/vim/_meta/api.lua | 53 | ||||
-rw-r--r-- | runtime/lua/vim/highlight.lua | 4 |
4 files changed, 44 insertions, 29 deletions
diff --git a/runtime/doc/api.txt b/runtime/doc/api.txt index f593f14929..13884e865d 100644 --- a/runtime/doc/api.txt +++ b/runtime/doc/api.txt @@ -2777,7 +2777,7 @@ nvim_buf_set_extmark({buffer}, {ns_id}, {line}, {col}, {opts}) OSC 8 control sequence is used to generate a clickable hyperlink to this URL. • scoped: boolean (EXPERIMENTAL) enables "scoping" for the - extmark. See |nvim_win_add_ns()| + extmark. See |nvim__win_add_ns()| Return: ~ Id of the created/updated extmark @@ -2859,7 +2859,9 @@ nvim_set_decoration_provider({ns_id}, {opts}) ["end", tick] < -nvim_win_add_ns({window}, {ns_id}) *nvim_win_add_ns()* +nvim__win_add_ns({window}, {ns_id}) *nvim__win_add_ns()* + EXPERIMENTAL: this API will change in the future. + Scopes a namespace to the a window, so extmarks in the namespace will be active only in the given window. @@ -2870,7 +2872,9 @@ nvim_win_add_ns({window}, {ns_id}) *nvim_win_add_ns()* Return: ~ true if the namespace was added, else false -nvim_win_del_ns({window}, {ns_id}) *nvim_win_del_ns()* +nvim__win_del_ns({window}, {ns_id}) *nvim__win_del_ns()* + EXPERIMENTAL: this API will change in the future. + Unscopes a namespace (un-binds it from the given scope). Parameters: ~ @@ -2880,7 +2884,9 @@ nvim_win_del_ns({window}, {ns_id}) *nvim_win_del_ns()* Return: ~ true if the namespace was removed, else false -nvim_win_get_ns({window}) *nvim_win_get_ns()* +nvim__win_get_ns({window}) *nvim__win_get_ns()* + EXPERIMENTAL: this API will change in the future. + Gets the namespace scopes for a given window. Parameters: ~ diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt index b6add63595..42b6f4b14c 100644 --- a/runtime/doc/news.txt +++ b/runtime/doc/news.txt @@ -216,7 +216,7 @@ The following new APIs and features were added. |nvim_win_set_config()|. • |nvim_input_mouse()| supports mouse buttons "x1" and "x2". • Added |nvim_tabpage_set_win()| to set the current window of a tabpage. - • |nvim_win_add_ns()| can bind a |namespace| to a window-local scope(s). + • |nvim__win_add_ns()| can bind a |namespace| to a window-local scope(s). • Extmarks opt-in to this scoping via the `scoped` flag of |nvim_buf_set_extmark()|. • 'foldtext' now supports virtual text format. |fold-foldtext| diff --git a/runtime/lua/vim/_meta/api.lua b/runtime/lua/vim/_meta/api.lua index dbd3c61634..6edf2a5a96 100644 --- a/runtime/lua/vim/_meta/api.lua +++ b/runtime/lua/vim/_meta/api.lua @@ -144,6 +144,36 @@ function vim.api.nvim__stats() end --- @return any function vim.api.nvim__unpack(str) end +--- @private +--- EXPERIMENTAL: this API will change in the future. +--- +--- Scopes a namespace to the a window, so extmarks in the namespace will be +--- active only in the given window. +--- +--- @param window integer Window handle, or 0 for current window +--- @param ns_id integer Namespace +--- @return boolean +function vim.api.nvim__win_add_ns(window, ns_id) end + +--- @private +--- EXPERIMENTAL: this API will change in the future. +--- +--- Unscopes a namespace (un-binds it from the given scope). +--- +--- @param window integer Window handle, or 0 for current window +--- @param ns_id integer the namespace to remove +--- @return boolean +function vim.api.nvim__win_del_ns(window, ns_id) end + +--- @private +--- EXPERIMENTAL: this API will change in the future. +--- +--- Gets the namespace scopes for a given window. +--- +--- @param window integer Window handle, or 0 for current window +--- @return integer[] +function vim.api.nvim__win_get_ns(window) end + --- Adds a highlight to buffer. --- --- Useful for plugins that dynamically generate highlights to a buffer (like @@ -657,7 +687,7 @@ function vim.api.nvim_buf_line_count(buffer) end --- OSC 8 control sequence is used to generate a clickable --- hyperlink to this URL. --- • scoped: boolean (EXPERIMENTAL) enables "scoping" for the ---- extmark. See `nvim_win_add_ns()` +--- extmark. See `nvim__win_add_ns()` --- @return integer function vim.api.nvim_buf_set_extmark(buffer, ns_id, line, col, opts) end @@ -2114,14 +2144,6 @@ function vim.api.nvim_tabpage_set_var(tabpage, name, value) end --- @param win integer Window handle, must already belong to {tabpage} function vim.api.nvim_tabpage_set_win(tabpage, win) end ---- Scopes a namespace to the a window, so extmarks in the namespace will be ---- active only in the given window. ---- ---- @param window integer Window handle, or 0 for current window ---- @param ns_id integer Namespace ---- @return boolean -function vim.api.nvim_win_add_ns(window, ns_id) end - --- Calls a function with window as temporary current window. --- --- @param window integer Window handle, or 0 for current window @@ -2138,13 +2160,6 @@ function vim.api.nvim_win_call(window, fun) end --- hidden, even if 'hidden' is not set. function vim.api.nvim_win_close(window, force) end ---- Unscopes a namespace (un-binds it from the given scope). ---- ---- @param window integer Window handle, or 0 for current window ---- @param ns_id integer the namespace to remove ---- @return boolean -function vim.api.nvim_win_del_ns(window, ns_id) end - --- Removes a window-scoped (w:) variable --- --- @param window integer Window handle, or 0 for current window @@ -2181,12 +2196,6 @@ function vim.api.nvim_win_get_cursor(window) end --- @return integer function vim.api.nvim_win_get_height(window) end ---- Gets the namespace scopes for a given window. ---- ---- @param window integer Window handle, or 0 for current window ---- @return integer[] -function vim.api.nvim_win_get_ns(window) end - --- Gets the window number --- --- @param window integer Window handle, or 0 for current window diff --git a/runtime/lua/vim/highlight.lua b/runtime/lua/vim/highlight.lua index da3d7fd361..f278bd357f 100644 --- a/runtime/lua/vim/highlight.lua +++ b/runtime/lua/vim/highlight.lua @@ -129,7 +129,7 @@ function M.on_yank(opts) yank_cancel() end - vim.api.nvim_win_add_ns(winid, yank_ns) + vim.api.nvim__win_add_ns(winid, yank_ns) M.range(bufnr, yank_ns, higroup, "'[", "']", { regtype = event.regtype, inclusive = event.inclusive, @@ -141,7 +141,7 @@ function M.on_yank(opts) yank_timer = nil yank_cancel = nil pcall(vim.api.nvim_buf_clear_namespace, bufnr, yank_ns, 0, -1) - pcall(vim.api.nvim_win_del_ns, winid, yank_ns) + pcall(vim.api.nvim__win_del_ns, winid, yank_ns) end yank_timer = vim.defer_fn(yank_cancel, timeout) |