neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 7499c9f9a754b5af052f2b61aeaf491045268f80
parent a4a690e59753360e72b00cc301a0e6f624b70123
Author: Yi Ming <ofseed@foxmail.com>
Date:   Mon, 18 Aug 2025 20:56:17 +0800

feat(lua): conversion between cursor positions

Diffstat:
Mruntime/doc/lua.txt | 38++++++++++++++++++++++++++++----------
Mruntime/lua/vim/pos.lua | 13+++++++++++++
2 files changed, 41 insertions(+), 10 deletions(-)

diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt @@ -3986,19 +3986,28 @@ comparisons and conversions between various types of positions. as format conversions. Fields: ~ - • {row} (`integer`) 0-based byte index. - • {col} (`integer`) 0-based byte index. - • {buf}? (`integer`) Optional buffer handle. + • {row} (`integer`) 0-based byte index. + • {col} (`integer`) 0-based byte index. + • {buf}? (`integer`) Optional buffer handle. - When specified, it indicates that this position belongs to a - specific buffer. This field is required when performing - position conversions. - • {to_lsp} (`fun(pos: vim.Pos, position_encoding: lsp.PositionEncodingKind)`) - See |Pos:to_lsp()|. - • {lsp} (`fun(buf: integer, pos: lsp.Position, position_encoding: lsp.PositionEncodingKind)`) - See |Pos:lsp()|. + When specified, it indicates that this position belongs + to a specific buffer. This field is required when + performing position conversions. + • {to_lsp} (`fun(pos: vim.Pos, position_encoding: lsp.PositionEncodingKind)`) + See |Pos:to_lsp()|. + • {lsp} (`fun(buf: integer, pos: lsp.Position, position_encoding: lsp.PositionEncodingKind)`) + See |Pos:lsp()|. + • {to_cursor} (`fun(pos: vim.Pos): [integer, integer]`) See + |Pos:to_cursor()|. + • {cursor} (`fun(pos: [integer, integer])`) See |Pos:cursor()|. +Pos:cursor({pos}) *Pos:cursor()* + Creates a new |vim.Pos| from cursor position. + + Parameters: ~ + • {pos} (`[integer, integer]`) + Pos:lsp({buf}, {pos}, {position_encoding}) *Pos:lsp()* Creates a new |vim.Pos| from `lsp.Position`. @@ -4018,6 +4027,15 @@ Pos:lsp({buf}, {pos}, {position_encoding}) *Pos:lsp()* • {pos} (`lsp.Position`) • {position_encoding} (`lsp.PositionEncodingKind`) +Pos:to_cursor({pos}) *Pos:to_cursor()* + Converts |vim.Pos| to cursor position. + + Parameters: ~ + • {pos} (`vim.Pos`) See |vim.Pos|. + + Return: ~ + (`[integer, integer]`) + Pos:to_lsp({pos}, {position_encoding}) *Pos:to_lsp()* Converts |vim.Pos| to `lsp.Position`. diff --git a/runtime/lua/vim/pos.lua b/runtime/lua/vim/pos.lua @@ -178,6 +178,19 @@ function Pos.lsp(buf, pos, position_encoding) return Pos.new(row, col, { buf = buf }) end +--- Converts |vim.Pos| to cursor position. +---@param pos vim.Pos +---@return [integer, integer] +function Pos.to_cursor(pos) + return { pos.row + 1, pos.col } +end + +--- Creates a new |vim.Pos| from cursor position. +---@param pos [integer, integer] +function Pos.cursor(pos) + return Pos.new(pos[1] - 1, pos[2]) +end + -- Overload `Range.new` to allow calling this module as a function. setmetatable(Pos, { __call = function(_, ...)