1
1
mirror of https://github.com/wez/wezterm.git synced 2024-12-29 16:42:13 +03:00
Commit Graph

1327 Commits

Author SHA1 Message Date
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
Rémi Labeyrie
da2c035ad2 feat: handle horizontal mousewheel events 2023-07-10 12:55:13 -07:00
Wez Furlong
f901dfbf68
deps: tiny-skia -> 0.11 2023-07-09 18:28:48 -07:00
Wez Furlong
96f5c2b562
images: wait for first frame of decoded images
Avoid flickering with the interim black frame but waiting up to 125ms
for the first frame to be decoded.

refs: #3882
2023-07-09 16:29:59 -07:00
Wez Furlong
2334e679a9
launcher: add ctrl-j/k assignments
refs: #3909
2023-06-29 07:59:41 -07:00
Wez Furlong
c1f495099e
deps: fastrand -> 2.0 2023-06-19 10:44:21 -07:00
Wez Furlong
c1147720bc
remove old paste chunking logic
I believe that this was obsoleted long ago by the ThreadedWriter
logic that is present in the terminal implementation so we no
longer need to limit the write chunk size.

refs: #3683
2023-05-29 15:10:57 -07:00
Wez Furlong
853fb00302
even more fallout from Nerd Font symbols breaking changes in 3.0 2023-05-29 14:15:00 -07:00
Wez Furlong
7e2b7ca84d
deps: update tiny-skia
closes: https://github.com/wez/wezterm/pull/3794
2023-05-28 20:18:00 -07:00
Ye Sijun
95ab807aab add color config for char select
Signed-off-by: Ye Sijun <junnplus@gmail.com>
2023-05-28 09:01:22 -07:00
Wez Furlong
9b31092e1d
fix fallback scaling for background images
We weren't redrawing the background image with the scale factor
that we'd computed when noticing that we had run out of texture space.

refs: #3773
2023-05-27 14:06:18 -07:00
Wez Furlong
6b21e6ffde
fixup tests for symbols font changes 2023-05-21 10:07:07 -07:00
Wez Furlong
098e0e0201
fix CopyMode(EditPattern) not activating search_mode key table
refs: #3746
2023-05-21 10:04:56 -07:00
Wez Furlong
281e0e1737
windows: fix overlay/modal shortcuts
Arrow keys have ENHANCED_KEY set in the mods, and shifted keys had
positional mods in things like quickselect.

Strip them out.

I think I got all the cases, but it's possible that one slipped
through.

refs: https://github.com/wez/wezterm/issues/3617
2023-05-20 20:00:24 -07:00
Wez Furlong
e41c4405c7
palette: avoid spurious warning when opening command palette
If you haven't registered an augment-command-palette event,
you'd see:

```
16:29:02.641 WARN wezterm_gui::termwindow::palette >
augment-command-palette: error converting Lua nil to Rust Type (Cannot
convert `Null` to `Vec`)
```

refs: https://github.com/wez/wezterm/issues/3595
2023-05-20 19:54:24 -07:00
Wez Furlong
4ae176dd8a
try scaling down images that don't fit in the texture atlas
When trying to display a 4k image there is a high chance that
we'll run out of texture space and then render with no images
displayed.

This commit changes the binary yes/no allow-images into a a series
of attempts: display at natural size, scale down by 2, 4, then 8,
then give up on images.

While looking at this, I noticed that we had a TOCTOU in the blob lease
stuff in the case where we might very quickly try the handle the same
image in succession, and end up deleting a file out from under a live
lease.

I've put in place a simple bandaid for that, but it's probably worth
revisiting the concurrency model for that.
2023-05-19 08:57:38 -07:00
Wez Furlong
134bf0a74d
fix decoding of grayscale pngs
refs: #3742
2023-05-19 06:31:33 -07:00
Wez Furlong
bdb173f18f
webgpu: avoid panic when we try to exceed max texture size
This echoes equivalent logic we have for EGL; what happens when
this triggers is that we'll retry rendering with images disabled.

refs: #3713
2023-05-13 07:36:21 -07:00
Wez Furlong
6d8e266698
fixup setting background layer(s) to solid colors
This is a regression caused by recent work such as 27fbff4ae1

This config wouldn't set the background color to red because we'd never
consider the frame to be loaded:

```lua
local wezterm = require 'wezterm'

local config = wezterm.config_builder()

config.background = {
  { source = { Color = '#FF0000' }, width = '100%', height = '100%' },
}

return config
```
2023-05-10 06:29:45 -07:00
Wez Furlong
349ce3cf3c
webgpu: allow using Gl backend
This works for me on my radeon drivers.

It undoes a bail out that I added as part of 3565.

I'm not sure how best to handle the broken virtualbox driver situation
at this time.

refs: https://github.com/wez/wezterm/issues/3691
refs: https://github.com/wez/wezterm/issues/3565
2023-05-07 10:34:59 -07:00
Wez Furlong
27fbff4ae1
show terminal background while waiting for background image to load
Avoid a "flash" of a single black but likely overly stretched and
awkwardly interpolated frame while we wait for big/animated/complex
images to load and decode.

For corrupt images, or images with an incorrect or typo'd filename in
the config, this prevents us from punting and just showing a transparent
background instead of something reasonable.
2023-05-07 09:16:44 -07:00
Wez Furlong
989bd6ce77
cargo update 2023-05-01 08:36:25 -07:00
Wez Furlong
9bc7de70ea
fix image display in wezterm ssh
Move the blob lease init into the common code, rather than just
the bit that runs for the regular gui init.

refs: #3624
2023-04-27 06:35:11 -07:00
Wez Furlong
6686adba04
fix panic with corrupt webp file
There were a couple of layers of issue here:

* In the ImageDataType::decode method, we didn't detect and do something
  reasonable when the decoded image had 0 frames, later leading to
  a panic in glyphcache when trying to index frame 0 of an empty vec.
* We shouldn't have been using ImageDataType::decode for window
  background images
* Make the fallback/placeholder black rather than fully transparent
  in the more modern decoder thread routine that we use for image
  decoding at the gui layer.

refs: #3614
2023-04-25 08:39:42 -07:00
Wez Furlong
dc2cd706dc
macos: remove about dialog
Replace it with a menu item that shows the version number, and
that you can click to copy the version number.

closes: https://github.com/wez/wezterm/issues/3507
2023-04-24 11:08:18 -07:00
Wez Furlong
26090da81e
deps: tiny-skia -> 0.9 2023-04-24 09:13:44 -07:00
Wez Furlong
5c2e3fe809
wgpu: better approach than 38dd3045a3
Attempting to run when SURFACE_VIEW_FORMATS isn't successful,
so the alternative approach is to more gracefully report the
error.

refs: https://github.com/wez/wezterm/issues/3565
2023-04-23 17:48:40 -07:00
Wez Furlong
9ec7973326
webgpu: allow using pre-multiplied alpha if available
We prefer post-multipled, but if the implementation doesn't
support that, pretend that we are pre-multiplied.

refs: https://github.com/wez/wezterm/issues/3589
2023-04-23 14:19:57 -07:00
Wez Furlong
f8bafc3c67
palette: add augment-command-palette event
This allows the user to add entries to the command palette without
having to define dummy key assignments for them.

refs: https://github.com/wez/wezterm/issues/3595
2023-04-23 09:39:16 -07:00
Wez Furlong
70d809fa88
un-zoom/re-zoom around PaneSelect
refs: https://github.com/wez/wezterm/issues/3573
2023-04-20 21:52:09 -07:00
Wez Furlong
8c975a7681
keys: don't hide mouse cursor when pressing only modifier keys
Further constrain the hiding logic for key-down events, so that
we are less likely to hide for things ctrl-shift-c when the user
is mousing around and copy/pasting.

Also, consider CapsLock to be a modifier for this and other
similar purposes.

refs: #3570
refs: #3306
2023-04-20 07:53:20 -07:00
Wez Furlong
38dd3045a3
webgpu: attempt to run on non-comformant devices
refs: https://github.com/wez/wezterm/issues/3565
2023-04-19 23:22:43 -07:00
Wez Furlong
d5eee1817a
deps: upgrade wgpu 0.15 -> 0.16 2023-04-19 21:48:13 -07:00
Wez Furlong
68928178ed
rustfmt 2023-04-18 15:05:05 -07:00
Josiah Outram Halstead
588ce8013f Add custom eighth block corner glyphs 2023-04-18 15:04:47 -07:00
Wez Furlong
0a47f8ea76
remove transitive dep on time 0.1
chrono still is pulling this in for some reason. Super frustrating.

refs: https://github.com/chronotope/chrono/issues/602
2023-04-18 13:53:59 -07:00
Wez Furlong
44eccffe0c
macos: fix font size issue when spawning on external monitor
The main part of the problem is that NSWindow::isZoomed lies to us
sometimes.

This is a relatively gross workaround.

Add missing invalidation after setting the content size; that prevents
janky when dragging the window between monitors.
Removed some redundant Dimensions computation from that method; nothing
ever read it.

refs: https://github.com/wez/wezterm/issues/3503
2023-04-18 10:35:58 -07:00
Wez Furlong
87cd9c5f6c
adjust_window_size_when_changing_font_size now considers tiling WMs
It's a little limited in the scope of its detection: we have a built-in
list of tiling WM environments and if the current one is on the list
then we set an appropriate value for this option.

The list currently has just a single entry.
2023-04-17 21:58:08 -07:00
Wez Furlong
bcac0bfa8f
debug overlay: OpenGL version -> WebGpu for webgpu
Don't prefix the renderer info with OpenGL.
Make the per-renderer include that prefix.
2023-04-17 18:09:01 -07:00
Wez Furlong
075388fbe5
add window:keyboard_modifiers() method 2023-04-16 19:53:32 -07:00
Wez Furlong
7aa611f4cb
windows: fix linger wezterm-gui when closing with overlay active
refs: #3522
2023-04-16 12:23:00 -07:00
Wez Furlong
f627d6d704
windows: improve hit test for integrated max button
refs: https://github.com/wez/wezterm/issues/3499

but isn't the cause of it
2023-04-16 11:37:58 -07:00
Wez Furlong
4ba653c716
fix width of format-tab-title that returns embedded escapes
closes: #3481
2023-04-16 08:28:35 -07:00
Wez Furlong
8435a12e12
rustfmt 2023-04-16 06:57:28 -07:00
Wez Furlong
6ec11393d5
fix decoding png images without an alpha channel
refs: #3529
2023-04-15 23:59:02 -07:00
Wez Furlong
8d0b84a5ce
glyphcache: add some more error context 2023-04-15 23:33:50 -07:00
Wez Furlong
8c931dcbcb
paint: add some error context
The error described in https://github.com/wez/wezterm/discussions/3527
is missing context, so add a bit more.
2023-04-15 23:15:53 -07:00
Wez Furlong
3c40846d95
keyboard: move led status to separate enum 2023-04-15 14:52:54 -07:00
Wez Furlong
08972faff2
user-var-changed event should only trigger in the containing window
refs: https://github.com/wez/wezterm/issues/3524
2023-04-15 11:33:01 -07:00
Wez Furlong
7d66bc761d
termwiz::Modifiers is now wezterm_input_types::Modifiers 2023-04-13 14:18:13 -07:00