You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.8 KiB
65 lines
1.8 KiB
2 years ago
|
local M = {}
|
||
|
|
||
|
function M.map(mode, lhs, rhs, opts)
|
||
|
local options = { noremap = true }
|
||
|
if opts then
|
||
|
options = vim.tbl_extend("force", options, opts)
|
||
|
end
|
||
|
vim.keymap.set(mode, lhs, rhs, options)
|
||
|
end
|
||
|
|
||
|
-- Print contents of `tbl`, with indentation.
|
||
|
-- `indent` sets the initial level of indentation.
|
||
|
function M.tprint(tbl, indent)
|
||
|
if not indent then indent = 0 end
|
||
|
if type(tbl) == "table" then
|
||
|
for k, v in pairs(tbl) do
|
||
|
local formatting = string.rep(" ", indent) .. k .. ": "
|
||
|
if type(v) == "table" then
|
||
|
--print(string.rep(" ", indent) .. k .. ": ")
|
||
|
print(formatting)
|
||
|
M.tprint(v, indent + 1)
|
||
|
elseif type(v) == "string" then
|
||
|
print(formatting .. v)
|
||
|
else
|
||
|
--print(string.rep(" ", indent) .. k .. ": " .. v)
|
||
|
print(formatting .. tostring(v))
|
||
|
end
|
||
|
end
|
||
|
elseif type(tbl) == "string" then
|
||
|
print(tbl)
|
||
|
else
|
||
|
print(tostring(tbl))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function M.dump(o)
|
||
|
if type(o) == 'table' then
|
||
|
local s = '{ '
|
||
|
for k, v in pairs(o) do
|
||
|
if type(k) ~= 'number' then k = '"' .. k .. '"' end
|
||
|
s = s .. '[' .. k .. '] = ' .. M.dump(v) .. ','
|
||
|
end
|
||
|
return s .. '} '
|
||
|
else
|
||
|
return tostring(o)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function M.getLine(lines, startCol)
|
||
|
local count = 0
|
||
|
local currentLine = 0
|
||
|
for line in lines:gmatch("[^\n]*\n?") do
|
||
|
local currentCount = count + string.len(line) + 2
|
||
|
if currentCount >= startCol then
|
||
|
local lineStartCol = startCol - count
|
||
|
return line, currentLine, lineStartCol
|
||
|
else
|
||
|
currentLine = currentLine + 1
|
||
|
count = currentCount
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return M
|