1
1
mirror of https://github.com/wez/wezterm.git synced 2024-12-28 07:55:03 +03:00
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
Go to file
Magnus Groß 087e11ebbb Drop duplicate entries from CharSelect menu
Previously the same emoji was able to appear multiple times in the
CharSelect modal for emoji input, because one emoji might have multiple
aliases. In fact, often the aliases have similar names, making it
especially likely that a fuzzy match matches multiple aliases at the
same time.

The same Unicode char may even match multiple times both as
Character::Unicode as well as a Character::Emoji.

To make the deduplication easy, store the results in a hash map instead
of a vector. We use the glyph as the key of the map to get free
deduplication.

Only update the mapped value, if a duplicate entry would improve the
score.

Performance-wise this is pretty much identical to the previous state.
We do see minor performance regression for very large n - granted, this
is expected as we do more work - but the use of the HashMap covers up
for a large part of it.

If the user types more than 3 characters, the performance is absolutely
identical. For less than 3 characters, the performance was unacceptable
anyway (700 ms before this patch, 800 ms after this patch on my system).

Here is a side-by-side comparison for a user iteratively typing the
query "no-evil":

#  Before         After
1  718.361276ms   837.612275ms
2  719.532450ms   816.348394ms
3  349.625101ms   369.726458ms
4  356.349671ms   354.367768ms
5  363.862194ms   361.985546ms
6  372.339582ms   370.022932ms
7  381.123785ms   378.349672ms

In fact, for small n, the hash map seems to perform even slightly better
than the vector.
For large n we need to optimize the performance anyway, as both 700ms
and 800ms are unacceptable.
Thus, this is worth it for the benefit of Unicode symbol deduplication.
2023-07-10 17:16:23 -07:00
.cargo build static on windows for static openssl linkage 2020-02-02 13:03:07 -08:00
.github ci: disable termwiz fuzz job 2023-07-05 06:50:14 -07:00
assets remove old colors directory 2023-07-09 20:29:47 -07:00
async_ossl Raise minimum Rust version to 1.51, de-vendor openssl on unix 2021-03-25 09:43:50 -07:00
base91 dyn everywhere 2019-06-08 21:28:11 -07:00
bidi fix(clippy): Use faster methods on Iterators 2023-03-19 07:29:23 -07:00
bintree Add SplitPane assignment 2022-05-21 21:09:11 -07:00
ci ci: remove alpine 2023-05-27 14:10:07 -07:00
codec feat: resize pane from CLI (#3491) 2023-04-18 08:34:39 -07:00
color-types fix(clippy): Implement From instead of Into 2023-04-03 08:31:12 -07:00
config new exit_behavior_messaging option 2023-07-10 17:14:48 -07:00
deps deps: harfbuzz -> 8.0.0 2023-07-09 07:38:36 -07:00
docs new exit_behavior_messaging option 2023-07-10 17:14:48 -07:00
env-bootstrap env: Strip unwanted Snap variables from environment (#3738) 2023-05-22 06:39:03 -07:00
filedescriptor Image decoding is now done in a bg thread 2023-03-17 11:41:20 -07:00
frecency remove transitive dep on time 0.1 2023-04-18 13:53:59 -07:00
lfucache lfucache: improve LFU algorithm and structure 2022-11-14 10:00:49 -07:00
licenses macOS: bundle and use MetalANGLE to enable Metal rendering 2020-10-17 09:34:01 -07:00
lua-api-crates fix(plugin): drop Repository, so that renaming succeeds on Windows 2023-05-28 09:18:42 -07:00
luahelper fix(clippy): Remove unnecessary clone/to_string calls 2023-03-16 07:40:12 -07:00
mux new exit_behavior_messaging option 2023-07-10 17:14:48 -07:00
procinfo fix(clippy): Remove closures where possible 2023-03-19 08:41:38 -07:00
promise fix(clippy): Remove closures where possible 2023-03-19 08:41:38 -07:00
pty hold pane open when spawn fails 2023-07-09 13:53:41 -07:00
rangeset rangeset: fix accidentally quadratic complexity 2022-07-24 12:48:02 -07:00
ratelim ratelimit: remove indirect dep on quanta 2023-04-08 15:47:34 -07:00
strip-ansi-escapes deps: update to clap 4 2022-10-04 08:55:31 -07:00
sync-color-schemes Add new color schemes: hardhacker and bamboo 2023-07-09 21:26:18 -07:00
tabout fixup images with the multiplexer 2023-03-23 21:43:28 -07:00
term feat: handle horizontal mousewheel events 2023-07-10 12:55:13 -07:00
termwiz termwiz: windows: speculative build fix 2023-07-06 14:07:33 -07:00
test-data add tty-test.txt for showing most attributes 2022-09-08 08:14:29 -07:00
umask fix(clippy): Remove unnecessary clone/to_string calls 2023-03-16 07:40:12 -07:00
vtparse Add missing license files 2022-08-17 07:19:12 -07:00
wezterm wezterm cli tlscreds: add --pem output mode 2023-06-22 21:21:34 -07:00
wezterm-blob-leases try scaling down images that don't fit in the texture atlas 2023-05-19 08:57:38 -07:00
wezterm-client feat: handle horizontal mousewheel events 2023-07-10 12:55:13 -07:00
wezterm-dynamic fix(clippy): Remove closures where possible 2023-03-19 08:41:38 -07:00
wezterm-font fonts: micro optimize by caching size calcs 2023-05-29 10:36:59 -07:00
wezterm-gui Drop duplicate entries from CharSelect menu 2023-07-10 17:16:23 -07:00
wezterm-gui-subcommands Add serial_ports config 2023-03-29 19:05:13 -07:00
wezterm-input-types keys: don't hide mouse cursor when pressing only modifier keys 2023-04-20 07:53:20 -07:00
wezterm-mux-server mux: fix pid file locking 2023-03-29 06:10:11 -07:00
wezterm-mux-server-impl feat: resize pane from CLI (#3491) 2023-04-18 08:34:39 -07:00
wezterm-open-url remove open dependency 2023-03-19 13:12:20 -07:00
wezterm-ssh bump some deps, and cargo update 2023-07-09 18:26:46 -07:00
wezterm-toast-notification Fix dbus value parsing issue by upgrading zbus/zvariant crate 2023-05-30 06:27:29 -07:00
wezterm-version build: revise dep graph for version changes 2023-04-08 17:03:03 -07:00
window x11: remove diagnostic print of kbd layouts 2023-07-10 07:37:51 -07:00
.cirrus.yml ci: maybe increase fbsd disk space 2023-04-21 07:53:30 -07:00
.gitignore docs: simplify templating of install pages 2023-03-21 09:31:49 -07:00
.gitmodules repoint to my freetype mirror 2021-02-03 21:56:30 -08:00
.mailmap add .mailmap 2022-12-07 12:09:06 -08:00
.rustfmt.toml encoding my preferred import grouping in the rustfmt config 2022-01-17 13:50:51 -07:00
Cargo.lock color schemes: adjust sync aliasing 2023-07-09 21:20:48 -07:00
Cargo.toml patch rust-xcb until a release is made with my alignment fix 2023-07-06 13:03:47 -07:00
CONTRIBUTING.md Typo fixes. 2023-05-16 20:42:29 -07:00
get-deps ci: persuade zypper to install deps in get-deps 2023-03-21 20:01:57 -07:00
LICENSE.md Bundle Symbols Nerd Font Mono 2022-01-16 16:04:35 -07:00
mkdocs_macros.py make the default front_end=WebGpu 2023-04-17 18:00:51 -07:00
README-DISTRO-MAINTAINER.md fonts: remove last resort font 2022-09-15 08:23:58 -07:00
README.md Expand sponsor section of readme 2023-04-02 23:37:54 -07:00

Wez's Terminal

WezTerm Icon 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

Screenshot of wezterm on macOS, running vim

Installation

https://wezfurlong.org/wezterm/installation

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.

Supporting the Project

If you use and like WezTerm, please consider sponsoring it: your support helps to cover the fees required to maintain the project and to validate the time spent working on it!

Read more about sponsoring.