mirror of
https://github.com/neovim/neovim.git
synced 2025-10-22 17:11:49 +00:00
feat(lua): add vim._with
It's a function to perform operations in their own sealed context,
similar to pythons `with`. This helps ease operations where you need to
perform an operation in a specific context, and then restore the
context.
Marked as private for now as it's not ready for public use. The current
plan is to start using this internally so we can discover and fix any
problems. Once this is ready to be exposed it will be renamed to
`vim.with`.
Usage:
```lua
local ret = vim._with({context = val}, function()
return "hello"
end)
```
, where `context` is any combination of:
- `buf`
- `emsg_silent`
- `hide`
- `horizontal`
- `keepalt`
- `keepjumps`
- `keepmarks`
- `keeppatterns`
- `lockmarks`
- `noautocmd`
- `options`
- `sandbox`
- `silent`
- `unsilent`
- `win`
(except for `win` and `buf` which can't be used at the same time). This
list will most likely be expanded in the future.
Work on https://github.com/neovim/neovim/issues/19832.
Co-authored-by: Lewis Russell <lewis6991@gmail.com>
This commit is contained in:
@@ -194,14 +194,9 @@ local function toggle_lines(line_start, line_end, ref_position)
|
||||
-- - Debatable for highlighting in text area (like LSP semantic tokens).
|
||||
-- Mostly because it causes flicker as highlighting is preserved during
|
||||
-- comment toggling.
|
||||
package.loaded['vim._comment']._lines = vim.tbl_map(f, lines)
|
||||
local lua_cmd = string.format(
|
||||
'vim.api.nvim_buf_set_lines(0, %d, %d, false, package.loaded["vim._comment"]._lines)',
|
||||
line_start - 1,
|
||||
line_end
|
||||
)
|
||||
vim.cmd.lua({ lua_cmd, mods = { lockmarks = true } })
|
||||
package.loaded['vim._comment']._lines = nil
|
||||
vim._with({ lockmarks = true }, function()
|
||||
vim.api.nvim_buf_set_lines(0, line_start - 1, line_end, false, vim.tbl_map(f, lines))
|
||||
end)
|
||||
end
|
||||
|
||||
--- Operator which toggles user-supplied range of lines
|
||||
|
||||
Reference in New Issue
Block a user