From 223b0418a88e2a1a92f47727ec457f16a5ec5cf8 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Thu, 4 Dec 2025 17:13:48 +0200 Subject: Add custom next/prev error for Krypton/C --- .config/nvim/lua/extra.lua | 97 ++++++++++++++++++++++++++++++++++++++++++++ .config/nvim/lua/keymaps.lua | 4 +- 2 files changed, 99 insertions(+), 2 deletions(-) (limited to '.config/nvim/lua') diff --git a/.config/nvim/lua/extra.lua b/.config/nvim/lua/extra.lua index c59a98a..6c3d7b3 100644 --- a/.config/nvim/lua/extra.lua +++ b/.config/nvim/lua/extra.lua @@ -463,6 +463,103 @@ end, {}) vim.keymap.set({ 'i', 'n', 'v' }, '', 'CompileClosewqa') +---------------------------------------------------------------------------- +-- NOTE: Jump to next error based on compile() +---------------------------------------------------------------------------- + +function JumpToError(direction) + vim.defer_fn(function() + -- vim.notify("Running JumpToError after delay", "warn") + + if BuildTerminalBuf == nil or not vim.api.nvim_buf_is_valid(BuildTerminalBuf) then + -- vim.notify("BuildTerminalBuf not ready", "warn") + return + end + + local error_parsers = { + function(line) + local file, lnum = line:match('^(.-):(%d+):%d+:%s+error:') + if file and lnum then + return { file = file, line = tonumber(lnum) } + end + end, + function(_) + return nil + end, + } + + local lines = vim.api.nvim_buf_get_lines(BuildTerminalBuf, 0, -1, false) + -- vim.notify("Build buffer line count: " .. #lines, "warn") + + local errors = {} + for _, line in ipairs(lines) do + for _, f in ipairs(error_parsers) do + local err = f(line) + if err then + table.insert(errors, err) + break + end + end + end + + -- vim.notify("Error count: " .. #errors, "warn") + if #errors == 0 then + return + end + + local current_file = vim.api.nvim_buf_get_name(0) + local filtered = {} + for _, e in ipairs(errors) do + if e.file == current_file then + table.insert(filtered, e) + end + end + + -- vim.notify("Filtered errors: " .. #filtered, "warn") + if #filtered == 0 then + return + end + + table.sort(filtered, function(a, b) + return a.line < b.line + end) + + local cursor_line = vim.api.nvim_win_get_cursor(0)[1] + + if direction == 1 then + for _, e in ipairs(filtered) do + if e.line > cursor_line then + vim.api.nvim_win_set_cursor(0, { e.line, 0 }) + return + end + end + vim.api.nvim_win_set_cursor(0, { filtered[1].line, 0 }) + else + for i = #filtered, 1, -1 do + if filtered[i].line < cursor_line then + vim.api.nvim_win_set_cursor(0, { filtered[i].line, 0 }) + return + end + end + vim.api.nvim_win_set_cursor(0, { filtered[#filtered].line, 0 }) + end + end, 1) -- 1 second async delay + + -- if vim.g.project_compile_cmd then + -- Compile_project(vim.g.project_compile_cmd) + -- else + -- -- vim.notify("vim.g.project_compile_cmd missing", "warn") + -- end +end + +function JumpToNextError() + return JumpToError(1) +end + +function JumpToPrevError() + return JumpToError(-1) +end + ---------------------------------------------------------------------------- -- NOTE: Run arbitrary code (if trusted) when opening a project ---------------------------------------------------------------------------- diff --git a/.config/nvim/lua/keymaps.lua b/.config/nvim/lua/keymaps.lua index 53d4bc8..2ceec0b 100644 --- a/.config/nvim/lua/keymaps.lua +++ b/.config/nvim/lua/keymaps.lua @@ -114,8 +114,8 @@ local keymaps = { }, { 'n', 'R', 'Lspsaga rename', { desc = '[R]ename' } }, { { 'n', 'i' }, '', 'Lspsaga code_action', { desc = 'Code Actions' } }, - { 'n', 'e', next_diagnostic(severity.ERROR), { desc = 'Goto [E]rror' } }, - { 'n', 'E', prev_diagnostic(severity.ERROR), { desc = 'Goto [E]rror (prev)' } }, + -- { 'n', 'e', next_diagnostic(severity.ERROR), { desc = 'Goto [E]rror' } }, + -- { 'n', 'E', prev_diagnostic(severity.ERROR), { desc = 'Goto [E]rror (prev)' } }, { 'n', 'w', next_diagnostic(severity.WARN), { desc = 'Goto [W]arning' } }, { 'n', 'W', prev_diagnostic(severity.WARN), { desc = 'Goto [W]arning (prev)' } }, { 'n', 'D', cursor_diagnostics, { desc = '[D]iagnostics under cursor' } }, -- cgit v1.3.1