diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt index 873cfd6962..cf764f91ce 100644 --- a/runtime/doc/lua.txt +++ b/runtime/doc/lua.txt @@ -3986,20 +3986,23 @@ 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()|. - • {to_cursor} (`fun(pos: vim.Pos): [integer, integer]`) See - |Pos:to_cursor()|. - • {cursor} (`fun(pos: [integer, integer])`) See |Pos:cursor()|. + 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()|. + • {to_extmark} (`fun(pos: vim.Pos): [integer, integer]`) See + |Pos:to_extmark()|. + • {extmark} (`fun(pos: [integer, integer])`) See |Pos:extmark()|. Pos:cursor({pos}) *Pos:cursor()* @@ -4008,6 +4011,12 @@ Pos:cursor({pos}) *Pos:cursor()* Parameters: ~ • {pos} (`[integer, integer]`) +Pos:extmark({pos}) *Pos:extmark()* + Creates a new |vim.Pos| from extmark position. + + Parameters: ~ + • {pos} (`[integer, integer]`) + Pos:lsp({buf}, {pos}, {position_encoding}) *Pos:lsp()* Creates a new |vim.Pos| from `lsp.Position`. @@ -4036,6 +4045,15 @@ Pos:to_cursor({pos}) *Pos:to_cursor()* Return: ~ (`[integer, integer]`) +Pos:to_extmark({pos}) *Pos:to_extmark()* + Converts |vim.Pos| to extmark 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 index ed563e2e23..56bf500ec2 100644 --- a/runtime/lua/vim/pos.lua +++ b/runtime/lua/vim/pos.lua @@ -191,6 +191,20 @@ function Pos.cursor(pos) return Pos.new(pos[1] - 1, pos[2]) end +--- Converts |vim.Pos| to extmark position. +---@param pos vim.Pos +---@return [integer, integer] +function Pos.to_extmark(pos) + return { pos.row, pos.col } +end + +--- Creates a new |vim.Pos| from extmark position. +---@param pos [integer, integer] +function Pos.extmark(pos) + local row, col = unpack(pos) + return Pos.new(row, col) +end + -- Overload `Range.new` to allow calling this module as a function. setmetatable(Pos, { __call = function(_, ...)