summaryrefslogtreecommitdiff
path: root/.config/nvim
diff options
context:
space:
mode:
authorKyren223 <kyren223@proton.me>2025-08-16 18:58:14 +0300
committerKyren223 <kyren223@proton.me>2025-08-16 18:58:14 +0300
commite1ca57c93e8a65d5e0dde445a1337ffb2240ef3a (patch)
treee98f1cab47b844cf767a5be3edbc9edee1f82f34 /.config/nvim
parenteff8eec4c871e902069ef066993cca79fb8bbc29 (diff)
Add casey-style alt+m recompilation for krypton
Diffstat (limited to '.config/nvim')
-rw-r--r--.config/nvim/lsp/clangd.lua56
-rw-r--r--.config/nvim/lua/autocmds.lua40
2 files changed, 95 insertions, 1 deletions
diff --git a/.config/nvim/lsp/clangd.lua b/.config/nvim/lsp/clangd.lua
index faa6589..66643a3 100644
--- a/.config/nvim/lsp/clangd.lua
+++ b/.config/nvim/lsp/clangd.lua
@@ -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?
diff --git a/.config/nvim/lua/autocmds.lua b/.config/nvim/lua/autocmds.lua
index 608708b..190e4e4 100644
--- a/.config/nvim/lua/autocmds.lua
+++ b/.config/nvim/lua/autocmds.lua
@@ -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,
+})