mirror of
https://github.com/wez/wezterm.git
synced 2024-12-25 22:33:52 +03:00
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
0c7e735a86
When the user switches to another virtual console and then back into a Wayland session, a number of seat updates are received by the listener installed by `Environment::listen_for_seats()`. These updates essentially flip the keyboard and pointer flags off and then back on in the seat data, which indicates that new handlers need to be assigned to the keyboard and pointer objects. However, because one update is received for _each_ flag being toggled, this means that the listener is fired twice with `has_keyboard` set to true, which means that two keyboard handlers end up being installed. Users then experience each keypress being delivered twice to the terminal. This commit adds a map to track the keyboard object that has been assigned on each seat, thereby preventing duplicate assignments and (by extension) duplicate keypresses being registered. This logic is essentially the same as what's used in the `kbd_input` example in SCTK, which doesn't have this issue. Something similar is required for pointer handling, which also breaks after switching to another virtual console and back into Wayland, but I was scared off by the TODO in the `listen_for_seats` callback and didn't investigate this further. |
||
---|---|---|
.cargo | ||
.github | ||
assets | ||
async_ossl | ||
base91 | ||
bidi | ||
bintree | ||
ci | ||
codec | ||
color-types | ||
config | ||
deps | ||
docs | ||
env-bootstrap | ||
filedescriptor | ||
licenses | ||
luahelper | ||
mux | ||
procinfo | ||
promise | ||
pty | ||
rangeset | ||
ratelim | ||
strip-ansi-escapes | ||
tabout | ||
term | ||
termwiz | ||
test-data | ||
umask | ||
vtparse | ||
wezterm | ||
wezterm-client | ||
wezterm-font | ||
wezterm-gui | ||
wezterm-gui-subcommands | ||
wezterm-input-types | ||
wezterm-mux-server | ||
wezterm-mux-server-impl | ||
wezterm-ssh | ||
wezterm-toast-notification | ||
window | ||
.cirrus.yml | ||
.gitignore | ||
.gitmodules | ||
.rustfmt.toml | ||
Cargo.lock | ||
Cargo.toml | ||
CONTRIBUTING.md | ||
get-deps | ||
LICENSE.md | ||
README.md | ||
wt-record | ||
wt-replay |
Wez's Terminal
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
User facing docs and guide at: https://wezfurlong.org/wezterm/
Screenshot of wezterm on macOS, running vim
Installation
https://wezfurlong.org/wezterm/installation.html
Getting help
This is a spare time project, so please bear with me. There are a couple of channels for support:
- You can use the GitHub issue tracker to see if someone else has a similar issue, or to file a new one.
- Start or join a thread in our GitHub Discussions; if you have general questions or want to chat with other wezterm users, you're welcome here!
- There is a Matrix room via Element.io for (potentially!) real time discussions.
The GitHub Discussions and Element/Gitter rooms are better suited for questions than bug reports, but don't be afraid to use whichever you are most comfortable using and we'll work it out.