82 lines
2.0 KiB
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,
|
|
}
|