cd-project.nvim/lua/cd-project/adapter/vim-ui.lua

82 lines
2.0 KiB
Lua

local utils = require("cd-project.utils")
local api = require("cd-project.api")
local repo = require("cd-project.project-repo")
---@param opts? table
local function cd_project(opts)
opts = opts or {}
local projects = repo.get_projects()
local maxLength = 0
for _, project in ipairs(projects) do
if #project.name > maxLength then
maxLength = #project.name
end
end
vim.ui.select(projects, {
prompt = "Select a directory",
format_item = function(project)
return utils.format_entry(project, maxLength)
end,
}, function(selected)
if not selected then
return utils.log_error("Must select a valid dir")
end
api.cd_project(selected.path)
end)
end
---@param opts? table
local function cd_project_in_tab(opts)
opts = opts or {}
local projects = repo.get_projects()
local maxLength = 0
for _, project in ipairs(projects) do
if #project.name > maxLength then
maxLength = #project.name
end
end
vim.ui.select(projects, {
prompt = "Select a directory",
format_item = function(project)
return utils.format_entry(project, maxLength)
end,
}, function(selected)
if not selected then
return utils.log_error("Must select a valid dir")
end
api.cd_project_in_tab(selected.path)
end)
end
local function manual_cd_project()
vim.ui.input({ prompt = "Add a project path: " }, function(path)
if not path or path == "" then
return utils.log_error("No path given, quitting.")
end
vim.ui.input({ prompt = "Add a project name: " }, function(name)
if not name or name == "" then
name = utils.get_tail_of_path(path)
vim.notify('No name given, using "' .. name .. '" instead')
end
local project = api.build_project_obj(path, name)
if not project then
return
end
return api.add_project(project)
end)
end)
end
return {
cd_project = cd_project,
cd_project_in_tab = cd_project_in_tab,
manual_cd_project = manual_cd_project,
}