You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sorry for the poor issue title, I wasn't sure how to concisely describe the problem. Basically it's this:
Given two widgets A and B, zvm_bindkey doesn't work well when I try to bind one to e.g., ^x and another to ^x^x. No matter what I do, I can't seem to get both keybindings working simultaneously. Which one works also seems to depend on the order in which they were bound using zvm_bindkey.
Extra observations
Based on my own reading of the source code, the problem seems to stem in part from these lines. However because I don't understand the intent, I can't recommend a fix.
Reproduction steps
❯ # define two arbitrary functions
❯ functionx_func() { echo hello from x }
❯ functionxx_func() { echo hello from xx }
❯
❯ # register the functions as zsh widgets
❯ zle -N x_func
❯ zle -N xx_func
❯
❯ # note that the x key is unused for any keybindings
❯ bindkey -L | grep -i x
❯
❯ # bind using zvm_keybind (first x_func then xx_func)
❯ zvm_bindkey viins "^x" x_func
❯ zvm_bindkey viins "^x^x" xx_func
❯
❯ # observe the results
❯ bindkey -L | grep -i x
bindkey "^X" zvm_readkeys_handler # <-- note that i didn't do this myself, and i suspect it's related to the issue reported here
bindkey "^X^X" xx_func
❯
❯ # now try to use the keybindings; note that ^x does nothing...
❯
❯ # ...meanwhile, ^x^x works as intended
❯ hello from xx
❯
❯ # now unbind both ^x and ^x^x for good measure
❯ bindkey -r -M viins "^x"
❯ bindkey -r -M viins "^x^x"
❯
❯ # sanity check that there are no "x" keybindings
❯ bindkey -L | grep -i x
❯
❯ # now re-bind, but this time in the opposite order (first xx_func then x_func)
❯ zvm_bindkey viins "^x^x" xx_func
❯ zvm_bindkey viins "^x" x_func
❯
❯ # observe the results
❯ bindkey -L | grep -i x
bindkey "^X" x_func # <-- seems correct now, no avm_readkeys_handler here like there was before
bindkey "^X^X" xx_func
❯
❯ # note that now ^x works...
❯ hello from x
❯
❯ # ...meanwhile, ^x^x no longer does (instead, it just triggers the ^x keybinding)
❯ hello from x
As you can see, in no case am I able to get both keybindings working simultaneously.
Furthermore, using zvm_bindkey with bindings like ^x and ^x^x yields different results depending on the order in which things are bound
Finally, zvm_readkeys_handler also pops up, muddying the debugging waters. (ref. #260)
Expected behavior
Both keybindings should work, lol. The possibility for ambiguity (e.g., when I type ^x, do I want to execute ^x, or am I just not finished typing ^x^x?) should already be resolvable by the existence of the KEYTIMEOUT variable.
Moreover, ideally order shouldn't matter, though I understand there may be some constraints there.
The text was updated successfully, but these errors were encountered:
General information
Basic examination
Problem description
Sorry for the poor issue title, I wasn't sure how to concisely describe the problem. Basically it's this:
Given two widgets
A
andB
,zvm_bindkey
doesn't work well when I try to bind one to e.g.,^x
and another to^x^x
. No matter what I do, I can't seem to get both keybindings working simultaneously. Which one works also seems to depend on the order in which they were bound usingzvm_bindkey
.Extra observations
Based on my own reading of the source code, the problem seems to stem in part from these lines. However because I don't understand the intent, I can't recommend a fix.
Reproduction steps
As you can see, in no case am I able to get both keybindings working simultaneously.
Furthermore, using
zvm_bindkey
with bindings like^x
and^x^x
yields different results depending on the order in which things are boundFinally,
zvm_readkeys_handler
also pops up, muddying the debugging waters. (ref. #260)Expected behavior
Both keybindings should work, lol. The possibility for ambiguity (e.g., when I type
^x
, do I want to execute^x
, or am I just not finished typing^x^x
?) should already be resolvable by the existence of theKEYTIMEOUT
variable.Moreover, ideally order shouldn't matter, though I understand there may be some constraints there.
The text was updated successfully, but these errors were encountered: