fix(client): VimwikiColorize accepts a range (no more E481 on selection)
Selecting text and running :VimwikiColorize {color} raised
"E481: No range allowed" — Vim prepends '<,'> to the command when invoked
from a visual selection, but the command was defined without -range.
All four colorize command defs (Vim + Neovim, Vimwiki* + Nuwiki*) are now
-range and forward the range count to the handler. A ranged (visual)
invocation wraps the '< / '> selection; a bare invocation wraps the cword.
The x-mode <Leader>wc mapping passes the visual flag explicitly.
The Vim-branch colorize() gained selection support (it was cword-only),
matching the Neovim branch, so both clients wrap a visual selection
identically. visual_selection_range() (Lua) no longer gates on
vim.fn.visualmode() — the explicit visual flag now carries that intent, and
the marks check guards unset selections.
Tests: cmd.Colorize_range_wraps_selection (nvim) and
colorize.{command_wraps_cword,visual_wraps_selection,ranged_command_no_error}
(vim). nvim 268, vim 257+18, all green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -951,9 +951,11 @@ end
|
||||
--- the template is `<span style="color:%c">%s</span>` with `%c`
|
||||
--- replaced by the user-supplied colour and `%s` by the wrapped text.
|
||||
--- Pure-Lua; no server roundtrip needed.
|
||||
-- Read the last visual selection from the `'<`/`'>` marks. Only meaningful
|
||||
-- when the caller knows it's acting on a selection (colorize's `visual` flag);
|
||||
-- we deliberately don't gate on vim.fn.visualmode() here since that reflects
|
||||
-- session state, not whether the marks are the selection we want right now.
|
||||
local function visual_selection_range()
|
||||
local mode = vim.fn.visualmode()
|
||||
if mode == '' then return nil end
|
||||
local s = vim.api.nvim_buf_get_mark(0, '<')
|
||||
local e = vim.api.nvim_buf_get_mark(0, '>')
|
||||
if s[1] == 0 or e[1] == 0 then return nil end
|
||||
|
||||
Reference in New Issue
Block a user