Make records editable

main
Micke Nordin 5 days ago
parent d7ebfc232a
commit 562717b72a

@ -1,6 +1,8 @@
local pickers = require("telescope.pickers") local action_state = require('telescope.actions.state')
local finders = require("telescope.finders") local actions = require('telescope.actions')
local conf = require("telescope.config").values local conf = require("telescope.config").values
local finders = require("telescope.finders")
local pickers = require("telescope.pickers")
local previewers = require("telescope.previewers") local previewers = require("telescope.previewers")
local log = require('plenary.log').new { local log = require('plenary.log').new {
plugin = 'telescope_knot', plugin = 'telescope_knot',
@ -8,7 +10,7 @@ local log = require('plenary.log').new {
} }
local _get_name = function(record) local _get_name = function(record)
local name = record.rtype .. " " .. record.name .. " " .. record.data local name = record.name .. " (" .. record.rtype .. "): " .. record.data
return name return name
end end
@ -18,7 +20,8 @@ local _filter_records = function(rec, records)
for _, record in ipairs(records) do for _, record in ipairs(records) do
local name = _get_name(record) local name = _get_name(record)
if name == record_name then if name == record_name then
r = { "ZONE", record.zone, "RTYPE", record.rtype, "NAME", record.name, "DATA", record.data, "TTL", record.ttl, "URL", record.url } r = { "ZONE: " .. record.zone, "RTYPE: " .. record.rtype, "NAME: " .. record.name, "DATA: " .. record.data, "TTL: " ..
record.ttl, "URL: " .. record.url }
end end
end end
return r return r
@ -57,6 +60,55 @@ telescope_knot.zones = function(opts)
end end
}), }),
attach_mappings = function(prompt_bufnr)
actions.select_default:replace(function()
local entry = action_state.get_selected_entry()
local record = _filter_records(entry, records)
actions.close(prompt_bufnr)
local buffer = vim.api.nvim_create_buf(false, true)
vim.api.nvim_buf_set_lines(buffer, 0, 0, false, record)
local width = vim.api.nvim_win_get_width(0)
local height = vim.api.nvim_win_get_height(0) - 10
local _ = vim.api.nvim_open_win(buffer, true,
{ relative = 'win', bufpos = { 0, 0 }, width = width, height = height, border = 'rounded' })
vim.api.nvim_create_autocmd({ "BufWinLeave" }, {
buffer = buffer,
callback = function(_)
local new = vim.api.nvim_buf_get_lines(buffer, 0, -1, false)
if new ~= record then
local cleanold = {}
local changed = {}
for _, v in ipairs(record) do
if v ~= nil and v ~= "" then
local key = v:match("%w+"):lower()
cleanold[key] = v:gsub("%w+%:%s", "")
end
end
local cleannew = {}
for _, v in ipairs(new) do
if v ~= nil and v ~= "" then
local key = v:match("%w+"):lower()
cleannew[key] = v:gsub("%w+%:%s", "")
if cleanold[key] ~= cleannew[key] and (key ~= "url" or key ~= "zone") then
table.insert(changed, " -a " .. key .. "=" .. cleannew[key])
end
end
end
if changed ~= {} then
local command = "knotctl update -z" .. cleanold.zone ..
" -t" .. cleanold.ttl ..
" -n" .. cleanold.name ..
" -r" .. cleanold.rtype ..
" -d" .. cleanold.data ..
table.concat(changed, " ")
log.info(vim.fn.system(command))
end
end
end
})
end)
return true
end,
}):find() }):find()
end end
return require('telescope').register_extension({ return require('telescope').register_extension({

Loading…
Cancel
Save