Add casey-style alt+m recompilation for krypton

This commit is contained in:
2025-08-16 18:58:14 +03:00
parent eff8eec4c8
commit e1ca57c93e
2 changed files with 95 additions and 1 deletions

View File

@@ -57,6 +57,61 @@ local function symbol_info()
end, bufnr)
end
local function find_build_buf()
for _, buf in ipairs(vim.api.nvim_list_bufs()) do
if vim.api.nvim_buf_is_valid(buf) and vim.api.nvim_get_option_value('buftype', { buf = buf }) == 'terminal' then
local ok, val = pcall(vim.api.nvim_buf_get_var, buf, 'is_build_term')
if ok and val then
return buf
end
end
end
return -1
end
local function compile_project()
local orig_win = vim.api.nvim_get_current_win()
local build_buf = find_build_buf()
local build_win = -1
if build_buf == -1 then
vim.cmd('botright vsplit')
-- vim.cmd('vertical resize ' .. math.floor(vim.o.columns * 0.395))
vim.cmd('vertical resize ' .. math.floor(vim.o.columns * 0.46))
build_win = vim.api.nvim_get_current_win()
vim.cmd('terminal')
build_buf = vim.api.nvim_get_current_buf()
vim.api.nvim_buf_set_var(build_buf, 'is_build_term', true)
vim.opt_local.bufhidden = 'delete'
else
vim.cmd("CompileClose")
compile_project()
return
-- build_win = vim.fn.bufwinid(build_buf)
-- if build_win == -1 then
-- vim.cmd('botright vsplit')
-- build_win = vim.api.nvim_get_current_win()
-- vim.api.nvim_win_set_buf(build_win, build_buf)
-- end
end
vim.api.nvim_set_current_win(build_win)
local chan = vim.api.nvim_buf_get_var(build_buf, 'terminal_job_id')
vim.api.nvim_chan_send(chan, 'clear && ./build.sh krypton\n')
vim.api.nvim_set_current_win(orig_win)
end
vim.api.nvim_create_user_command("CompileClose", function()
local build_buf = find_build_buf()
if build_buf ~= -1 then
local chan = vim.api.nvim_buf_get_var(build_buf, 'terminal_job_id')
vim.fn.jobstop(chan)
vim.api.nvim_buf_delete(build_buf, { force = true })
end
end, {})
vim.keymap.set({ 'i', 'n', 'v' }, '<C-q>', '<cmd>CompileClose<cr><cmd>wqa<cr>')
return {
cmd = {
'clangd',
@@ -98,6 +153,7 @@ return {
symbol_info()
end, { desc = 'Show symbol info' })
vim.keymap.set('n', '<A-m>', compile_project, { desc = '[H]eader and Source Switcher' })
vim.keymap.set('n', '<leader>h', '<cmd>ClangdSwitchSourceHeader<cr>', { desc = '[H]eader and Source Switcher' })
vim.keymap.set('n', 'K', '<cmd>lua require("pretty_hover").hover()<cr>', { desc = 'Documentation Hover' })
-- TODO: do I need pretty_hover? maybe that's what causes issues?

View File

@@ -14,7 +14,7 @@ vim.api.nvim_create_autocmd('BufEnter', {
desc = 'Disable newlines on commented lines from continuing the comment',
group = augroup('disable-comments-continuation'),
callback = function()
vim.opt_local.formatoptions:remove('r') -- no comments on enter
-- vim.opt_local.formatoptions:remove('r') -- no comments on enter
vim.opt_local.formatoptions:remove('o') -- no comments on `o` or `O`
end,
})
@@ -266,3 +266,41 @@ vim.api.nvim_create_autocmd({ 'VimEnter', 'BufRead', 'BufWinEnter', 'BufWritePos
RenderTodoHighlights(bufnr)
end,
})
function Jump_to_error(focus)
local line = vim.api.nvim_get_current_line()
local path, lnum, col = line:match('([^:]+):(%d+):(%d+):')
if not (path and lnum) then
vim.cmd('normal! gd')
return
end
local main_win = nil
for _, win in ipairs(vim.api.nvim_list_wins()) do
local buf = vim.api.nvim_win_get_buf(win)
if vim.api.nvim_buf_get_option(buf, 'buftype') ~= 'terminal' then
main_win = win
break
end
end
if main_win then
vim.api.nvim_win_call(main_win, function()
vim.cmd('edit ' .. path)
vim.api.nvim_win_set_cursor(0, { tonumber(lnum), tonumber(col) - 1 })
end)
if focus then
vim.api.nvim_set_current_win(main_win)
end
else
vim.cmd('edit ' .. path)
vim.api.nvim_win_set_cursor(0, { tonumber(lnum), tonumber(col) - 1 })
end
end
vim.api.nvim_create_autocmd('TermOpen', {
callback = function(args)
vim.api.nvim_buf_set_keymap(args.buf, 'n', 'gd', '<cmd>lua Jump_to_error(true)<CR>', { noremap = true, silent = true })
vim.api.nvim_buf_set_keymap(args.buf, 'n', 'go', '<cmd>lua Jump_to_error(false)<CR>', { noremap = true, silent = true })
end,
})