-
Notifications
You must be signed in to change notification settings - Fork 637
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support for modifyOtherKeys
and the "fixterms" protocol
#242
Comments
Progress report: I've implemented the I have much more to do in that branch, I plan to take on |
I'm going to reopen this for a couple reasons.
|
@mitchellh I just took this for a spin. It's mostly working now! 🎉 The only thing I've noticed so far, is |
Poking around various terminals on Mac and Linux, it appears |
@hovsater OKAY! I've consulted the source, i.e. I believe that Here is my test script on Linux:
With state 1, I couldn't get any terminal to output anything for When I launch Note that I couldn't get any terminal on macOS to show the same sequences as xterm under any circumstance. I also cracked open the I could be very wrong, I'm not confident. Every implementation (and there are only few) seems different and the behaviors are not consistent at all. Hence, I'm falling back to |
See: #242 (comment) Quoted: @hovsater OKAY! I've consulted _the source_, i.e. `xterm`. None of the other reference material was illuminating and there is so much conflicting implementation out there and so very few terminals actually support `modifyOtherKeys`. I believe I've figured it out. I believe that `C-S-h` is only supported via `modifyOtherKeys` state 2. iTerm emits it for state 1 but I think this is a mistake and I can't get any other terminal to do it, including `xterm`. Here is my test script on Linux: ``` printf "\x1b[>4;1m" # change to "2" for state 2 showkey -a ``` With state 1, I couldn't get any terminal to output anything for `C-S-h`. **But with state 2, xterm outputs: ** `CSI 27;6;72~`. One thing to note is 72 is `H` (uppercase), so in even this case, iTerm appears to be sending the wrong code or `dte -K` is outputting the wrong case (less likely I think). When I launch `dte` (the full editor), it only requests `modifyOtherKeys` state 1. So, with only `modifyOtherKeys` support, it shouldn't get access to `C-S-h`. Note that I couldn't get any terminal on macOS to show the same sequences as xterm under any circumstance. I also cracked open the `xterm` source and I only eyeballed it but I believe this is not sending the sequences under state 1: https://sourcegraph.com/github.com/ThomasDickey/xterm-snapshots@c2b36af8d216926b8931c6f9cebefd69228e437c/-/blob/input.c?L579 **I could be very wrong, I'm not confident.** Every implementation (and there are only few) seems different and the behaviors are not consistent at all. Hence, I'm falling back to `xterm`, but even then I could be reading the source wrong. But when I ran `xterm` manually I could only get `C-S-h` to show up in state 2.
While Kitty's keyboard protocol is far superior, it only works if the underlying program has support for it. To date, there's just a handful of applications that do:
tmux does not. It does however support modifyOtherKeys (XTerm's
CSI 27 ~
encoding) and the fixterms proposal (which Kitty's keyboard protocol was based upon) through the option extended keys. tmux listens for the XTerm specific sequencesCSI > 4; 1 m
andCSI > 4; 0 m
to toggle extended keys, and accept both modifyOtherKeys sequences and fixterm sequences as input, but only output the latter. Quoting their changelog:I'm not entirely sure what the best course of action is here. While Kitty's keyboard protocol is superior, it's not as widespread as XTerm's
CSI 27 ~
encoding, so adding support for it makes sense. However, that alone does not allow all modifiers to be mapped, for that we'd need fixterms proposal which I believe is backwards compatible if implemented correctly.See also
The text was updated successfully, but these errors were encountered: