How can I map <c-[ and <c-{>?
I tried:
map global normal "<c-[>" ": echo -debug [<ret>"
map global normal "<c-{>" ": echo -debug {<ret>"
but it doesn’t work. I tried both Kakoune v2020.01.16 and git master.
I use xterm and X.
How can I map <c-[ and <c-{>?
I tried:
map global normal "<c-[>" ": echo -debug [<ret>"
map global normal "<c-{>" ": echo -debug {<ret>"
but it doesn’t work. I tried both Kakoune v2020.01.16 and git master.
I use xterm and X.
For historical reasons, <c-[> is the same as the Escape key, which you can’t remap because it’s kind of important to Kakoune. <c-{> doesn’t have a special ASCII code, but in most terminals that key combination probably also sends an Escape to Kakoune.
Someday somebody may write a non-terminal-based UI for Kakoune, in which case those key mappings would probably work fine. Right now, however, I think you’re out of luck.
And what about <c-]> and <c-}>?
I can’t map those either. <c-]> in ASCII is GS (group seperator), so it should not conflict with any other key.
I can’t map <c-]> or <c-}>, but I can do this:
:map global normal ␝ ": echo got ^]<ret>"
…where the special ␝ symbol is how Kakoune displays the ASCII group separator character, and is typed (at the : prompt) with <c-v><c-]> (that is, the Ctrl-V prefix makes Kakoune take the next character literally, whatever it is).
Unfortunately, I can’t (easily) figure out what’s going on here. So far as I can tell, when a GS byte is being parsed as a key name, it should be canonicalized into something like <c-}>. so mapping GS and mapping <c-}> should do the same thing. However, that doesn’t appear to be the case.
Likewise, when Kakoune receives GS from the terminal, it should be parsed into <c-}> again. But clearly this isn’t happening.
You mean <c-]>?
The code you linked to checks if key < 27, but GS is 29. So it seems Kakoune mishandles control characters 28 to 31.
As for <c-}>, it seems xterm sends a GS for it too, so it’s indistinguishable from <c-]>. Is there a way to change that?