guid.nvim/lua/guid.lua

73 lines
2.3 KiB
Lua
Raw Normal View History

2023-01-01 03:51:09 +00:00
local function get_cursor_pos()
local _, row, col, _ = unpack(vim.fn.getpos('.'))
return {row = row, col = col}
end
2022-12-31 17:56:22 +00:00
2023-01-01 04:56:47 +00:00
local function insert_text_at_pos(text, pos)
local line = vim.fn.getline(pos.row)
---@diagnostic disable-next-line: param-type-mismatch
local prefix = string.sub(line, 0, pos.col - 1)
---@diagnostic disable-next-line: param-type-mismatch
local suffix = string.sub(line, pos.col)
vim.fn.setline(pos.row, prefix .. text .. suffix)
end
2023-01-01 03:51:09 +00:00
local function guid_generate()
local bytes = {}
for i = 1, 16 do
bytes[i] = math.random(0, 255)
end
return bytes
end
2023-01-01 05:09:47 +00:00
local function guid_print(guid, style)
if style == '' then
style = 'd'
end
2023-01-01 03:51:09 +00:00
2023-01-01 04:56:47 +00:00
-- Format specifier definition:
-- https://learn.microsoft.com/en-us/dotnet/api/system.guid.tostring?view=net-7.0
local format = nil
local style_lower = style:lower()
if style_lower == 'n' then
-- 00000000000000000000000000000000
format = '%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x'
elseif style_lower == 'd' then
-- 00000000-0000-0000-0000-000000000000
format = '%.2x%.2x%.2x%.2x-%.2x%.2x-%.2x%.2x-%.2x%.2x-%.2x%.2x%.2x%.2x%.2x%.2x'
elseif style_lower == 'b' then
-- {00000000-0000-0000-0000-000000000000}
format = '{%.2x%.2x%.2x%.2x-%.2x%.2x-%.2x%.2x-%.2x%.2x-%.2x%.2x%.2x%.2x%.2x%.2x}'
elseif style_lower == 'p' then
-- (00000000-0000-0000-0000-000000000000)
format = '(%.2x%.2x%.2x%.2x-%.2x%.2x-%.2x%.2x-%.2x%.2x-%.2x%.2x%.2x%.2x%.2x%.2x)'
elseif style_lower == 'x' then
-- {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}
format = '{0x%.2x%.2x%.2x%.2x,0x%.2x%.2x,0x%.2x%.2x,{0x%.2x,0x%.2x,0x%.2x,0x%.2x,0x%.2x,0x%.2x,0x%.2x,0x%.2x}}'
end
2023-01-01 05:09:47 +00:00
local guid_printed = string.format(format, unpack(guid))
2023-01-01 04:56:47 +00:00
if style:upper() == style then
2023-01-01 05:09:47 +00:00
guid_printed = guid_printed:upper():gsub('X', 'x')
2023-01-01 04:56:47 +00:00
end
2023-01-01 05:09:47 +00:00
return guid_printed
2023-01-01 03:51:09 +00:00
end
2023-01-01 04:56:47 +00:00
local function guid_insert(style)
2023-01-01 03:51:09 +00:00
local pos = get_cursor_pos()
local guid = guid_generate()
2023-01-01 05:09:47 +00:00
local guid_printed = guid_print(guid, style)
insert_text_at_pos(guid_printed, pos)
end
local function guid_format()
2022-12-31 17:56:22 +00:00
end
return {
2023-01-01 05:09:47 +00:00
guid_format = guid_format,
guid_insert = guid_insert,
2022-12-31 17:56:22 +00:00
}