mirror of
https://github.com/neovim/neovim.git
synced 2026-08-27 17:41:48 +00:00
feat(pos,range)!: remove range.cursor() and range:to_cursor(),
Problem: - A window can only have one cursor, ranges selected by the cursor are typically obtained by marks like ">" and "<", instead of calling get_cursor() twice. - `vim.Range` is described as end-exclusive, but the current `range.cursor()`/`range:to_cursor()` are end-inclusive. - Conversion between `vim.Range` and mark-indexed range can be done by `range.mark()`/`range:to_mark()` Solution: Remove `range.cursor()` and `range:to_cursor()`,
This commit is contained in:
@@ -348,7 +348,7 @@ function Completor:accept(item)
|
||||
api.nvim_buf_set_text(self.bufnr, start_row, start_col, end_row, end_col, lines)
|
||||
local win = api.nvim_get_current_win()
|
||||
win = api.nvim_win_get_buf(win) == self.bufnr and win or vim.fn.bufwinid(self.bufnr)
|
||||
local row, col = item.range:to_cursor()
|
||||
local row, col = item.range:to_mark()
|
||||
api.nvim_win_set_cursor(win, {
|
||||
row + #lines - 1,
|
||||
(#lines == 1 and col or 0) + #lines[#lines],
|
||||
|
||||
@@ -278,6 +278,15 @@ function M.lsp(buf, pos, position_encoding)
|
||||
end
|
||||
|
||||
--- Converts |vim.Pos| to cursor position (see |api-indexing|).
|
||||
---
|
||||
--- Example:
|
||||
--- ```lua
|
||||
--- local pos = vim.pos(0, 3, 5)
|
||||
---
|
||||
--- -- Convert to cursor position, you can call it in a method style.
|
||||
--- local cursor_pos = { pos:to_cursor() }
|
||||
--- vim.api.nvim_win_set_cursor(0, cursor_pos)
|
||||
--- ```
|
||||
---@param pos vim.Pos
|
||||
---@return integer, integer
|
||||
function M.to_cursor(pos)
|
||||
|
||||
@@ -438,52 +438,6 @@ function M.extmark(buf, start_row, start_col, end_row, end_col)
|
||||
return M.new(start, end_)
|
||||
end
|
||||
|
||||
--- Converts |vim.Range| to mark-like range (see |api-indexing|).
|
||||
---
|
||||
--- Example:
|
||||
--- ```lua
|
||||
--- local range = vim.range(0, 3, 5, 4, 0)
|
||||
---
|
||||
--- -- Convert to cursor range, you can call it in a method style.
|
||||
--- local cursor_range = range:to_cursor()
|
||||
--- ```
|
||||
---@param range vim.Range
|
||||
function M.to_cursor(range)
|
||||
validate('range', range, 'table')
|
||||
|
||||
local srow, scol = vim.pos(range.buf, range[1], range[2]):to_cursor()
|
||||
local erow, ecol = vim.pos(range.buf, range[3], range[4]):to_cursor()
|
||||
return srow, scol, erow, ecol
|
||||
end
|
||||
|
||||
--- Creates a new |vim.Range| from mark-like range (see |api-indexing|).
|
||||
---
|
||||
--- Example:
|
||||
--- ```lua
|
||||
--- local start = vim.api.nvim_win_get_cursor(0)
|
||||
--- -- move the cursor
|
||||
--- local end_ = vim.api.nvim_win_get_cursor(0)
|
||||
---
|
||||
--- local range = vim.range.cursor(0, start, end_)
|
||||
--- ```
|
||||
---@param buf integer
|
||||
---@param start_pos [integer, integer]
|
||||
---@param end_pos [integer, integer]
|
||||
function M.cursor(buf, start_pos, end_pos)
|
||||
validate('buf', buf, 'number')
|
||||
validate('range', start_pos, 'table')
|
||||
validate('range', end_pos, 'table')
|
||||
|
||||
if buf == 0 then
|
||||
buf = api.nvim_get_current_buf()
|
||||
end
|
||||
|
||||
local start = vim.pos.cursor(buf, start_pos)
|
||||
local end_ = vim.pos.cursor(buf, end_pos)
|
||||
|
||||
return M.new(start, end_)
|
||||
end
|
||||
|
||||
-- Overload `Range.new` to allow calling this module as a function.
|
||||
setmetatable(M, {
|
||||
__call = function(_, ...)
|
||||
|
||||
Reference in New Issue
Block a user