refactor: update nvim settings
This commit is contained in:
parent
af02e31fe9
commit
6748725b17
33 changed files with 1390 additions and 344 deletions
184
nvim/lua/custom/make.lua
Normal file
184
nvim/lua/custom/make.lua
Normal file
|
|
@ -0,0 +1,184 @@
|
|||
_G.last_make_command = nil
|
||||
_G.make_terminal_buf = nil
|
||||
_G.build_targets = {}
|
||||
|
||||
local config_file = vim.fn.stdpath('config') .. '/build_targets.json'
|
||||
|
||||
-- Загрузка таргетов из файла
|
||||
local function load_targets()
|
||||
local ok, data = pcall(vim.fn.readfile, config_file)
|
||||
if ok and data[1] then
|
||||
_G.build_targets = vim.fn.json_decode(data[1])
|
||||
else
|
||||
_G.build_targets = {}
|
||||
end
|
||||
end
|
||||
|
||||
-- Сохранение таргетов в файл
|
||||
local function save_targets()
|
||||
local data = vim.fn.json_encode(_G.build_targets)
|
||||
vim.fn.writefile({data}, config_file)
|
||||
end
|
||||
|
||||
-- Загружаем таргеты при старте
|
||||
load_targets()
|
||||
|
||||
local function run_make_command(command)
|
||||
if _G.make_terminal_buf and vim.api.nvim_buf_is_valid(_G.make_terminal_buf) then
|
||||
vim.cmd('buffer ' .. _G.make_terminal_buf)
|
||||
else
|
||||
vim.cmd('terminal')
|
||||
_G.make_terminal_buf = vim.api.nvim_get_current_buf()
|
||||
end
|
||||
vim.cmd('startinsert')
|
||||
vim.defer_fn(function()
|
||||
if vim.b.terminal_job_id then
|
||||
vim.fn.chansend(vim.b.terminal_job_id, "clear\n")
|
||||
vim.fn.chansend(vim.b.terminal_job_id, command .. "\n")
|
||||
end
|
||||
end, 300)
|
||||
end
|
||||
|
||||
-- Основная команда сборки (оставьте вашу текущую)
|
||||
vim.api.nvim_create_user_command('Build', function()
|
||||
vim.ui.input({
|
||||
prompt = 'Флаги сборки: ',
|
||||
default = '',
|
||||
}, function(flags)
|
||||
if flags == nil then return end
|
||||
vim.ui.input({
|
||||
prompt = 'Имя проекта: ',
|
||||
default = '',
|
||||
}, function(project_name)
|
||||
if project_name == nil then return end
|
||||
local make_cmd = "meson compile" .. flags .. " " .. project_name
|
||||
_G.last_make_command = make_cmd
|
||||
run_make_command(make_cmd)
|
||||
vim.notify("🔨 Сборка запущена: " .. make_cmd)
|
||||
end)
|
||||
end)
|
||||
end, {
|
||||
desc = "Сборка проекта в терминале"
|
||||
})
|
||||
|
||||
vim.api.nvim_create_user_command('TargetNew', function()
|
||||
vim.ui.input({
|
||||
prompt = 'Название таргета: ',
|
||||
default = '',
|
||||
}, function(target_name)
|
||||
if target_name == nil or target_name == '' then return end
|
||||
vim.ui.input({
|
||||
prompt = 'Команда сборки для "' .. target_name .. '": ',
|
||||
default = '',
|
||||
}, function(build_command)
|
||||
if build_command == nil or build_command == '' then return end
|
||||
_G.build_targets[target_name] = build_command
|
||||
save_targets()
|
||||
vim.notify("✅ Таргет '" .. target_name .. "' сохранен")
|
||||
end)
|
||||
end)
|
||||
end, {
|
||||
desc = "Создать новый таргет сборки"
|
||||
})
|
||||
|
||||
-- ПЕРЕПИСАННАЯ команда для выбора таргета с использованием vim.ui.select
|
||||
vim.api.nvim_create_user_command('Target', function()
|
||||
local target_count = 0
|
||||
for _ in pairs(_G.build_targets) do
|
||||
target_count = target_count + 1
|
||||
end
|
||||
if target_count == 0 then
|
||||
vim.notify("❌ Нет сохраненных таргетов. Используйте :TargetNew", vim.log.levels.ERROR)
|
||||
return
|
||||
end
|
||||
-- Подготавливаем список для vim.ui.select
|
||||
local targets_list = {}
|
||||
for name, cmd in pairs(_G.build_targets) do
|
||||
table.insert(targets_list, {
|
||||
name = name,
|
||||
cmd = cmd,
|
||||
-- Форматируем для красивого отображения
|
||||
display = string.format("🔨 %s\n 📝 %s", name, cmd)
|
||||
})
|
||||
end
|
||||
-- Сортируем по имени
|
||||
table.sort(targets_list, function(a, b) return a.name < b.name end)
|
||||
vim.ui.select(targets_list, {
|
||||
prompt = '📋 Выберите таргет сборки:',
|
||||
format_item = function(item)
|
||||
return item.display
|
||||
end,
|
||||
}, function(selected)
|
||||
if not selected then
|
||||
vim.notify("❌ Выбор отменен", vim.log.levels.WARN)
|
||||
return
|
||||
end
|
||||
_G.last_make_command = selected.cmd
|
||||
run_make_command(selected.cmd)
|
||||
vim.notify("🔨 Запускаю: " .. selected.cmd)
|
||||
end)
|
||||
end, {
|
||||
desc = "Выбрать таргет сборки"
|
||||
})
|
||||
|
||||
-- Команда для просмотра всех таргетов
|
||||
vim.api.nvim_create_user_command('TargetList', function()
|
||||
local target_count = 0
|
||||
for _ in pairs(_G.build_targets) do
|
||||
target_count = target_count + 1
|
||||
end
|
||||
if target_count == 0 then
|
||||
print("📝 Список таргетов пуст")
|
||||
return
|
||||
end
|
||||
print("📋 Сохраненные таргеты сборки:")
|
||||
local targets_list = {}
|
||||
for name, cmd in pairs(_G.build_targets) do
|
||||
table.insert(targets_list, { name = name, cmd = cmd })
|
||||
end
|
||||
table.sort(targets_list, function(a, b) return a.name < b.name end)
|
||||
for i, target in ipairs(targets_list) do
|
||||
print(string.format(" %d. %s → %s", i, target.name, target.cmd))
|
||||
end
|
||||
end, {
|
||||
desc = "Показать список всех таргетов"
|
||||
})
|
||||
|
||||
-- Команда для удаления таргета (уже использует vim.ui.select - оставляем как есть)
|
||||
vim.api.nvim_create_user_command('TargetDelete', function()
|
||||
local target_count = 0
|
||||
for _ in pairs(_G.build_targets) do
|
||||
target_count = target_count + 1
|
||||
end
|
||||
if target_count == 0 then
|
||||
vim.notify("❌ Нет сохраненных таргетов", vim.log.levels.ERROR)
|
||||
return
|
||||
end
|
||||
local targets_list = {}
|
||||
for name, cmd in pairs(_G.build_targets) do
|
||||
table.insert(targets_list, name)
|
||||
end
|
||||
table.sort(targets_list)
|
||||
vim.ui.select(targets_list, {
|
||||
prompt = 'Выберите таргет для удаления:',
|
||||
}, function(selected)
|
||||
if not selected then return end
|
||||
_G.build_targets[selected] = nil
|
||||
save_targets()
|
||||
vim.notify("🗑️ Таргет '" .. selected .. "' удален")
|
||||
end)
|
||||
end, {
|
||||
desc = "Удалить таргет сборки"
|
||||
})
|
||||
|
||||
-- Повтор последней сборки (оставьте вашу текущую)
|
||||
vim.api.nvim_create_user_command('LastBuild', function()
|
||||
if _G.last_make_command then
|
||||
run_make_command(_G.last_make_command)
|
||||
vim.notify("🔁 Повторяю: " .. _G.last_make_command)
|
||||
else
|
||||
vim.notify("❌ Нет истории сборок", vim.log.levels.ERROR)
|
||||
end
|
||||
end, {
|
||||
desc = "Повторить последнюю сборку в терминале"
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue