mirror of
https://github.com/LazyVim/LazyVim.git
synced 2026-07-24 05:21:07 +00:00
git screw up. add changes from https://github.com/g-lok/LazyVim/pull/2
This commit is contained in:
parent
7640da3a0a
commit
0c65a87781
1 changed files with 67 additions and 105 deletions
|
|
@ -1,4 +1,9 @@
|
||||||
local function safe_ask(prompt, opts)
|
if not vim.fn.executable("opencode") then
|
||||||
|
vim.notify("opencode: binary not installed. See opencode.ai", vim.log.levels.ERROR)
|
||||||
|
return {}
|
||||||
|
end
|
||||||
|
|
||||||
|
local function ask(prompt, opts)
|
||||||
if not vim.fn.executable("opencode") then
|
if not vim.fn.executable("opencode") then
|
||||||
vim.notify("opencode: binary not installed. See opencode.ai", vim.log.levels.ERROR)
|
vim.notify("opencode: binary not installed. See opencode.ai", vim.log.levels.ERROR)
|
||||||
return
|
return
|
||||||
|
|
@ -6,20 +11,7 @@ local function safe_ask(prompt, opts)
|
||||||
require("opencode").ask(prompt, opts)
|
require("opencode").ask(prompt, opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function focus_opencode()
|
|
||||||
vim.schedule(function()
|
|
||||||
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_name(buf):match("opencode %-%-port") then
|
|
||||||
vim.api.nvim_set_current_win(win)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
recommended = true,
|
|
||||||
|
|
||||||
-- which-key
|
-- which-key
|
||||||
{
|
{
|
||||||
"folke/which-key.nvim",
|
"folke/which-key.nvim",
|
||||||
|
|
@ -46,9 +38,8 @@ return {
|
||||||
"<leader>aa",
|
"<leader>aa",
|
||||||
function()
|
function()
|
||||||
require("opencode").toggle()
|
require("opencode").toggle()
|
||||||
focus_opencode()
|
|
||||||
end,
|
end,
|
||||||
mode = { "n", "t" },
|
mode = { "n" },
|
||||||
desc = "Toggle OpenCode",
|
desc = "Toggle OpenCode",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -57,7 +48,7 @@ return {
|
||||||
function()
|
function()
|
||||||
require("opencode").stop()
|
require("opencode").stop()
|
||||||
end,
|
end,
|
||||||
mode = { "n", "t" },
|
mode = { "n" },
|
||||||
desc = "Stop/Close OpenCode",
|
desc = "Stop/Close OpenCode",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -73,7 +64,7 @@ return {
|
||||||
{
|
{
|
||||||
"<leader>ai",
|
"<leader>ai",
|
||||||
function()
|
function()
|
||||||
safe_ask("", { submit = true, focus = false })
|
ask("", { submit = true, focus = false })
|
||||||
end,
|
end,
|
||||||
mode = { "n", "x" },
|
mode = { "n", "x" },
|
||||||
desc = "Ask (empty)",
|
desc = "Ask (empty)",
|
||||||
|
|
@ -82,7 +73,7 @@ return {
|
||||||
{
|
{
|
||||||
"<leader>aI",
|
"<leader>aI",
|
||||||
function()
|
function()
|
||||||
safe_ask("@this: ", { submit = true, focus = false })
|
ask("@this: ", { submit = true, focus = false })
|
||||||
end,
|
end,
|
||||||
mode = { "n", "x" },
|
mode = { "n", "x" },
|
||||||
desc = "Ask with context",
|
desc = "Ask with context",
|
||||||
|
|
@ -91,7 +82,7 @@ return {
|
||||||
{
|
{
|
||||||
"<leader>ab",
|
"<leader>ab",
|
||||||
function()
|
function()
|
||||||
safe_ask("@buffer ", { submit = true, focus = false })
|
ask("@buffer ", { submit = true, focus = false })
|
||||||
end,
|
end,
|
||||||
mode = { "n", "x" },
|
mode = { "n", "x" },
|
||||||
desc = "Ask about buffer",
|
desc = "Ask about buffer",
|
||||||
|
|
@ -100,7 +91,7 @@ return {
|
||||||
{
|
{
|
||||||
"<leader>agd",
|
"<leader>agd",
|
||||||
function()
|
function()
|
||||||
safe_ask("@diff ", { submit = true, focus = false })
|
ask("@diff ", { submit = true, focus = false })
|
||||||
end,
|
end,
|
||||||
mode = { "n", "x" },
|
mode = { "n", "x" },
|
||||||
desc = "Git diff",
|
desc = "Git diff",
|
||||||
|
|
@ -109,7 +100,7 @@ return {
|
||||||
{
|
{
|
||||||
"<leader>ax",
|
"<leader>ax",
|
||||||
function()
|
function()
|
||||||
safe_ask("@quickfix ", { submit = true, focus = false })
|
ask("@quickfix ", { submit = true, focus = false })
|
||||||
end,
|
end,
|
||||||
mode = { "n", "x" },
|
mode = { "n", "x" },
|
||||||
desc = "Ask with quickfix",
|
desc = "Ask with quickfix",
|
||||||
|
|
@ -118,7 +109,7 @@ return {
|
||||||
{
|
{
|
||||||
"<leader>av",
|
"<leader>av",
|
||||||
function()
|
function()
|
||||||
safe_ask("@visible ", { submit = true, focus = false })
|
ask("@visible ", { submit = true, focus = false })
|
||||||
end,
|
end,
|
||||||
mode = { "n", "x" },
|
mode = { "n", "x" },
|
||||||
desc = "Ask with visible text",
|
desc = "Ask with visible text",
|
||||||
|
|
@ -127,7 +118,7 @@ return {
|
||||||
{
|
{
|
||||||
"<leader>aB",
|
"<leader>aB",
|
||||||
function()
|
function()
|
||||||
safe_ask("@buffers ", { submit = true, focus = false })
|
ask("@buffers ", { submit = true, focus = false })
|
||||||
end,
|
end,
|
||||||
mode = { "n", "x" },
|
mode = { "n", "x" },
|
||||||
desc = "Ask with all buffers",
|
desc = "Ask with all buffers",
|
||||||
|
|
@ -136,7 +127,7 @@ return {
|
||||||
{
|
{
|
||||||
"<leader>am",
|
"<leader>am",
|
||||||
function()
|
function()
|
||||||
safe_ask("@marks ", { submit = true, focus = false })
|
ask("@marks ", { submit = true, focus = false })
|
||||||
end,
|
end,
|
||||||
mode = { "n", "x" },
|
mode = { "n", "x" },
|
||||||
desc = "Ask with marks",
|
desc = "Ask with marks",
|
||||||
|
|
@ -145,7 +136,7 @@ return {
|
||||||
{
|
{
|
||||||
"<leader>ape",
|
"<leader>ape",
|
||||||
function()
|
function()
|
||||||
safe_ask("@this explain: ", { submit = true, focus = false })
|
ask("@this explain: ", { submit = true, focus = false })
|
||||||
end,
|
end,
|
||||||
mode = { "n", "x" },
|
mode = { "n", "x" },
|
||||||
desc = "Explain",
|
desc = "Explain",
|
||||||
|
|
@ -154,7 +145,7 @@ return {
|
||||||
{
|
{
|
||||||
"<leader>apf",
|
"<leader>apf",
|
||||||
function()
|
function()
|
||||||
safe_ask("@this fix: ", { submit = true, focus = false })
|
ask("@this fix: ", { submit = true, focus = false })
|
||||||
end,
|
end,
|
||||||
mode = { "n", "x" },
|
mode = { "n", "x" },
|
||||||
desc = "Fix",
|
desc = "Fix",
|
||||||
|
|
@ -163,7 +154,7 @@ return {
|
||||||
{
|
{
|
||||||
"<leader>apd",
|
"<leader>apd",
|
||||||
function()
|
function()
|
||||||
safe_ask("@this diagnose: ", { submit = true, focus = false })
|
ask("@this diagnose: ", { submit = true, focus = false })
|
||||||
end,
|
end,
|
||||||
mode = { "n", "x" },
|
mode = { "n", "x" },
|
||||||
desc = "Diagnose",
|
desc = "Diagnose",
|
||||||
|
|
@ -172,7 +163,7 @@ return {
|
||||||
{
|
{
|
||||||
"<leader>apr",
|
"<leader>apr",
|
||||||
function()
|
function()
|
||||||
safe_ask("@this review: ", { submit = true, focus = false })
|
ask("@this review: ", { submit = true, focus = false })
|
||||||
end,
|
end,
|
||||||
mode = { "n", "x" },
|
mode = { "n", "x" },
|
||||||
desc = "Review",
|
desc = "Review",
|
||||||
|
|
@ -181,7 +172,7 @@ return {
|
||||||
{
|
{
|
||||||
"<leader>apt",
|
"<leader>apt",
|
||||||
function()
|
function()
|
||||||
safe_ask("@this test: ", { submit = true, focus = false })
|
ask("@this test: ", { submit = true, focus = false })
|
||||||
end,
|
end,
|
||||||
mode = { "n", "x" },
|
mode = { "n", "x" },
|
||||||
desc = "Test",
|
desc = "Test",
|
||||||
|
|
@ -190,7 +181,7 @@ return {
|
||||||
{
|
{
|
||||||
"<leader>apo",
|
"<leader>apo",
|
||||||
function()
|
function()
|
||||||
safe_ask("@this optimize: ", { submit = true, focus = false })
|
ask("@this optimize: ", { submit = true, focus = false })
|
||||||
end,
|
end,
|
||||||
mode = { "n", "x" },
|
mode = { "n", "x" },
|
||||||
desc = "Optimize",
|
desc = "Optimize",
|
||||||
|
|
@ -234,48 +225,58 @@ return {
|
||||||
desc = "Add line to OpenCode",
|
desc = "Add line to OpenCode",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
opts = function()
|
config = function(_, opts)
|
||||||
-- 1. Setup autogroups/autocmds for terminal optimizations
|
local config = require("opencode.config")
|
||||||
local opencode_augroup = vim.api.nvim_create_augroup("opencode_integrated", { clear = true })
|
local opencode_cmd = "opencode --port"
|
||||||
|
local snacks_terminal_opts = {
|
||||||
|
win = {
|
||||||
|
position = "right",
|
||||||
|
on_win = function(win)
|
||||||
|
-- Set up keymaps and cleanup for an arbitrary terminal
|
||||||
|
require("opencode.terminal").setup(win.win)
|
||||||
|
end,
|
||||||
|
enter = false,
|
||||||
|
},
|
||||||
|
-- Otherwise, we get error `Terminal exited with code` when closing Opencode because
|
||||||
|
-- the `stop` command already closes the terminal window, but the Snacks.terminal `TermClose`
|
||||||
|
-- autocmd kicks in and tries to close it again, causing the error.
|
||||||
|
auto_close = false,
|
||||||
|
}
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd({ "BufEnter" }, {
|
config.opts = vim.tbl_deep_extend(
|
||||||
group = opencode_augroup,
|
"force",
|
||||||
pattern = "*:opencode --port*",
|
config.opts,
|
||||||
callback = function()
|
{
|
||||||
vim.cmd("startinsert")
|
server = {
|
||||||
end,
|
start = function()
|
||||||
})
|
require("snacks.terminal").open(opencode_cmd, snacks_terminal_opts)
|
||||||
|
end,
|
||||||
|
stop = function()
|
||||||
|
local win, created = require("snacks.terminal").get(opencode_cmd, snacks_terminal_opts)
|
||||||
|
if win and created then
|
||||||
|
win:close()
|
||||||
|
vim.cmd.stopinsert()
|
||||||
|
elseif win and not created then
|
||||||
|
win:close()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
toggle = function()
|
||||||
|
require("snacks.terminal").toggle(opencode_cmd, snacks_terminal_opts)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
-- We merge here also `opts` so we can bypass the following limitation with `vim.g` https://github.com/nickjvandyke/opencode.nvim/issues/36
|
||||||
|
opts or {},
|
||||||
|
vim.g.opencode_opts or {}
|
||||||
|
)
|
||||||
|
|
||||||
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-j>",
|
|
||||||
"<C-\\><C-n><C-w>j",
|
|
||||||
{ buffer = event.buf, desc = "Go to Lower Window" }
|
|
||||||
)
|
|
||||||
vim.keymap.set(
|
|
||||||
{ "t", "n" },
|
|
||||||
"<C-k>",
|
|
||||||
"<C-\\><C-n><C-w>k",
|
|
||||||
{ buffer = event.buf, desc = "Go to Upper Window" }
|
|
||||||
)
|
|
||||||
vim.keymap.set(
|
|
||||||
{ "t", "n" },
|
|
||||||
"<C-l>",
|
|
||||||
"<C-\\><C-n><C-w>l",
|
|
||||||
{ buffer = event.buf, desc = "Go to Right Window" }
|
|
||||||
)
|
|
||||||
vim.keymap.set("t", "<C-U>", function()
|
vim.keymap.set("t", "<C-U>", function()
|
||||||
require("opencode").command("session.half.page.up")
|
require("opencode").command("session.half.page.up")
|
||||||
end, { buffer = event.buf, desc = "Half scroll back" })
|
end, { buffer = event.buf, desc = "Half scroll back" })
|
||||||
|
|
@ -290,45 +291,6 @@ return {
|
||||||
end, { buffer = event.buf, desc = "Scroll forward" })
|
end, { buffer = event.buf, desc = "Scroll forward" })
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd("VimLeavePre", {
|
|
||||||
callback = function()
|
|
||||||
if vim.fn.has("unix") == 1 then
|
|
||||||
local pid = vim.fn.getpid()
|
|
||||||
vim.fn.system({ "pkill", "-P", tostring(pid), "-f", "opencode" })
|
|
||||||
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