folke / which-key.nvim

💥 Create key bindings that stick. WhichKey helps you remember your Neovim keymaps, by showing available keybindings in a popup as you type.
Apache License 2.0
4.99k stars 160 forks source link

bug: which-key messes up nvim mode (shown in lualine) #534

Closed Susensio closed 9 months ago

Susensio commented 9 months ago

Did you check docs and existing issues?

Neovim version (nvim -v)

0.9.4

Operating system/version

Debian trixie

Describe the bug

When using which-key for operator pending mappings, lualine mode won't show OP-PENDING. As lualine is just calling vim.api.nvim_get_mode() https://github.com/nvim-lualine/lualine.nvim/blob/2248ef254d0a1488a72041cfb45ca9caada6d994/lua/lualine/utils/mode.lua#L47 I guess which-key popup is changing nvim mode inadvertently.

Steps To Reproduce

  1. press d operator pending command
  2. wait
  3. which-key popup shows
  4. nvim mode is NORMAL in lualine

if I enabled = false which-key

  1. press d operator pending command
  2. nvim mode is O-PENDING in lualine

Expected Behavior

It would be nice if popup would not change the underlying nvim mode.

Repro

-- DO NOT change the paths and don't remove the colorscheme
local root = vim.fn.fnamemodify("./.repro", ":p")

-- set stdpaths to use .repro
for _, name in ipairs({ "config", "data", "state", "cache" }) do
  vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name
end

-- bootstrap lazy
local lazypath = root .. "/plugins/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", lazypath, })
end
vim.opt.runtimepath:prepend(lazypath)

-- install plugins
local plugins = {
  "folke/tokyonight.nvim",
  { "folke/which-key.nvim", config = true },
  { "nvim-lualine/lualine.nvim", config = true },
}
require("lazy").setup(plugins, {
  root = root .. "/plugins",
})

vim.cmd.colorscheme("tokyonight")
folke commented 9 months ago

That's to be expected, since you won't be in op-pending mode when which-key shows and becasue of redraws