which-key.nvim icon indicating copy to clipboard operation
which-key.nvim copied to clipboard

bug: `gcc` doesn't work on a new buffer

Open gwww opened this issue 9 months ago • 15 comments

Did you check docs and existing issues?

  • [x] I have read all the which-key.nvim docs
  • [x] I have updated the plugin to the latest version before submitting this issue
  • [x] I have searched the existing issues of which-key.nvim
  • [x] I have searched the existing issues of plugins related to this issue

Neovim version (nvim -v)

0.11 (but had problem on 0.10 as well)

Operating system/version

MacOS 15.3

Describe the bug

gcc to comment a line of code doesn't work sometimes. When I uninstall which-key the problem goes away.

Steps To Reproduce

  1. Edit a file: nvim init.lua
  2. Close the buffer using Snacks.buffer_delete; problem does not happen on initial buffer.
  3. Open init.lua again, using Snacker file picker
  4. Type gcc to comment a line. It doesn't work.
  5. Type g wait for which-key to popup then type cc. It works - the line is commented.
  6. All future gcc commands work without waiting after typing g
  7. Repeat by going to step 2 (gcc is broken again)

I included the debug log below and commented it with the steps above.

I also noted the warning in checkhealth which is specifically around gc and gcc. Given that is a standard nvim keymap I figure which-key should work without changing a standard keymap.

Expected Behavior

gcc always works

Health

which-key:                                 require("which-key.health").check()

- OK Most of these checks are for informational purposes only.
  WARNINGS should be treated as a warning, and don't necessarily indicate a problem with your config.
  Please |DON'T| report these warnings as an issue.

Checking your config ~
- OK |mini.icons| is installed
- OK |nvim-web-devicons| is installed

Checking for issues with your mappings ~
- OK No issues reported

checking for overlapping keymaps ~
- WARNING In mode `n`, <gc> overlaps with <gcO>, <gcc>, <gco>:
  - <gc>: Toggle comment
  - <gcO>: Add Comment Above
  - <gcc>: Toggle comment line
  - <gco>: Add Comment Below
- OK Overlapping keymaps are only reported for informational purposes.
  This doesn't necessarily mean there is a problem with your config.

Checking for duplicate mappings ~
- OK No duplicate mappings found

Log

Debug Started for v3.17.0
{
  commit = "fcbf4eea17cb299c02557d576f0d568878e354a4"
}
LspAttach(1)
new Mode(n:1)
Trigger(add) Mode(n:1) ' " ` g` g' z= < g , > <C-W> z [ ]
new Mode(n:1)
LspAttach(1)
  Trigger(del) Mode(n:1) < g , > <C-W> z [ " ' ` g` g' z= ]
new Mode(n:1)
Trigger(add) Mode(n:1) ' " ` g` g' z= < g , > <C-W> z [ ]
on_key: ,
State(start): Mode(n:0) Node(,) { keys = "," }
  update Mode(n:1)
  continue: , Mode(n:1)
  getchar
  on_key: c
  got: c
  suspend: Mode(n:1)
  Trigger(del) Mode(n:1) < g , > <C-W> z [ " ' ` g` g' z= ]
  feedkeys: Mode(n:1) ,c

-- close initial buffer - problem doesn't seem to happen on initial buffer
on_key: ,c
BufNew(2)
LspDetach(1)
LspDetach(1)
BufEnter(2)
  new Mode(n:2)
BufNew(3)
Trigger(add) Mode(n:2) ' " ` g` g' z= < g , > <C-W> z [ ]
Trigger(add) Mode(n:1) ' " ` g` g' z= < g , > <C-W> z [ ]
on_key: ,
State(start): Mode(n:0) Node(,) { keys = "," }
  update Mode(n:2)
  continue: , Mode(n:2)
  getchar
  on_key: e
  got: e
  suspend: Mode(n:2)
  Trigger(del) Mode(n:2) ' " ` g' z= < g , > <C-W> z [ ] g`
  feedkeys: Mode(n:2) ,e

-- open snacks file picker
on_key: ,e
Trigger(add) Mode(n:2) ' " ` g` g' z= < g , > <C-W> z [ ]
BufNew(4)
BufNew(5)
BufNew(6)
BufNew(7)
BufNew(8)
BufNew(9)
BufEnter(7)
  new Mode(n:7)
Trigger(add) Mode(n:7) " ' ` g` g' z= < g ] , > z <C-W> [
ModeChanged(n:i)
  new Mode(i:7)
  Safe(true)
Trigger(add) Mode(i:7) <C-R>

-- pick first file in the picker
on_key: <CR>
ModeChanged(i:n)
  Safe(true)
BufEnter(2)
LspAttach(1)
Trigger(del) Mode(n:2) ' " ` g` g' z= < g , > <C-W> z [ ]
Trigger(del) Mode(i:7) <C-R>
Trigger(del) Mode(n:7) < g ] , > z <C-W> [ " ' ` g` g' z=
LspAttach(1)
BufReadPost(1)
BufEnter(1)
  new Mode(n:1)
Trigger(del) Mode(n:1) " ` g` g' z= < g , > <C-W> z [ ] '
Trigger(add) Mode(n:1) ' " ` g` g' z= < g , > <C-W> z [ ]
new Mode(n:1)

-- type `gcc` to comment a line; this does not work
on_key: gc
ModeChanged(n:no)
  new Mode(o:1)
  Safe(true)
  State(start): Mode(o:0) Node() { defer = false }
    update Mode(o:1)
    continue:  Mode(o:1)
    getchar
    Trigger(add) Mode(o:1) ] [ g
    on_key: c
    got: c
    suspend: Mode(o:1)
    Trigger(del) Mode(o:1) ] [ g
    feedkeys: Mode(o:1) c

-- presumably the second `c` from typing `gcc above`
on_key: c
ModeChanged(no:n)
  Safe(true)
Trigger(add) Mode(o:1) ] [ g

-- try again to comment; this time type `g` wait for which-key popup
-- then typed `cc` - this command worked (commented the line)
on_key: g
State(start): Mode(n:0) Node(g) { keys = "g" }
  update Mode(n:1)
  continue: g Mode(n:1)
  getchar
  on_key: c
  got: c
  continue: gc Mode(n:1)
  getchar
  on_key: c
  got: c
  suspend: Mode(n:1)
  Trigger(del) Mode(n:1) " ` g` g' z= < g , > <C-W> z [ ] '
  feedkeys: Mode(n:1) gcc
on_key: gcc
ModeChanged(n:no)
  Unsafe(pending "_")
  suspend: Mode(o:1)
  Trigger(del) Mode(o:1) ] [ g
ModeChanged(no:n)
  cooldown
Trigger(add) Mode(o:1) ] [ g
Trigger(add) Mode(n:1) ' " ` g` g' z= < g , > <C-W> z [ ]

-- typed `gcc` again to uncomment line; no pause when typing - command worked!
-- in fact all future `gcc` commands work UNTIL I close the buffer (snacks bufdelete)
-- and then I open a file again. Then I'm back to `gcc` doesn't work until I
-- type `g` wait then type `cc`
on_key: g
State(start): Mode(n:0) Node(g) { keys = "g" }
  update Mode(n:1)
  continue: g Mode(n:1)
  getchar
  on_key: c
  got: c
  suspend: Mode(n:1)
  Trigger(del) Mode(n:1) " ` g` g' z= < g , > <C-W> z [ ] '
  feedkeys: Mode(n:1) gc
on_key: gcc
ModeChanged(n:no)
  Unsafe(pending "_")
  suspend: Mode(o:1)
  Trigger(del) Mode(o:1) ] [ g
ModeChanged(no:n)
  cooldown
Trigger(add) Mode(o:1) ] [ g
Trigger(add) Mode(n:1) ' " ` g` g' z= < g , > <C-W> z [ ]

-- :q to quit nvim
on_key: :
ModeChanged(n:c)
  new Mode(c:1)
  Safe(true)
Trigger(add) Mode(c:1) <C-R>
on_key: q
BufNew(15)
on_key: <CR>
ModeChanged(c:n)
  Unsafe(command-mode)
  suspend: Mode(n:1)
  Trigger(del) Mode(n:1) " ` g` g' z= < g , > <C-W> z [ ] '
ModeChanged(n:c)
  cooldown
Trigger(add) Mode(n:1) ' " ` g` g' z= < g , > <C-W> z [ ]
on_key: n
ModeChanged(c:r?)
  Unsafe(command-mode)
  suspend: Mode(n:1)
  Trigger(del) Mode(n:1) " ` g` g' z= < g , > <C-W> z [ ] '
Trigger(add) Mode(n:1) ' " ` g` g' z= < g , > <C-W> z [ ]
LspDetach(1)
  Trigger(del) Mode(n:1) ' " ` g` g' z= < g , > <C-W> z [ ]
  Trigger(del) Mode(c:1) <C-R>
  Trigger(del) Mode(o:1) ] [ g

Repro

I could not reproduce with the repro.lua.

gwww avatar Mar 27 '25 00:03 gwww

I have a similar issue but where adding a pause after the second button in the sequence, such as gc<PAUSE>c, it seems to show the menu as if I had only pressed c<PAUSE>. The g is not handled for some reason.

If I do gcc quickly, it works as intended, and if I do g<PAUSE>cc, it works as well, but not gc<PAUSE>c.

This seems to track across all bindings, not just gcc, as far as I am aware at the moment.

simpers avatar Apr 12 '25 09:04 simpers

This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 7 days.

github-actions[bot] avatar May 13 '25 02:05 github-actions[bot]

Not stale

gwww avatar May 13 '25 11:05 gwww

This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 7 days.

github-actions[bot] avatar Jun 13 '25 02:06 github-actions[bot]

Not stale

gwww avatar Jun 13 '25 02:06 gwww

This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 7 days.

github-actions[bot] avatar Jul 30 '25 02:07 github-actions[bot]

note stale

JBlond avatar Jul 30 '25 09:07 JBlond

This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 7 days.

github-actions[bot] avatar Aug 31 '25 02:08 github-actions[bot]

Not stale

gwww avatar Aug 31 '25 02:08 gwww

This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 7 days.

github-actions[bot] avatar Oct 02 '25 02:10 github-actions[bot]

Not stale

gwww avatar Oct 02 '25 02:10 gwww

This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 7 days.

github-actions[bot] avatar Nov 02 '25 02:11 github-actions[bot]

Not stale

Frestein avatar Nov 02 '25 02:11 Frestein