My nvim configuration
feat: claude has prompt shortcut
2 files changed, +19 -1
+1-0claude-nvim/lua/claude/init.lua
| @@ -36,6 +36,7 @@ function M.setup(opts) | ||
| 36 | 36 | vim.keymap.set("n", "<leader>cr", ui.resume_last, { desc = "Claude: Resume last session" }) |
| 37 | 37 | vim.keymap.set("n", "<leader>cq", pickers.prompts_picker, { desc = "Claude: Prompts → quickfix" }) |
| 38 | 38 | vim.keymap.set("n", "<leader>cl", pickers.qf_last, { desc = "Claude: Last prompt → quickfix" }) |
| 39 | + vim.keymap.set("n", "<leader>cp", ui.open_prompt_keep_focus, { desc = "Claude: Prompt (keep focus)" }) | |
| 39 | 40 | |
| 40 | 41 | vim.keymap.set("v", "<leader>c", function() |
| 41 | 42 | edit.prompt_visual() |
+18-1claude-nvim/lua/claude/ui.lua
| @@ -220,11 +220,13 @@ function M.resume_last() | ||
| 220 | 220 | append_lines({ "Press `i` to send a prompt.", "" }) |
| 221 | 221 | end |
| 222 | 222 | |
| 223 | -function M.open_input() | |
| 223 | +function M.open_input(opts) | |
| 224 | + opts = opts or {} | |
| 224 | 225 | if not panel.sid then |
| 225 | 226 | M.start_new() |
| 226 | 227 | end |
| 227 | 228 | local sid = panel.sid |
| 229 | + local return_to = opts.return_to | |
| 228 | 230 | local input_buf = vim.api.nvim_create_buf(false, true) |
| 229 | 231 | vim.bo[input_buf].bufhidden = "wipe" |
| 230 | 232 | vim.bo[input_buf].filetype = "markdown" |
| @@ -252,6 +254,9 @@ function M.open_input() | ||
| 252 | 254 | if vim.api.nvim_win_is_valid(win) then |
| 253 | 255 | vim.api.nvim_win_close(win, true) |
| 254 | 256 | end |
| 257 | + if return_to and vim.api.nvim_win_is_valid(return_to) then | |
| 258 | + pcall(vim.api.nvim_set_current_win, return_to) | |
| 259 | + end | |
| 255 | 260 | end |
| 256 | 261 | local function send() |
| 257 | 262 | if closed then return end |
| @@ -272,6 +277,18 @@ function M.open_input() | ||
| 272 | 277 | vim.keymap.set("n", "<Esc>", close, km) |
| 273 | 278 | end |
| 274 | 279 | |
| 280 | +function M.open_prompt_keep_focus() | |
| 281 | + local origin = vim.api.nvim_get_current_win() | |
| 282 | + if not M.is_open() then | |
| 283 | + if panel.sid then | |
| 284 | + M.open_panel() | |
| 285 | + else | |
| 286 | + M.start_new() | |
| 287 | + end | |
| 288 | + end | |
| 289 | + M.open_input({ return_to = origin }) | |
| 290 | +end | |
| 291 | + | |
| 275 | 292 | -- runner callbacks |
| 276 | 293 | |
| 277 | 294 | function M.append_user_prompt(sid, text) |