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

655 Commits

Author SHA1 Message Date
Wez Furlong
01c7b30247
cargo update 2023-03-17 12:02:21 -07:00
Wez Furlong
e090eb9eae
Image decoding is now done in a bg thread
Continuing from the previous commit, this shifts:

* In-memory data -> temporary file
* Image decoding -> background thread

The background thread asynchronously decodes frames and
sends them to the render thread via a bounded channel.

While decoding frames, it writes them, uncompressed, to
a scratch file so that when the animation loops, it is
a very cheap operation to rewind and pull that data
from the file, without having to burn CPU to re-decode
the data from the start.

Memory usage is bounded to 4 uncompressed frames while
decoding, then 3 uncompressed frames (triple buffered)
while looping over the rest.

However, disk usage is N uncompressed frames.

refs: https://github.com/wez/wezterm/issues/3263
2023-03-17 11:41:20 -07:00
Wez Furlong
aa929a1a9b
move animation decoding from term layer to gui layer
This makes decoding animation frames a lazy operation, but it
comes at the cost of needing to re-decode the image from scratch
when it loops, because the image crate doesn't provide a way
to rewind its frame iterator.

That initial decode can have a significant time cost; a small
webp file consistently takes 150ms to decode, which is too
much to do inline in the render thread.

Next steps will be to move that cost off the render thread.
2023-03-17 11:41:20 -07:00
Wez Furlong
97452d0ccc
term: improve readability of error message for oversized image
refs: https://github.com/wez/wezterm/issues/3264
2023-03-16 22:41:52 -07:00
Wez Furlong
2bfb29f1be
improve handling of animated webp images
Use mainline image crate to avoid an otherwise unavoidable panic
in the upstream: https://github.com/image-rs/image/issues/1775

Explicitly operate on the frames from the animation.

refs: https://github.com/wez/wezterm/issues/3250
2023-03-15 11:34:47 -07:00
Waleed Khan
4afedd626d build(pty): don't use std::os::fd::RawFd symbol directly
For whatever reason, `portable-pty` doesn't build until Rust v1.66 due to a failure to import `std::os::fd::RawFd`. According to `cargo-msrv`:

```
$ cargo msrv --linear
Fetching index
Determining the Minimum Supported Rust Version (MSRV) for toolchain aarch64-apple-darwin
Using check command cargo check
 ⠲ Checking 1.68.0                ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
 ⠴ Checking 1.68.0                ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
Check for toolchain '1.68.0-aarch64-apple-darwin' succeeded
Check for toolchain '1.67.1-aarch64-apple-darwin' succeeded
Check for toolchain '1.66.1-aarch64-apple-darwin' succeeded

Check for toolchain '1.65.0-aarch64-apple-darwin' failed with:
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Compiling libc v0.2.139                                                                                                               │
│    Compiling autocfg v1.1.0                                                                                                           │
│     Checking cfg-if v1.0.0                                                                                                            │
│    Compiling proc-macro2 v1.0.51                                                                                                      │
│    Compiling quote v1.0.23                                                                                                            │
│    Compiling syn v1.0.109                                                                                                             │
│    Compiling unicode-ident v1.0.8                                                                                                     │
│    Compiling version_check v0.9.4                                                                                                     │
│    Compiling pkg-config v0.3.26                                                                                                       │
│    Compiling memchr v2.5.0                                                                                                            │
│     Checking bitflags v1.3.2                                                                                                          │
│     Checking once_cell v1.17.1                                                                                                        │
│    Compiling log v0.4.17                                                                                                              │
│    Compiling num-traits v0.2.15                                                                                                       │
│    Compiling futures-core v0.3.26                                                                                                     │
│    Compiling crossbeam-utils v0.8.15                                                                                                  │
│    Compiling serde_derive v1.0.152                                                                                                    │
│    Compiling thiserror v1.0.39                                                                                                        │
│    Compiling serde v1.0.152                                                                                                           │
│    Compiling jobserver v0.1.26                                                                                                        │
│     Checking pin-project-lite v0.2.9                                                                                                  │
│    Compiling cc v1.0.79                                                                                                               │
│     Checking getrandom v0.2.8                                                                                                         │
│     Checking scopeguard v1.1.0                                                                                                        │
│    Compiling ahash v0.7.6                                                                                                             │
│     Checking futures-sink v0.3.26                                                                                                     │
│     Checking futures-io v0.3.26                                                                                                       │
│    Compiling slab v0.4.8                                                                                                              │
│     Checking lazy_static v1.4.0                                                                                                       │
│    Compiling lock_api v0.4.9                                                                                                          │
│     Checking smallvec v1.10.0                                                                                                         │
│     Checking num_cpus v1.15.0                                                                                                         │
│    Compiling num-integer v0.1.45                                                                                                      │
│    Compiling siphasher v0.3.10                                                                                                        │
│    Compiling rand_core v0.6.4                                                                                                         │
│     Checking fastrand v1.9.0                                                                                                          │
│    Compiling rand v0.8.5                                                                                                              │
│    Compiling phf_shared v0.11.1                                                                                                       │
│    Compiling memoffset v0.8.0                                                                                                         │
│     Checking adler v1.0.2                                                                                                             │
│     Checking pin-utils v0.1.0                                                                                                         │
│    Compiling indexmap v1.9.2                                                                                                          │
│    Compiling futures-channel v0.3.26                                                                                                  │
│    Compiling libz-sys v1.1.8                                                                                                          │
│    Compiling anyhow v1.0.69                                                                                                           │
│     Checking hashbrown v0.12.3                                                                                                        │
│    Compiling phf_generator v0.11.1                                                                                                    │
│    Compiling futures-task v0.3.26                                                                                                     │
│     Checking miniz_oxide v0.6.2                                                                                                       │
│     Checking socket2 v0.4.9                                                                                                           │
│    Compiling crossbeam-epoch v0.9.14                                                                                                  │
│    Compiling futures-util v0.3.26                                                                                                     │
│    Compiling crc32fast v1.3.2                                                                                                         │
│     Checking strsim v0.10.0                                                                                                           │
│     Checking crossbeam-channel v0.5.7                                                                                                 │
│     Checking fnv v1.0.7                                                                                                               │
│    Compiling typenum v1.16.0                                                                                                          │
│    Compiling memoffset v0.6.5                                                                                                         │
│     Checking event-listener v2.5.3                                                                                                    │
│     Checking byteorder v1.4.3                                                                                                         │
│     Checking concurrent-queue v2.1.0                                                                                                  │
│     Checking parking v2.0.0                                                                                                           │
│    Compiling rayon-core v1.11.0                                                                                                       │
│     Checking waker-fn v1.1.0                                                                                                          │
│     Checking async-lock v2.7.0                                                                                                        │
│     Checking futures-lite v1.12.0                                                                                                     │
│     Checking signal-hook-registry v1.4.1                                                                                              │
│     Checking crossbeam-deque v0.8.3                                                                                                   │
│    Compiling generic-array v0.14.6                                                                                                    │
│     Checking flate2 v1.0.25                                                                                                           │
│     Checking spin v0.9.5                                                                                                              │
│     Checking nanorand v0.7.0                                                                                                          │
│     Checking aho-corasick v0.7.20                                                                                                     │
│    Compiling polling v2.5.2                                                                                                           │
│     Checking regex-syntax v0.6.28                                                                                                     │
│    Compiling ucd-trie v0.1.5                                                                                                          │
│     Checking either v1.8.1                                                                                                            │
│    Compiling phf_codegen v0.11.1                                                                                                      │
│    Compiling lua-src v544.0.1                                                                                                         │
│    Compiling luajit-src v210.4.5+resty2cf5186                                                                                         │
│    Compiling nom v5.1.2                                                                                                               │
│    Compiling num-rational v0.4.1                                                                                                      │
│     Checking rayon v1.7.0                                                                                                             │
│    Compiling async-io v1.12.0                                                                                                         │
│     Checking weezl v0.1.7                                                                                                             │
│     Checking regex-automata v0.1.10                                                                                                   │
│     Checking async-task v4.3.0                                                                                                        │
│     Checking simd-adler32 v0.3.4                                                                                                      │
│    Compiling core-foundation-sys v0.8.3                                                                                               │
│     Checking base64 v0.21.0                                                                                                           │
│     Checking tinyvec_macros v0.1.1                                                                                                    │
│     Checking rustc-hash v1.1.0                                                                                                        │
│     Checking lab v0.11.0                                                                                                              │
│    Compiling tinyvec v1.6.0                                                                                                           │
│     Checking zune-inflate v0.2.50                                                                                                     │
│    Compiling mlua v0.8.8                                                                                                              │
│     Checking regex v1.7.1                                                                                                             │
│    Compiling terminfo v0.7.5                                                                                                          │
│     Checking png v0.17.7                                                                                                              │
│     Checking threadpool v1.8.1                                                                                                        │
│     Checking dirs-sys v0.3.7                                                                                                          │
│     Checking percent-encoding v2.2.0                                                                                                  │
│     Checking half v2.2.1                                                                                                              │
│     Checking lebe v0.5.2                                                                                                              │
│     Checking color_quant v1.1.0                                                                                                       │
│     Checking bit_field v0.10.2                                                                                                        │
│     Checking form_urlencoded v1.1.0                                                                                                   │
│     Checking gif v0.11.4                                                                                                              │
│     Checking unicode-normalization v0.1.22                                                                                            │
│     Checking dirs v4.0.0                                                                                                              │
│     Checking jpeg-decoder v0.3.0                                                                                                      │
│     Checking block-buffer v0.9.0                                                                                                      │
│     Checking digest v0.9.0                                                                                                            │
│     Checking async-channel v1.8.0                                                                                                     │
│     Checking phf_shared v0.10.0                                                                                                       │
│    Compiling libgit2-sys v0.14.2+1.5.1                                                                                                │
│     Checking cpufeatures v0.2.5                                                                                                       │
│     Checking unicode-bidi v0.3.10                                                                                                     │
│     Checking utf8parse v0.2.0                                                                                                         │
│     Checking opaque-debug v0.3.0                                                                                                      │
│    Compiling thiserror-impl v1.0.39                                                                                                   │
│    Compiling futures-macro v0.3.26                                                                                                    │
│    Compiling wezterm-dynamic-derive v0.1.0 (/Users/waleed/Workspace/wezterm/wezterm-dynamic/derive)                                   │
│    Compiling bytemuck_derive v1.4.0                                                                                                   │
│    Compiling phf_macros v0.11.1                                                                                                       │
│    Compiling pin-project-internal v1.0.12                                                                                             │
│     Checking tiff v0.8.1                                                                                                              │
│    Compiling signal-hook v0.3.15                                                                                                      │
│     Checking deltae v0.3.0                                                                                                            │
│     Checking scoped_threadpool v0.1.9                                                                                                 │
│     Checking atomic-waker v1.1.0                                                                                                      │
│     Checking blocking v1.3.0                                                                                                          │
│     Checking bytemuck v1.13.1                                                                                                         │
│     Checking phf v0.11.1                                                                                                              │
│    Compiling idna v0.3.0                                                                                                              │
│     Checking csscolorparser v0.6.2                                                                                                    │
│     Checking pin-project v1.0.12                                                                                                      │
│     Checking filedescriptor v0.8.2 (/Users/waleed/Workspace/wezterm/filedescriptor)                                                   │
│    Compiling pest v2.5.6                                                                                                              │
│     Checking flume v0.10.14                                                                                                           │
│     Checking sha2 v0.9.9                                                                                                              │
│     Checking exr v1.5.3                                                                                                               │
│     Checking vtparse v0.6.2 (/Users/waleed/Workspace/wezterm/vtparse)                                                                 │
│    Compiling num-derive v0.3.3                                                                                                        │
│     Checking phf v0.10.1                                                                                                              │
│     Checking nix v0.24.3                                                                                                              │
│     Checking signal-hook v0.1.17                                                                                                      │
│     Checking termios v0.3.3                                                                                                           │
│     Checking serial-core v0.4.0                                                                                                       │
│     Checking ioctl-rs v0.1.6                                                                                                          │
│     Checking termios v0.2.2                                                                                                           │
│    Compiling async-net v1.7.0                                                                                                         │
│     Checking semver-parser v0.10.2                                                                                                    │
│    Compiling async-process v1.6.0                                                                                                     │
│    Compiling pest_meta v2.5.6                                                                                                         │
│    Compiling async-fs v1.6.0                                                                                                          │
│     Checking semver v0.11.0                                                                                                           │
│     Checking memmem v0.1.1                                                                                                            │
│     Checking unicode-segmentation v1.10.1                                                                                             │
│     Checking finl_unicode v1.2.0                                                                                                      │
│     Checking fixedbitset v0.4.2                                                                                                       │
│     Checking hex v0.4.3                                                                                                               │
│     Checking same-file v1.0.6                                                                                                         │
│     Checking walkdir v2.3.2                                                                                                           │
│     Checking serial-unix v0.4.0                                                                                                       │
│    Compiling pest_generator v2.5.6                                                                                                    │
│     Checking url v2.3.1                                                                                                               │
│     Checking image v0.24.5                                                                                                            │
│     Checking async-executor v1.5.0                                                                                                    │
│     Checking bstr v0.2.17                                                                                                             │
│    Compiling miniz_oxide v0.4.4                                                                                                       │
│     Checking serial v0.4.0                                                                                                            │
│     Checking nix v0.25.1                                                                                                              │
│     Checking euclid v0.22.7                                                                                                           │
│     Checking dirs-sys-next v0.1.2                                                                                                     │
│     Checking filetime v0.2.20                                                                                                         │
│     Checking winnow v0.3.4                                                                                                            │
│     Checking downcast-rs v1.2.0                                                                                                       │
│     Checking shell-words v1.1.0                                                                                                       │
│     Checking dirs-next v2.0.0                                                                                                         │
│     Checking smol v1.3.0                                                                                                              │
│     Checking lru v0.7.8                                                                                                               │
│     Checking fsevent-sys v4.1.0                                                                                                       │
│     Checking match_cfg v0.1.0                                                                                                         │
│    Compiling pest_derive v2.5.6                                                                                                       │
│     Checking promise v0.2.0 (/Users/waleed/Workspace/wezterm/promise)                                                                 │
│     Checking hostname v0.3.1                                                                                                          │
│     Checking notify v5.1.0                                                                                                            │
│     Checking colorgrad v0.6.2                                                                                                         │
│    Compiling enum-display-derive v0.1.1                                                                                               │
│    Compiling wezterm-config-derive v0.1.0 (/Users/waleed/Workspace/wezterm/config/derive)                                             │
│     Checking umask v0.1.0 (/Users/waleed/Workspace/wezterm/umask)                                                                     │
│     Checking shlex v1.1.0                                                                                                             │
│    Compiling openssl-src v300.0.12+3.0.8                                                                                              │
│     Checking foreign-types-shared v0.1.1                                                                                              │
│     Checking itoa v1.0.6                                                                                                              │
│     Checking foreign-types v0.3.2                                                                                                     │
│    Compiling io-lifetimes v1.0.5                                                                                                      │
│    Compiling rustix v0.36.9                                                                                                           │
│     Checking errno v0.2.8                                                                                                             │
│    Compiling openssl-sys v0.9.71                                                                                                      │
│     Checking ordered-float v3.4.0                                                                                                     │
│     Checking toml_datetime v0.6.1                                                                                                     │
│     Checking serde_spanned v0.6.1                                                                                                     │
│    Compiling objc_exception v0.1.2                                                                                                    │
│     Checking wezterm-dynamic v0.1.0 (/Users/waleed/Workspace/wezterm/wezterm-dynamic)                                                 │
│     Checking toml_edit v0.19.4                                                                                                        │
│     Checking portable-pty v0.8.0 (/Users/waleed/Workspace/wezterm/pty)                                                                │
│ error[E0412]: cannot find type `RawFd` in `std::os::fd`                                                                               │
│    --> pty/src/unix.rs:326:48                                                                                                         │
│     |                                                                                                                                 │
│ 326 |     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd> {                                                                         │
│     |                                                ^^^^^ not found in `std::os::fd`                                                 │
│     |                                                                                                                                 │
│ help: consider importing this type alias                                                                                              │
│     |                                                                                                                                 │
│ 3   | use std::os::unix::prelude::RawFd;                                                                                              │
│     |                                                                                                                                 │
│ help: if you import `RawFd`, refer to it directly                                                                                     │
│     |                                                                                                                                 │
│ 326 -     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd> {                                                                         │
│ 326 +     fn as_raw_fd(&self) -> Option<RawFd> {                                                                                      │
│     |                                                                                                                                 │
│                                                                                                                                       │
│ error[E0412]: cannot find type `RawFd` in `std::os::fd`                                                                               │
│    --> pty/src/serial.rs:245:48                                                                                                       │
│     |                                                                                                                                 │
│ 245 |     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd> {                                                                         │
│     |                                                ^^^^^ not found in `std::os::fd`                                                 │
│     |                                                                                                                                 │
│ help: consider importing this type alias                                                                                              │
│     |                                                                                                                                 │
│ 8   | use std::os::unix::prelude::RawFd;                                                                                              │
│     |                                                                                                                                 │
│ help: if you import `RawFd`, refer to it directly                                                                                     │
│     |                                                                                                                                 │
│ 245 -     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd> {                                                                         │
│ 245 +     fn as_raw_fd(&self) -> Option<RawFd> {                                                                                      │
│     |                                                                                                                                 │
│                                                                                                                                       │
│ error[E0412]: cannot find type `RawFd` in `std::os::fd`                                                                               │
│    --> pty/src/lib.rs:114:48                                                                                                          │
│     |                                                                                                                                 │
│ 114 |     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd>;                                                                          │
│     |                                                ^^^^^ not found in `std::os::fd`                                                 │
│     |                                                                                                                                 │
│ help: consider importing this type alias                                                                                              │
│     |                                                                                                                                 │
│ 40  | use std::os::unix::prelude::RawFd;                                                                                              │
│     |                                                                                                                                 │
│ help: if you import `RawFd`, refer to it directly                                                                                     │
│     |                                                                                                                                 │
│ 114 -     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd>;                                                                          │
│ 114 +     fn as_raw_fd(&self) -> Option<RawFd>;                                                                                       │
│     |                                                                                                                                 │
│                                                                                                                                       │
│ error[E0603]: module `fd` is private                                                                                                  │
│    --> pty/src/unix.rs:326:44                                                                                                         │
│     |                                                                                                                                 │
│ 326 |     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd> {                                                                         │
│     |                                            ^^ private module                                                                    │
│     |                                                                                                                                 │
│ note: the module `fd` is defined here                                                                                                 │
│                                                                                                                                       │
│ error[E0603]: module `fd` is private                                                                                                  │
│    --> pty/src/serial.rs:245:44                                                                                                       │
│     |                                                                                                                                 │
│ 245 |     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd> {                                                                         │
│     |                                            ^^ private module                                                                    │
│     |                                                                                                                                 │
│ note: the module `fd` is defined here                                                                                                 │
│                                                                                                                                       │
│ error[E0603]: module `fd` is private                                                                                                  │
│    --> pty/src/lib.rs:114:44                                                                                                          │
│     |                                                                                                                                 │
│ 114 |     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd>;                                                                          │
│     |                                            ^^ private module                                                                    │
│     |                                                                                                                                 │
│ note: the module `fd` is defined here                                                                                                 │
│                                                                                                                                       │
│     Checking wezterm-color-types v0.2.0 (/Users/waleed/Workspace/wezterm/color-types)                                                 │
│     Checking wezterm-bidi v0.2.2 (/Users/waleed/Workspace/wezterm/bidi)                                                               │
│ Some errors have detailed explanations: E0412, E0603.                                                                                 │
│ For more information about an error, try `rustc --explain E0412`.                                                                     │
│ error: could not compile `portable-pty` due to 6 previous errors                                                                      │
│ warning: build failed, waiting for other jobs to finish...                                                                            │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
   Finished The MSRV is: 1.66.1   ██████████████████████████████████████████████████████████████████████████████████████████████ 00:05:30
```

However, the issue is simple to work around: just don't use the symbol `std::os::fd::RawFd` directly. This commit:

1) changes the interface to use a new exported symbol `RawFd` from the `crate::unix` module;
2) imports `std::os::unix::io::RawFd` instead of `std::os::fd::RawFd` as the symbol exported from `crate::unix`.

Doing so fixes the build in earlier versions of Rust:

```
$ cargo +1.63.0 check -p portable-pty --all-targets
    Checking portable-pty v0.8.0 (/Users/waleed/Workspace/wezterm/pty)
error[E0412]: cannot find type `RawFd` in `std::os::fd`
   --> pty/src/unix.rs:326:48
    |
326 |     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd> {
    |                                                ^^^^^ not found in `std::os::fd`
    |
help: consider importing this type alias
    |
3   | use std::os::unix::prelude::RawFd;
    |
help: if you import `RawFd`, refer to it directly
    |
326 -     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd> {
326 +     fn as_raw_fd(&self) -> Option<RawFd> {
    |

error[E0412]: cannot find type `RawFd` in `std::os::fd`
   --> pty/src/serial.rs:245:48
    |
245 |     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd> {
    |                                                ^^^^^ not found in `std::os::fd`
    |
help: consider importing this type alias
    |
8   | use std::os::unix::prelude::RawFd;
    |
help: if you import `RawFd`, refer to it directly
    |
245 -     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd> {
245 +     fn as_raw_fd(&self) -> Option<RawFd> {
    |

error[E0412]: cannot find type `RawFd` in `std::os::fd`
   --> pty/src/lib.rs:114:48
    |
114 |     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd>;
    |                                                ^^^^^ not found in `std::os::fd`
    |
help: consider importing this type alias
    |
40  | use std::os::unix::prelude::RawFd;
    |
help: if you import `RawFd`, refer to it directly
    |
114 -     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd>;
114 +     fn as_raw_fd(&self) -> Option<RawFd>;
    |

error[E0603]: module `fd` is private
   --> pty/src/unix.rs:326:44
    |
326 |     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd> {
    |                                            ^^ private module
    |
note: the module `fd` is defined here

error[E0603]: module `fd` is private
   --> pty/src/serial.rs:245:44
    |
245 |     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd> {
    |                                            ^^ private module
    |
note: the module `fd` is defined here

error[E0603]: module `fd` is private
   --> pty/src/lib.rs:114:44
    |
114 |     fn as_raw_fd(&self) -> Option<std::os::fd::RawFd>;
    |                                            ^^ private module
    |
note: the module `fd` is defined here

Some errors have detailed explanations: E0412, E0603.
For more information about an error, try `rustc --explain E0412`.
error: could not compile `portable-pty` due to 6 previous errors
warning: build failed, waiting for other jobs to finish...
error: could not compile `portable-pty` due to 6 previous errors

$ cargo +1.63.0 check -p portable-pty --all-targets
    Finished dev [unoptimized + debuginfo] target(s) in 0.17s
```
2023-03-12 20:48:01 -07:00
Wez Furlong
4b2973a9d4
deps: open -> 4.0 2023-03-12 20:37:58 -07:00
Wez Furlong
0d231f6fe4
cargo update 2023-03-12 20:22:05 -07:00
Wez Furlong
55982436d9
cargo update 2023-03-05 22:18:33 -07:00
Wez Furlong
2d05f8f1f2
ssh: support %l and %L in config files
We also log a warning when an unsupported token is used.

refs: https://github.com/wez/wezterm/issues/3176
2023-03-01 18:44:11 -07:00
Wez Furlong
0ac1cbc47c
deps: socket2 -> 0.5 2023-02-26 22:33:28 -07:00
Wez Furlong
6878ec3a92
cargo update 2023-02-26 22:32:52 -07:00
Wez Furlong
70f255bce8
cargo update 2023-02-17 11:30:15 -07:00
Wez Furlong
3509e210ce
termwiz: bump version ready for publish 2023-02-12 06:57:31 -07:00
Wez Furlong
0006014f02
ssh: detect exit-signal state for channels
Need to use a newer version of libssh-rs that can report this state,
as the underlying libssh doesn't fold it into the process exit
status.

refs: https://github.com/wez/wezterm/issues/3095
2023-02-11 10:03:44 -07:00
Wez Furlong
62dc342128
cargo update 2023-02-08 21:25:41 -07:00
Wez Furlong
fd5c6dceb1
window: use a shorter timeout for xdg portal reads
A user reported this:

08:47:13.372  DEBUG  window::os::x11::connection        > Unable to
   resolve appearance using xdg-desktop-portal: Read:
   org.freedesktop.DBus.Error.TimedOut: Failed to activate service
   'org.freedesktop.portal.Desktop': timed out
   (service_start_timeout=120000ms)

which is an issue with their xdg-portal service.

Rather than have wezterm block for 2 minutes on startup, we give it
1 second, and log the issue as a warning.
2023-02-08 09:19:28 -07:00
Wez Furlong
74dc74b7c8
deps: wgpu -> 0.15
This might help with https://github.com/wez/wezterm/issues/3032
2023-02-06 07:19:31 -07:00
Wez Furlong
16d75c972b
cargo update 2023-02-05 21:53:11 -07:00
Wez Furlong
1609fd386b
add wezterm cli get-text command
closes: https://github.com/wez/wezterm/pull/2729
2023-02-05 09:05:48 -07:00
Wez Furlong
d336c8a61e
deps: http_req -> 0.9 2023-02-05 07:38:55 -07:00
Wez Furlong
1fad5b5249
deps: sctk -> 0.16 2023-02-04 07:49:30 -07:00
Wez Furlong
e4ae8a844d
Add wezterm.plugin module, allows loading modules from git
Brief usage notes here:

```lua
local wezterm = require 'wezterm'
local a_plugin = wezterm.plugin.require "https://github.com/owner/repo"

local config = wezterm.config_builder()

a_plugin.apply_to_config(config)

return config
```

The referenced repo is expected to have a `plugin/init.lua` file,
and by convention, return a module that exports an `apply_to_config`
function that accepts at least a config builder parameter, but may
pass other parameters, or a lua table with a `config` field that maps
to a config build parameter.

`wezterm.plugin.require` will clone the repo if it doesn't already
exist and store it in the runtime dir under `plugins/NAME` where
`NAME` is derived from the repo URL.  Once cloned, the repo is
NOT automatically updated.

Only HTTP (or local filesystem) repos are allowed for the git URL;
we cannot currently use ssh for this due to conflicting version
requirements that I'll take a look at later.

`wezterm.plugin.require` will then perform `require "NAME"`,
and since the default `package.path` now includes the appropriate
location from the runtime dir, the module should load.

Two other functions are available:

`wezterm.plugin.list()` will list the plugin repos.

`wezterm.plugin.update_all()` will attempt to fast-forward or `pull
--rebase` each of the repos it finds. It doesn't currently do anything
proactive to reload the configuration afterwards; the user will need to
do that themselves.
2023-01-31 20:07:42 -07:00
Wez Furlong
df12dd9d00
deps: update toml -> 0.7, cargo update 2023-01-29 21:08:25 -07:00
Wez Furlong
9d7e613cfa
wezterm.GLOBAL now returns references to stored data
This smoothes out a rough edge and makes things work
more naturally.

refs: https://github.com/wez/wezterm/discussions/2983
2023-01-24 18:26:14 -07:00
Wez Furlong
92eb2e806a
cargo update 2023-01-22 22:02:26 -07:00
Wez Furlong
133a47a2d5
cargo update 2023-01-20 20:04:49 -07:00
Wez Furlong
a2e027dff4
cargo update 2023-01-15 21:48:20 -07:00
Wez Furlong
890bff7faf
macos: add version info to system name 2023-01-10 18:58:35 -07:00
Wez Furlong
d34297cd2c
update base64, work around another batch of breaking API changes
closes: https://github.com/wez/wezterm/pull/2931
2023-01-08 18:49:45 -07:00
Wez Furlong
0c7aeb90c6
cargo update 2023-01-08 07:46:31 -07:00
Wez Furlong
130990480f
cargo update 2022-12-30 08:50:10 -07:00
Wez Furlong
aefbb6b4a0
deps: update ntapi to 0.4
Avoids:

```
warning: the following packages contain code that will be rejected by a future version of Rust: ntapi v0.3.7
note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 36`
```
2022-12-30 08:37:53 -07:00
Wez Furlong
ff2caf4f66
cargo update 2022-12-25 23:30:13 -07:00
Wez Furlong
eb8dfd32b3
macos: use interactive shell for .command scripts
This is primarily so that the user's environment is set up prior
to invoking the script.

refs: #2871
2022-12-20 08:30:07 -07:00
Wez Furlong
30238acb1b
x11: potential fix for hanging IME
refs: https://github.com/H-M-H/xcb-imdkit-rs/issues/5
refs: https://github.com/wez/wezterm/issues/2819
2022-12-19 12:23:04 -07:00
Wez Furlong
920ee853b3
mux: switch RefCell to RwLock internally
This is a step towards making it Send+Sync.

I'm a little cagey about this in the long term, as there are some mux
operations that may technically require multiple fields to be locked for
their duration: allowing free-threaded access may introduce some subtle
(or not so subtle!) interleaving conditions where the overall mux state
is not yet consistent.

I'm thinking of prune_dead_windows kicking in while the mux is in the
middle of being manipulated.

I did try an initial pass of just moving everything under one lock, but
there is already quite a lot of mixed read/write access to different
aspects of the mux.

We'll see what bubbles up later!
2022-12-19 11:52:38 -07:00
Wez Furlong
6e06b9af02
mux: Pane is now required to be Send+Sync. Use Arc<dyn Pane> 2022-12-19 11:52:33 -07:00
Wez Furlong
0fa8e9bc86
cargo update 2022-12-19 11:13:02 -07:00
Wez Furlong
91ea1095c9
deps: update base64
closes: https://github.com/wez/wezterm/pull/2855
2022-12-12 09:15:09 -07:00
Wez Furlong
8a527fe7bc
cargo update 2022-12-12 09:02:19 -07:00
Wez Furlong
af9d0efa17
cargo update 2022-12-04 19:40:53 -07:00
dependabot[bot]
c6e29b78b7 build(deps): bump rstest from 0.15.0 to 0.16.0
Bumps [rstest](https://github.com/la10736/rstest) from 0.15.0 to 0.16.0.
- [Release notes](https://github.com/la10736/rstest/releases)
- [Changelog](https://github.com/la10736/rstest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/la10736/rstest/compare/0.15.0...0.16.0)

---
updated-dependencies:
- dependency-name: rstest
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-27 21:52:32 -08:00
Wez Furlong
9923ae20b5
env_logger -> 0.10
closes: https://github.com/wez/wezterm/pull/2803
2022-11-27 21:37:25 -07:00
Wez Furlong
9d109337e7
cargo update 2022-11-27 21:32:51 -07:00
Wez Furlong
51e45a475d
cargo update 2022-11-20 22:18:37 -07:00
Wez Furlong
09f1ecbf82
erase generic T from Atlas, Sprite, CachedGlyph etc.
This will make it easier to use the same impl for webgpu and opengl
for a bunch of this stuff.
2022-11-18 10:03:49 -07:00
Wez Furlong
8479be7465
Basic useless wgpu based rendering foundation 2022-11-18 10:03:49 -07:00
Wez Furlong
eaa91e9314
deps: update raw-window-handle 2022-11-18 10:03:49 -07:00
Wez Furlong
173e27d2e8
Add support for heap profiling using dhat
refs: https://github.com/wez/wezterm/issues/2626
2022-11-14 13:26:02 -07:00
Wez Furlong
0516b61f62
lfucache: improve LFU algorithm and structure
Do it "more properly": use intrusive list linkage to manage three
indices:

* hash lookup
* recency
* frequency

eviction is frequency based, but in order to avoid things that were
super hot in the past and that are no longer hot clogging up the cache,
eviction will incrementally age out least recently used entries that
haven't been active in the span of some number of get/put operations.

Aging scales down the frequency value to reduce its strength, so an aged
item isn't necessarily immediately a candidate for removal, it just
makes it more likely to be picked up by the frequency based removal as
it goes unused for an extended period.
2022-11-14 10:00:49 -07:00
Wez Furlong
72757b8849
refactor: move lfucache into its own crate 2022-11-14 07:35:37 -07:00
Wez Furlong
36f215c03e
cargo update 2022-11-13 18:24:31 -07:00
Wez Furlong
295a13091a cargo update 2022-11-06 18:51:07 -07:00
Wez Furlong
a6fc9323e2 termwiz: release 0.19 2022-11-02 08:16:09 -07:00
Wez Furlong
8dfc5e81a9 deps: cargo update for openssl 2022-11-01 18:09:23 -07:00
Wez Furlong
0ee0243a8c deps: cargo update 2022-11-01 07:09:37 -07:00
Wez Furlong
f726a2075e deps: remove async-std dep
We were only using block_on from it, which we can call from the
underlying async_io crate.

Notably, removing async_std from the deps avoids async-global-executor
being pulled in and spawning nproc threads that are never used by
wezterm.
2022-11-01 07:05:33 -07:00
Wez Furlong
43f2265ef1 deps: textwrap -> 0.16
closes: https://github.com/wez/wezterm/pull/2664
2022-10-23 20:50:47 -07:00
Wez Furlong
7063cba250 cargo update 2022-10-23 12:08:11 -07:00
Wez Furlong
b1faba9d8a deps: upgrade finl_unicode to 1.2 2022-10-23 12:07:00 -07:00
Wez Furlong
35ce2fe74d trim heap usage
I spent a few hours in heap profilers.  What I found was:

* Inefficient use of heap when building up runs of
  `Action::Print(char)`.
    -> Solve by adding `Action::PrintString(String)`
  and accumulating utf8 bytes rather than u32 codepoints.
* Inefficient use of heap when building Quad buffers: the default
  exponential growth of `Vec` tended to waste 40%-75% of the allocated
  capacity, and since we could keep ~1024 of these in cache, there's
  a lot of potential for waste.
   -> Solve by bounding the growth to 64 at a time.  This has similar
   characteristics to exponential growth at the default 80x24 terminal
   size.  May need to add a config option for this step size for users
   with very large terminals.
* Lazy eviction from the LFU caches. The underlying cache advisor is
  somewhat probabilistic and has a minimum cache size of 256, making
  it difficult to maintain low heap utilization.
   -> Solve by replacing it with a very simple LFU algorithm. It doesn't
   seem to hurt much at the default terminal size with the default
   cache sizes.  If we make the cache sizes smaller, its overhead is
   reduced.

Some further experimentation is needed to adjust defaults, but this
should help reduce heap usage.

refs: https://github.com/wez/wezterm/issues/2626
2022-10-22 17:10:36 -07:00
Wez Furlong
a7465228bb update cargo.lock for bidi release 2022-10-21 21:46:50 -07:00
Wez Furlong
62cbcd691d cargo update 2022-10-16 20:57:48 -07:00
Wez Furlong
7b904f05eb termwiz: fixup for 32-bit systems
I noticed from https://github.com/void-linux/void-packages/pull/36903
that 32-bit systems were failing to pass the test suite.

Running `cargo test --target i686-unknown-linux-gnu  -- --nocapture
teeny_string` showed that we were faulting in the teenystring code
and digging a bit deeper showed that it was because our assumptions
about the high bits were wrong for 32-bit systems.

Fix this by making TeenyString based around a u64 rather than usize
so that we guarantee its size on all current systems.
2022-10-15 16:45:02 -07:00
Wez Furlong
cb31c35b99 cargo update 2022-10-09 20:26:07 -07:00
Wez Furlong
4e5945c061 Add ResetTerminal and pane:inject_output method
refs: https://github.com/wez/wezterm/discussions/2606
2022-10-08 10:25:22 -07:00
Wez Furlong
2cae10016f deps: update emojis crate 2022-10-04 09:00:18 -07:00
Wez Furlong
a050849695 deps: update to clap 4
Deal with some breaking changes
2022-10-04 08:55:31 -07:00
Wez Furlong
ba57f73bd9 deps: pick up updated rust-xcb
Might help with these:

refs: https://github.com/rust-x-bindings/rust-xcb/issues/195
refs: https://github.com/wez/wezterm/issues/2559
refs: https://github.com/rust-x-bindings/rust-xcb/issues/204
2022-10-04 07:53:46 -07:00
Wez Furlong
206f45acfc cargo update 2022-10-04 07:44:55 -07:00
Wez Furlong
9be0595164 cargo update 2022-09-27 07:11:12 -07:00
Wez Furlong
8508860136 config: derive some metadata about the config
This isn't used by anything yet, but will enable some runtime
config editing functions that I have planeed for the future.
2022-09-22 06:09:31 -07:00
Wez Furlong
c91d6c396c termwiz: prepare for a 0.18.0 release 2022-09-21 19:20:26 -07:00
Wez Furlong
a59e45ab9e cargo update 2022-09-18 20:00:54 -07:00
Wez Furlong
8d2a3cf7f1 deps: cargo update 2022-09-16 07:48:12 -07:00
Wez Furlong
85db555b37 deps: update finl_unicode 2022-09-16 07:47:33 -07:00
Wez Furlong
243653911a update Cargo.lock for bidi update 2022-09-15 06:30:33 -07:00
Wez Furlong
fe78b5821f cargo update 2022-09-12 06:26:10 -07:00
Wez Furlong
96c4e7e9b9 Switch to finl_unicode for grapheme clustering
According to its benchmarks, it's almost 2x faster than
unicode_segmentation.  It doesn't appear to make a visible
difference to `time cat bigfile`, but I'll take anything
that gives more headroom for such little effort of switching.
2022-09-10 07:15:49 -07:00
Wez Furlong
c1cfa54b61 cargo update 2022-09-05 07:36:58 -07:00
Wez Furlong
587b0e50ff cargo update 2022-09-03 18:58:35 -07:00
Wez Furlong
804fc04630 deps: xkbcommon-rs released 0.5
can stop using my git repo for this
2022-09-02 09:25:20 -07:00
Wez Furlong
1b9ea2de3f change text cursor to fa_lock when entering passwords
There are caveats to determining this, but when we think
password entry is enabled, switch the cursor to the font-awesome
lock glyph instead of the normal cursor sprite.

fa_lock is used because it is monochrome and can thus be tinted
to the configured cursor color, and it respects blinking/easing.

refs: https://github.com/wez/wezterm/issues/2460
2022-09-02 09:00:28 -07:00
Wez Furlong
14c613a064 add Pane::get_metadata
The idea here is that different kinds of panes may want to expose
additional metadata to lua scripts. It would be a bit weird to add
a Pane method for each of those and plumb it all the way through
the various APIs, so just allowing a pane impl to return a dynamic
value (likely an Object) allows a bunch of flexibility.

This commit exposes the clientpane is_tardy boolean and the time
since the last data was recevied (since_last_response_ms) from
the mux client pane implementation: these are used to show the
tardiness indicator in the client pane.

Exposing this data enables the user to add that info to their
status bar if they wish.
2022-09-01 21:27:49 -07:00
Wez Furlong
7670c4f0ae char selector: track recently selected emoji and use frecency to show it
refs: https://github.com/wez/wezterm/issues/2163
2022-08-31 22:56:58 -07:00
Wez Furlong
ed731a0d8d Add CharSelect modal for emoji/nerdfont/unicode input
CTRL-SHIFT-U is a new default key assignment for this new modal.
It opens up a fuzzy searchable browser that defaults to showing
emoji/emoticons.  The category can by cycled through the suggested
emoji categories using CTRL-r.  Unlike the system emoji palette,
wezterm includes a category for nerdfont symbols, and another
that is a list of all unicode codepoint names, so you should be
able to browse for pretty much any codepoint you can think of.

The modal also allows fuzzy searching based on:

* The official unicode name
* The github shortcode
* codepoint value in hex

so if you know the codepoint value but not the name, you can
still find a way to input what you're looking for.

Pressing Enter will copy the selected item to the clipboard
send it to the active pane, and cancel the modal. You can therefore
repeat the insert by simply pasting.

I plan to add frecency to this in a later commit: that way the
frequently/recently used selections will show in a category of
their own and make it easier to re-input them.

refs: https://github.com/wez/wezterm/issues/2163
2022-08-31 18:15:28 -07:00
Wez Furlong
b9d0843b71 deps: tiny-skia 0.7 -> 0.8 2022-08-28 20:50:27 -07:00
Wez Furlong
0f0593f475 cargo update 2022-08-28 20:48:33 -07:00
Wez Furlong
9732f9ee2b Adjust render caching; switch to LFU caches from LRU 2022-08-28 10:28:26 -07:00
Wez Furlong
0702a7163e cargo update 2022-08-21 19:59:34 -07:00
Wez Furlong
7be824db62 deps: update zbus 2022-08-21 09:18:32 -07:00
Wez Furlong
de89d650a3 cargo update 2022-08-21 08:51:16 -07:00
grant0417
f792a20f7a Add fig to shells for shell completion 2022-08-21 08:33:19 -07:00
Wez Furlong
f2ee48bdff cargo update 2022-08-14 22:27:23 -07:00
Wez Furlong
e6421d1b72 pty: try_clone_writer -> take_writer
This breaking API change allows us to explicitly generate EOF when the
taken writer is dropped.

The examples have been updated to show how to manage read, write
and waiting without deadlock for both linux and windows.
Need to confirm that this is still good on macOS, but my
confidence is high.

I've also removed ssh2 support from this crate as part of this
change. We haven't used it directly in wezterm in a long while
and removing it from here means that there is slightly less code
to keep compiling over and over.

refs: https://github.com/wez/wezterm/discussions/2392
refs: https://github.com/wez/wezterm/issues/1396
2022-08-12 07:56:46 -07:00
Wez Furlong
9cd72fefe2 pty: cmdbuilder: check for executable access when resolving program
`wezterm start -- /etc/profile` would crash on macOS because
`/etc/profile` isn't executable.

This commit checks for executable access as a prereq for both the
path search and the absolute path cases and generates a non-crashing
error:

```
$ wezterm start -- /etc/profile
17:24:03.574  ERROR  wezterm_gui > Unable to spawn /etc/profile because it doesn't exist on the filesystem or is not executable (EACCES: Permission denied); terminating
```
2022-08-09 17:29:22 -07:00
Wez Furlong
ac3a9c001b cargo update 2022-08-07 19:31:29 -07:00
Wez Furlong
33866dad70 termwiz: fix min version dep on winapi. publish 0.17.1
Need at least 0.3.5 (I think) for the type used in
https://github.com/wez/wezterm/pull/2349 as well as the impl-default
feature.

refs: https://github.com/markbt/streampager/issues/57#event-7110671310
2022-08-02 18:21:49 -07:00
Wez Furlong
673ca3ad07 color types version bump for crates.io 2022-08-01 18:41:52 -07:00