blink.cmp, oil.nvim, syss-report-selector

This commit is contained in:
Christopher Beckmann
2024-12-20 17:40:07 +01:00
parent 310b6c4d25
commit 39551b1831
14 changed files with 422 additions and 256 deletions

View File

@@ -0,0 +1,107 @@
local pickers = require("telescope.pickers")
local finders = require("telescope.finders")
local conf = require("telescope.config").values
local actions = require("telescope.actions")
local action_state = require("telescope.actions.state")
local utils = require("telescope.utils")
local entry_display = require "telescope.pickers.entry_display"
local M = {}
M.setup = function(opts)
opts = opts or {}
-- TODO: get report directory from settings or maybe reportctl ini file?
M.report_dir = opts.report_dir or "~/reports"
-- do nothing
end
-- Function to get directories in the current directory
M.get_reports = function()
local report_dir = M.report_dir or "~/reports"
-- insecure
local handle = io.popen("find " .. report_dir .. " -maxdepth 2 -mindepth 2 -type d")
if not handle then return {} end
local result = handle:read("*a")
handle:close()
return vim.split(result, "\n", { trimempty = true })
end
local debug = function(msg, title)
msg = msg or ""
title = title or ""
Snacks.notifier.notify(msg, "debug", { style = "compact", timeout = 10000, title = title })
end
local info = function(msg, title)
msg = msg or ""
title = title or ""
Snacks.notifier.notify(msg, "info", { style = "compact", timeout = 10000, title = title })
end
M.directory_picker = function(opts)
opts = opts or {}
local dirs = M.get_reports()
local displayer = entry_display.create({
separator = "",
items = {
{ width = 25 },
{ remaining = true },
}
})
local make_display = function(e)
-- debug(vim.inspect(e.value))
local parts = vim.split(e.value, '/', { trimempty = true, plain = true })
local kunde = parts[#parts - 1]
local report = parts[#parts]
local display = kunde .. " " .. report
local kundeStart = 0
local kundeEnd = #kunde
local reportStart = kundeEnd + 1
local reportEnd = reportStart + #report
return displayer {
{ kunde, "TelescopeResultsComment" },
{ report, "TelescopeResultsIdentifier" },
}
end
local reportFinder = finders.new_table({
results = dirs,
entry_maker = function(entry)
return {
value = entry,
ordinal = entry,
display = make_display,
}
end
})
pickers.new(opts, {
prompt_title = "Select report",
finder = reportFinder,
sorter = conf.generic_sorter(opts),
attach_mappings = function(prompt_bufnr, map)
local function set_cwd()
local selection = action_state.get_selected_entry()
if selection then
local selected_dir = selection.value
vim.cmd("cd " .. selected_dir)
info(selected_dir, "Switched report")
end
actions.close(prompt_bufnr)
end
map("i", "<CR>", set_cwd)
map("n", "<CR>", set_cwd)
return true
end,
}):find()
end
return M