From 384b88af5e8b7d5a217543aa7cedea6f2f917dcc Mon Sep 17 00:00:00 2001 From: Alejandro Espinoza Date: Fri, 19 Jun 2026 12:54:54 -0600 Subject: [PATCH 1/3] fix: keep colorscheme picker open on WSL GUI terminals Disable Snacks picker auto_close for colorschemes and skip CursorHold diagnostic floats while picker windows are focused. Co-authored-by: Cursor --- lua/config/autocmds.lua | 12 +++++++++++- lua/plugins/snaks.lua | 8 ++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lua/config/autocmds.lua b/lua/config/autocmds.lua index 8d30ca9..e85c338 100644 --- a/lua/config/autocmds.lua +++ b/lua/config/autocmds.lua @@ -104,10 +104,20 @@ vim.api.nvim_create_user_command( vim.api.nvim_create_autocmd("CursorHold", { callback = function() + -- Skip floats (picker, diagnostics) so WSL/GUI terminals don't fight for focus. + if vim.api.nvim_win_get_config(0).relative ~= "" then + return + end + + local ok, picker = pcall(require, "snacks.picker") + if ok and #picker.get() > 0 then + return + end + vim.diagnostic.open_float(nil, { focus = false }) end, }) vim.api.nvim_create_user_command("ColorScheme", function() - require("snacks").picker.colorschemes() + require("snacks").picker.colorschemes({ auto_close = false }) end, { desc = "Pick colorscheme (Snacks picker with preview)" }) diff --git a/lua/plugins/snaks.lua b/lua/plugins/snaks.lua index 1281481..2082a39 100644 --- a/lua/plugins/snaks.lua +++ b/lua/plugins/snaks.lua @@ -5,6 +5,14 @@ return { explorer = { enabled = false, }, + picker = { + sources = { + colorschemes = { + -- WSL + Kitty/Alacritty can fire spurious WinEnter events; keep picker open. + auto_close = false, + }, + }, + }, }, keys = { { From ecd2a34a10055d76f73d002523fb728ebe3d2144 Mon Sep 17 00:00:00 2001 From: Alejandro Espinoza Date: Fri, 19 Jun 2026 12:59:30 -0600 Subject: [PATCH 2/3] fix: defer ColorScheme picker and skip diagnostics in cmdline Opening the picker from :commands must wait for cmdline teardown; keymaps do not. Also skip CursorHold floats during cmdline/wildmenu to stop WSL completion from jumping to the second match. Co-authored-by: Cursor --- lua/config/autocmds.lua | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lua/config/autocmds.lua b/lua/config/autocmds.lua index e85c338..3d140ed 100644 --- a/lua/config/autocmds.lua +++ b/lua/config/autocmds.lua @@ -102,8 +102,21 @@ vim.api.nvim_create_user_command( { desc = "show hi name" } ) +local function open_colorscheme_picker() + -- Defer past cmdline teardown; keymaps don't need this, :commands do. + vim.schedule(function() + require("snacks").picker.colorschemes({ auto_close = false }) + end) +end + vim.api.nvim_create_autocmd("CursorHold", { callback = function() + -- Cmdline/wildmenu: avoid diagnostic float stealing focus (WSL tab completion jump). + local mode = vim.api.nvim_get_mode().mode + if mode:find("^c") or vim.fn.getcmdwintype() ~= "" then + return + end + -- Skip floats (picker, diagnostics) so WSL/GUI terminals don't fight for focus. if vim.api.nvim_win_get_config(0).relative ~= "" then return @@ -118,6 +131,9 @@ vim.api.nvim_create_autocmd("CursorHold", { end, }) -vim.api.nvim_create_user_command("ColorScheme", function() - require("snacks").picker.colorschemes({ auto_close = false }) -end, { desc = "Pick colorscheme (Snacks picker with preview)" }) +vim.api.nvim_create_user_command("PickColorscheme", open_colorscheme_picker, { + desc = "Pick colorscheme (Snacks picker with preview)", +}) +vim.api.nvim_create_user_command("ColorScheme", open_colorscheme_picker, { + desc = "Alias for PickColorscheme", +}) From 076f9055c8f6a24af8e192691e47360235fbdb75 Mon Sep 17 00:00:00 2001 From: Alejandro Espinoza Date: Fri, 19 Jun 2026 13:01:51 -0600 Subject: [PATCH 3/3] fix: disable kitty keyboard protocol on Kitty and Alacritty Neovim 0.11+ can receive duplicate Enter/Tab/Backspace events when the Kitty keyboard protocol is active in GUI terminals on WSL. Co-authored-by: Cursor --- init.lua | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/init.lua b/init.lua index 2514f9e..6a6b555 100644 --- a/init.lua +++ b/init.lua @@ -1,2 +1,24 @@ +-- Disable Kitty keyboard protocol to avoid double Enter/Tab/Backspace on +-- Kitty and Alacritty (common on WSL GUI terminals with Neovim 0.11+). +local function kitty_protocol_terminal() + local term = vim.env.TERM or "" + if term:match("kitty") or term:match("alacritty") then + return true + end + return vim.env.KITTY_WINDOW_ID ~= nil or vim.env.ALACRITTY_WINDOW_ID ~= nil +end + +if kitty_protocol_terminal() then + vim.api.nvim_create_autocmd({ "VimEnter", "VimLeavePre" }, { + callback = function(ev) + if ev.event == "VimEnter" then + io.stdout:write("\027[>1u") + else + io.stdout:write("\027[<1u") + end + end, + }) +end + -- bootstrap lazy.nvim, LazyVim and your plugins require("config.lazy")