mirror of
https://github.com/wez/wezterm.git
synced 2024-12-29 00:21:57 +03:00
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
e188406dfc
This commit decomposes the main get_semantic_zones method into two parts: * A per-line portion, where the line ranges are cached (invalidated on change) * The overall screen portion, where the line ranges are merged This changes the overall complexity of computing zones from O(width * scrollback-height) To an incremental: O((width * number of changed lines since last query) + scrollback-height) You can see some samples of elapsed time below; those show the times for running both the old and the new implementation on the same data. The number of lines/zones in the scrollback increases with each call and you can see that the new implementation is a bit faster anyway at low volumes but is significantly faster as the number of lines/zones increases, because the amount of work is reduced. ``` get_semantic_zones: 71.708µs get_semantic_zones_new: 59.041µs get_semantic_zones: 71.166µs get_semantic_zones_new: 9.166µs get_semantic_zones: 44.291µs get_semantic_zones_new: 4.208µs get_semantic_zones: 69.791µs get_semantic_zones_new: 10.291µs get_semantic_zones: 59.375µs get_semantic_zones_new: 7.958µs get_semantic_zones: 52.5µs get_semantic_zones_new: 4.5µs get_semantic_zones: 91.791µs get_semantic_zones_new: 20.916µs get_semantic_zones: 229.916µs get_semantic_zones_new: 109.208µs get_semantic_zones: 224.125µs get_semantic_zones_new: 15.208µs get_semantic_zones: 291.791µs get_semantic_zones_new: 11.833µs get_semantic_zones: 238.875µs get_semantic_zones_new: 12.625µs get_semantic_zones: 468.458µs get_semantic_zones_new: 126.583µs get_semantic_zones: 460.5µs get_semantic_zones_new: 25.666µs get_semantic_zones: 358.291µs get_semantic_zones_new: 19.541µs get_semantic_zones: 436.833µs get_semantic_zones_new: 17.875µs get_semantic_zones: 313.166µs get_semantic_zones_new: 15.25µs get_semantic_zones: 333.958µs get_semantic_zones_new: 16.541µs get_semantic_zones: 364.666µs get_semantic_zones_new: 14.041µs ``` |
||
---|---|---|
.cargo | ||
.github | ||
assets | ||
async_ossl | ||
base91 | ||
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.