mirror of
https://github.com/LazyVim/LazyVim.git
synced 2026-07-24 13:31:06 +00:00
fix <leader> pause in opencode window
This commit is contained in:
parent
83fe9874b7
commit
75c475fc3c
1 changed files with 237 additions and 227 deletions
|
|
@ -28,242 +28,218 @@ return {
|
||||||
opts.spec = opts.spec or {}
|
opts.spec = opts.spec or {}
|
||||||
table.insert(opts.spec, { "<leader>a", group = "OpenCode" })
|
table.insert(opts.spec, { "<leader>a", group = "OpenCode" })
|
||||||
table.insert(opts.spec, { "<leader>ag", group = "git" })
|
table.insert(opts.spec, { "<leader>ag", group = "git" })
|
||||||
table.insert(opts.spec, { "<leader>ax", group = "diagnostics/quickfix" })
|
|
||||||
if LazyVim.has("grapple.nvim") then
|
|
||||||
table.insert(opts.spec, { "<leader>af", group = "grapple" })
|
|
||||||
end
|
|
||||||
table.insert(opts.spec, { "<leader>ap", group = "prompt" })
|
table.insert(opts.spec, { "<leader>ap", group = "prompt" })
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
|
||||||
"folke/snacks.nvim",
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"Nickvandyke/opencode.nvim",
|
"Nickvandyke/opencode.nvim",
|
||||||
version = "*",
|
version = "*",
|
||||||
cmd = "OpenCode",
|
dependencies = {
|
||||||
keys = function()
|
"nvim-lua/plenary.nvim",
|
||||||
local keys = {
|
},
|
||||||
{ "gO", false },
|
cmd = { "OpenCode", "OpenCodeToggle" },
|
||||||
{
|
keys = {
|
||||||
"<leader>aa",
|
{ "gO", false },
|
||||||
function()
|
|
||||||
require("opencode").toggle()
|
|
||||||
focus_opencode()
|
|
||||||
end,
|
|
||||||
mode = { "n", "t" },
|
|
||||||
desc = "Toggle OpenCode",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>aq",
|
|
||||||
function()
|
|
||||||
require("opencode").stop()
|
|
||||||
end,
|
|
||||||
mode = { "n", "t" },
|
|
||||||
desc = "Stop/Close OpenCode",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>as",
|
|
||||||
function()
|
|
||||||
require("opencode").select()
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Select action",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>ai",
|
|
||||||
function()
|
|
||||||
safe_ask("", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Ask (empty)",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>aI",
|
|
||||||
function()
|
|
||||||
safe_ask("@this: ", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Ask with context",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>ab",
|
|
||||||
function()
|
|
||||||
safe_ask("@buffer ", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Ask about buffer",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>agd",
|
|
||||||
function()
|
|
||||||
safe_ask("@diff ", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Git diff",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>ax",
|
|
||||||
group = "diagnostics/quickfix",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>axx",
|
|
||||||
function()
|
|
||||||
safe_ask("@quickfix ", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Ask with quickfix",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>axd",
|
|
||||||
function()
|
|
||||||
safe_ask("@diagnostics ", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Ask with diagnostics",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>av",
|
|
||||||
function()
|
|
||||||
safe_ask("@visible ", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Ask with visible text",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>aB",
|
|
||||||
function()
|
|
||||||
safe_ask("@buffers ", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Ask with all buffers",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>am",
|
|
||||||
function()
|
|
||||||
safe_ask("@marks ", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Ask with marks",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>ape",
|
|
||||||
function()
|
|
||||||
safe_ask("@this explain: ", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Explain",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>apf",
|
|
||||||
function()
|
|
||||||
safe_ask("@this fix: ", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Fix",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>apd",
|
|
||||||
function()
|
|
||||||
safe_ask("@this diagnose: ", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Diagnose",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>apr",
|
|
||||||
function()
|
|
||||||
safe_ask("@this review: ", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Review",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>apt",
|
|
||||||
function()
|
|
||||||
safe_ask("@this test: ", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Test",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>apo",
|
|
||||||
function()
|
|
||||||
safe_ask("@this optimize: ", { submit = true, focus = false })
|
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Optimize",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>an",
|
|
||||||
function()
|
|
||||||
require("opencode").command("session.new")
|
|
||||||
end,
|
|
||||||
mode = { "n" },
|
|
||||||
desc = "New session",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>ac",
|
|
||||||
function()
|
|
||||||
require("opencode").command("session.close")
|
|
||||||
end,
|
|
||||||
mode = { "n" },
|
|
||||||
desc = "Close session",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"go",
|
|
||||||
function()
|
|
||||||
return require("opencode").operator("@this ")
|
|
||||||
end,
|
|
||||||
expr = true,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Add range to OpenCode",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"goo",
|
|
||||||
function()
|
|
||||||
return require("opencode").operator("@this ") .. "_"
|
|
||||||
end,
|
|
||||||
expr = true,
|
|
||||||
mode = { "n" },
|
|
||||||
desc = "Add line to OpenCode",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
if LazyVim.has("grapple.nvim") then
|
{
|
||||||
table.insert(keys, {
|
"<leader>aa",
|
||||||
"<leader>af",
|
function()
|
||||||
function()
|
require("opencode").toggle()
|
||||||
safe_ask("@grapple ", { submit = true, focus = false })
|
focus_opencode()
|
||||||
end,
|
|
||||||
mode = { "n", "x" },
|
|
||||||
desc = "Ask with grapple",
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
return keys
|
|
||||||
end,
|
|
||||||
config = function()
|
|
||||||
vim.g.opencode_opts = {}
|
|
||||||
|
|
||||||
-- Fix for marksman crashing on opencode buffers
|
|
||||||
vim.api.nvim_create_autocmd({ "BufAdd", "BufWinEnter", "TermOpen" }, {
|
|
||||||
callback = function(event)
|
|
||||||
if vim.api.nvim_buf_get_name(event.buf):match("opencode") then
|
|
||||||
vim.bo[event.buf].filetype = "opencode"
|
|
||||||
vim.b[event.buf].lsp_ignore = true
|
|
||||||
-- Detach any clients that might have already attached
|
|
||||||
local clients = vim.lsp.get_clients({ bufnr = event.buf })
|
|
||||||
for _, client in ipairs(clients) do
|
|
||||||
vim.lsp.buf_detach_client(event.buf, client.id)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
})
|
mode = { "n", "t" },
|
||||||
|
desc = "Toggle OpenCode",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>aq",
|
||||||
|
function()
|
||||||
|
require("opencode").stop()
|
||||||
|
end,
|
||||||
|
mode = { "n", "t" },
|
||||||
|
desc = "Stop/Close OpenCode",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>as",
|
||||||
|
function()
|
||||||
|
require("opencode").select()
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Select action",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>ai",
|
||||||
|
function()
|
||||||
|
safe_ask("", { submit = true, focus = false })
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Ask (empty)",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>aI",
|
||||||
|
function()
|
||||||
|
safe_ask("@this: ", { submit = true, focus = false })
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Ask with context",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>ab",
|
||||||
|
function()
|
||||||
|
safe_ask("@buffer ", { submit = true, focus = false })
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Ask about buffer",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>agd",
|
||||||
|
function()
|
||||||
|
safe_ask("@diff ", { submit = true, focus = false })
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Git diff",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>ax",
|
||||||
|
function()
|
||||||
|
safe_ask("@quickfix ", { submit = true, focus = false })
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Ask with quickfix",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>av",
|
||||||
|
function()
|
||||||
|
safe_ask("@visible ", { submit = true, focus = false })
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Ask with visible text",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>aB",
|
||||||
|
function()
|
||||||
|
safe_ask("@buffers ", { submit = true, focus = false })
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Ask with all buffers",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>am",
|
||||||
|
function()
|
||||||
|
safe_ask("@marks ", { submit = true, focus = false })
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Ask with marks",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>ape",
|
||||||
|
function()
|
||||||
|
safe_ask("@this explain: ", { submit = true, focus = false })
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Explain",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>apf",
|
||||||
|
function()
|
||||||
|
safe_ask("@this fix: ", { submit = true, focus = false })
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Fix",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>apd",
|
||||||
|
function()
|
||||||
|
safe_ask("@this diagnose: ", { submit = true, focus = false })
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Diagnose",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>apr",
|
||||||
|
function()
|
||||||
|
safe_ask("@this review: ", { submit = true, focus = false })
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Review",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>apt",
|
||||||
|
function()
|
||||||
|
safe_ask("@this test: ", { submit = true, focus = false })
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Test",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>apo",
|
||||||
|
function()
|
||||||
|
safe_ask("@this optimize: ", { submit = true, focus = false })
|
||||||
|
end,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Optimize",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>an",
|
||||||
|
function()
|
||||||
|
require("opencode").command("session.new")
|
||||||
|
end,
|
||||||
|
mode = { "n" },
|
||||||
|
desc = "New session",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"<leader>ac",
|
||||||
|
function()
|
||||||
|
require("opencode").command("session.close")
|
||||||
|
end,
|
||||||
|
mode = { "n" },
|
||||||
|
desc = "Close session",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"go",
|
||||||
|
function()
|
||||||
|
return require("opencode").operator("@this ")
|
||||||
|
end,
|
||||||
|
expr = true,
|
||||||
|
mode = { "n", "x" },
|
||||||
|
desc = "Add range to OpenCode",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"goo",
|
||||||
|
function()
|
||||||
|
return require("opencode").operator("@this ") .. "_"
|
||||||
|
end,
|
||||||
|
expr = true,
|
||||||
|
mode = { "n" },
|
||||||
|
desc = "Add line to OpenCode",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
opts = function()
|
||||||
|
-- 1. Setup autogroups/autocmds for terminal optimizations
|
||||||
|
local opencode_augroup = vim.api.nvim_create_augroup("opencode_integrated", { clear = true })
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd({ "BufEnter" }, {
|
vim.api.nvim_create_autocmd({ "BufEnter" }, {
|
||||||
|
group = opencode_augroup,
|
||||||
pattern = "*:opencode --port*",
|
pattern = "*:opencode --port*",
|
||||||
callback = function()
|
callback = function()
|
||||||
vim.cmd("startinsert")
|
vim.cmd("startinsert")
|
||||||
|
|
@ -271,11 +247,15 @@ return {
|
||||||
})
|
})
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd({ "TermOpen" }, {
|
vim.api.nvim_create_autocmd({ "TermOpen" }, {
|
||||||
group = vim.api.nvim_create_augroup("opencode_integrated", { clear = true }),
|
-- group = vim.api.nvim_create_augroup("opencode_integrated", { clear = true }),
|
||||||
|
group = opencode_augroup,
|
||||||
pattern = "*:opencode --port*",
|
pattern = "*:opencode --port*",
|
||||||
callback = function(event)
|
callback = function(event)
|
||||||
vim.bo[event.buf].buflisted = false
|
vim.bo[event.buf].buflisted = false
|
||||||
vim.bo[event.buf].filetype = "opencode"
|
|
||||||
|
-- Override space layout globally inside this exact buffer window
|
||||||
|
vim.keymap.set("t", "<space>", "<space>", { buffer = event.buf, nowait = true, noremap = true })
|
||||||
|
vim.b[event.buf].which_key_ignore = true
|
||||||
|
|
||||||
vim.keymap.set({ "t", "n" }, "<C-h>", "<C-\\><C-n><C-w>h", { buffer = event.buf, desc = "Go to Left Window" })
|
vim.keymap.set({ "t", "n" }, "<C-h>", "<C-\\><C-n><C-w>h", { buffer = event.buf, desc = "Go to Left Window" })
|
||||||
vim.keymap.set(
|
vim.keymap.set(
|
||||||
|
|
@ -319,6 +299,36 @@ return {
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
-- Essential: Return an empty table container to stop lazy.nvim fallback calls
|
||||||
|
return {}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
-- 2. Modify which-key v3 auto-triggers to fully drop terminal mode input tracking
|
||||||
|
{
|
||||||
|
"folke/which-key.nvim",
|
||||||
|
optional = true,
|
||||||
|
opts = function(_, opts)
|
||||||
|
opts.triggers = opts.triggers or {}
|
||||||
|
|
||||||
|
-- Check if default auto triggers are present
|
||||||
|
local has_auto = false
|
||||||
|
for _, trigger in ipairs(opts.triggers) do
|
||||||
|
-- Standard v3 layout tables wrap the auto hook directive as an array string value
|
||||||
|
if type(trigger) == "table" and trigger == "<auto>" then
|
||||||
|
has_auto = true
|
||||||
|
-- Strip terminal mode ("t") and command mode ("c") from automatic hooking loops
|
||||||
|
trigger.mode = "nixso"
|
||||||
|
elseif trigger == "<auto>" then
|
||||||
|
-- Fallback mutation path if declared as a raw flat string pattern
|
||||||
|
has_auto = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- If LazyVim default configs haven't initialized it, enforce a clean non-terminal rule
|
||||||
|
if not has_auto then
|
||||||
|
table.insert(opts.triggers, { "<auto>", mode = "nixso" })
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue