1
1
mirror of https://github.com/wez/wezterm.git synced 2024-12-21 12:21:32 +03:00
Commit Graph

1340 Commits

Author SHA1 Message Date
Wez Furlong
4d33b3b535
shapecache fixup test for updated noto font 2023-08-22 09:53:59 -07:00
Wez Furlong
8f4f9653c5
font: adjust metrics for pre-scaled bitmap glyphs
When using the harfbuzz rasterizer with a bitmap glyph, the result
is a rasterized glyph that is pre-scaled to the cell dimensions.

We need to tell glyphcache that that has happened, otherwise it
will apply the same scale factor again.
2023-08-20 17:32:42 -07:00
Wez Furlong
7264030a28
fonts: adopt fixed crate for freetype fixed-point math
This found at least one bug and should prevent future bugs.
2023-08-20 15:19:30 -07:00
Wez Furlong
0499ab0430
mlua 0.9 is now stable; update 2023-08-17 09:26:47 -07:00
Wez Furlong
2a7167a0ef
fix some warnings 2023-08-06 09:18:40 -07:00
Wez Furlong
18d93fce5a
gui: remove config.dpi override logic
The overrides are now applied at the window layer, which is (mostly!)
aware of per-screen overrides.

refs: #4096
2023-08-06 08:45:14 -07:00
Wez Furlong
d1d4db20be
cargo update
Transitive deps now require rust 1.71, so update for that, as well
as some other minor changes required by transitive deps.
2023-07-30 20:09:15 -07:00
Wez Furlong
a07ab883af
persist charselect, repl history and others in data dir
We were using the runtime dir with a fallback to a directory
that was equivalent to the data dir on !xdg systems.  That
meant that the state in the runtime dir was often scrubbed
around a reboot.

refs: https://github.com/wez/wezterm/discussions/4019
refs: https://github.com/wez/wezterm/issues/4047
2023-07-22 10:31:03 -07:00
Wez Furlong
3e3df823e4
deps: update wgpu -> 0.17
Pick up my fix from https://github.com/gfx-rs/wgpu/pull/3924

closes: https://github.com/wez/wezterm/issues/3612
2023-07-22 08:00:59 -07:00
Wez Furlong
b7771feef6
imgcat: work better with tmux and conpty
Neither of these understand image protocols, and both are
an additional processing layer between the application and
wezterm.

This commit detects and wraps OSC sequences in tmux's passthru
sequence so that the data is passed on to wezterm rather than
elided from the data stream.

For image protocols in both tmux and conpty, work a little
smarter and explicitly move the cursor position to the same
location that wezterm would move it to.  That prevents the
display from being as mangled by tmux/conpty due to a diverging
understanding of the cursor position.

The logic isn't perfect, and can result in the x-coordinate
being incorrect, and this won't work with the new --position
argument either in its current state, without adding a lot
of complexity to deal with scrolling and relative and absolute
positioning handling.

To facilitate that, a new termwiz Terminal trait method has
been added to probe the terminal name, version, cell and pixel
dimensions. It's not pretty.

refs: https://github.com/wez/wezterm/issues/3624
refs: https://github.com/wez/wezterm/issues/3716
2023-07-15 22:13:19 -07:00
Wez Furlong
31eb4fe271
fix window:perform_action
Accidentally broken by 750f49f0ae

refs: https://github.com/wez/wezterm/issues/3981
2023-07-13 07:37:05 -07:00
Wez Furlong
750f49f0ae
deps: upgrade mlua to 0.9.0-rc.1
refs: https://github.com/khvzak/mlua/issues/291
refs: #3849
2023-07-12 14:14:55 -07:00
Wez Furlong
c7ff432581
mux server: register additional domains
Relocate the helper function to mux-server-impl and have both the GUI
and the mux server call it at the appropriate times.

Introduce default_mux_server_domain which is used instead of
default_domain in the mux server.  This is to avoid recursive
cycles when starting up the mux; we don't want the default
domain to be a unix client that connects to our selves because
we'll try to connect to ourselves, then in act of handling that
spawn in the default domain and try to connect to ourselves and
repeat.

refs: https://github.com/wez/wezterm/issues/3907
2023-07-11 09:34:34 -07:00
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