diff --git a/.cirrus.yml b/.cirrus.yml index c51c423f7f7..63e28ff4560 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -45,7 +45,44 @@ task: cpu: 4 memory: 12G environment: - GITHUB_TOKEN: ENCRYPTED[23bd9513fa7174e74eaddce6a3099cabb22118423591553b23518e8c34bf155e07c559838b1d3422f561c73c1e31e6fc] + GITHUB_TOKEN: ENCRYPTED[f20f769b749757fbdc3968320deea1c8e90f2bc2ff5f957bae4de0f022793f57400a5936fe8699bd732a231c9ed74be7] + FURY_TOKEN: ENCRYPTED[833e7ce9bfd87970b321dd621677f792a65f485b40819cad30258d3a1e1569f9cb4878a2958efecdf40a5050354edd54] + + stateful: false + install_rust_script: + - echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections + - apt update + - apt-get install -y git curl + - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + install_gh_cli_script: + - curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg > /usr/share/keyrings/githubcli-archive-keyring.gpg + - chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg + - echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" > /etc/apt/sources.list.d/github-cli.list + - apt update + - apt install gh -y + - gh --version + getdeps_script: + - env PATH=$HOME/.cargo/bin:$PATH bash get-deps + build_script: + - env PATH=$HOME/.cargo/bin:$PATH cargo build --release -p wezterm-gui -p wezterm -p wezterm-mux-server -p strip-ansi-escapes + - export BUILD_REASON="Schedule" + - export RELEASE="nightly" + - "test -n \"$CIRRUS_TAG\" && BUILD_REASON=\"tag\"" + - "test -n \"$CIRRUS_TAG\" && RELEASE=$(ci/tag-name.sh)" + - "./ci/deploy.sh" + - "ls -l *.deb" + - "bash ci/retry.sh gh release upload --clobber ${RELEASE} *.deb" + - "for f in wezterm*.deb ; do curl -i -F package=@$f https://$FURY_TOKEN@push.fury.io/wez/ ; done" + +task: + name: ubuntu-24.04-arm + only_if: "$CIRRUS_REPO_OWNER == 'wez' && changesInclude('**.toml', '**.rs', '.gitmodules', '.cirrus.yml', 'get-deps', 'Cargo.lock')" + arm_container: + image: ubuntu:24.04 + cpu: 4 + memory: 12G + environment: + GITHUB_TOKEN: ENCRYPTED[f20f769b749757fbdc3968320deea1c8e90f2bc2ff5f957bae4de0f022793f57400a5936fe8699bd732a231c9ed74be7] FURY_TOKEN: ENCRYPTED[833e7ce9bfd87970b321dd621677f792a65f485b40819cad30258d3a1e1569f9cb4878a2958efecdf40a5050354edd54] stateful: false @@ -82,7 +119,7 @@ task: cpu: 4 memory: 12G environment: - GITHUB_TOKEN: ENCRYPTED[23bd9513fa7174e74eaddce6a3099cabb22118423591553b23518e8c34bf155e07c559838b1d3422f561c73c1e31e6fc] + GITHUB_TOKEN: ENCRYPTED[f20f769b749757fbdc3968320deea1c8e90f2bc2ff5f957bae4de0f022793f57400a5936fe8699bd732a231c9ed74be7] stateful: false install_rust_script: diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 47c76fcbe65..c2ecbbc748b 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,16 +3,7 @@ version: 2 updates: - - package-ecosystem: "cargo" - directory: "/" - schedule: - interval: "weekly" - groups: - all: - patterns: - - "*" - - package-ecosystem: "github-actions" directory: "/" schedule: - interval: "weekly" + interval: "monthly" diff --git a/.github/workflows/gen_centos9.yml b/.github/workflows/gen_centos9.yml index 9cd97e760b9..9aef2894de7 100644 --- a/.github/workflows/gen_centos9.yml +++ b/.github/workflows/gen_centos9.yml @@ -103,7 +103,7 @@ jobs: shell: bash run: "mv ~/rpmbuild/RPMS/*/*.rpm ." - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "centos9" path: "wezterm-*.rpm" diff --git a/.github/workflows/gen_centos9_continuous.yml b/.github/workflows/gen_centos9_continuous.yml index 57c52ea1ce0..d9399777074 100644 --- a/.github/workflows/gen_centos9_continuous.yml +++ b/.github/workflows/gen_centos9_continuous.yml @@ -106,7 +106,7 @@ jobs: shell: bash run: "mv ~/rpmbuild/RPMS/*/*.rpm wezterm-nightly-centos9.rpm" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "centos9" path: "wezterm-*.rpm" @@ -123,7 +123,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "centos9" - name: "Checksum" diff --git a/.github/workflows/gen_centos9_tag.yml b/.github/workflows/gen_centos9_tag.yml index 0d8d38424fe..e438e58d343 100644 --- a/.github/workflows/gen_centos9_tag.yml +++ b/.github/workflows/gen_centos9_tag.yml @@ -86,7 +86,7 @@ jobs: shell: bash run: "mv ~/rpmbuild/RPMS/*/*.rpm ." - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "centos9" path: "wezterm-*.rpm" @@ -102,7 +102,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "centos9" - name: "Checksum" diff --git a/.github/workflows/gen_debian10.3.yml b/.github/workflows/gen_debian10.3.yml index 026ed016658..ac155c81412 100644 --- a/.github/workflows/gen_debian10.3.yml +++ b/.github/workflows/gen_debian10.3.yml @@ -103,7 +103,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "debian10.3" path: | diff --git a/.github/workflows/gen_debian10.3_continuous.yml b/.github/workflows/gen_debian10.3_continuous.yml index 5293a4e2071..ad2c6095c8f 100644 --- a/.github/workflows/gen_debian10.3_continuous.yml +++ b/.github/workflows/gen_debian10.3_continuous.yml @@ -106,7 +106,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "debian10.3" path: | @@ -125,7 +125,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "debian10.3" - name: "Checksum" diff --git a/.github/workflows/gen_debian10.3_tag.yml b/.github/workflows/gen_debian10.3_tag.yml index 7adc5f5eba9..b2f2a85a3c1 100644 --- a/.github/workflows/gen_debian10.3_tag.yml +++ b/.github/workflows/gen_debian10.3_tag.yml @@ -86,7 +86,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "debian10.3" path: | @@ -104,7 +104,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "debian10.3" - name: "Checksum" diff --git a/.github/workflows/gen_debian11.yml b/.github/workflows/gen_debian11.yml index 64e7843b3df..bd0680d22fe 100644 --- a/.github/workflows/gen_debian11.yml +++ b/.github/workflows/gen_debian11.yml @@ -103,7 +103,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "debian11" path: | diff --git a/.github/workflows/gen_debian11_continuous.yml b/.github/workflows/gen_debian11_continuous.yml index 57c2e3f4341..4713e7e7568 100644 --- a/.github/workflows/gen_debian11_continuous.yml +++ b/.github/workflows/gen_debian11_continuous.yml @@ -106,7 +106,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "debian11" path: | @@ -125,7 +125,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "debian11" - name: "Checksum" diff --git a/.github/workflows/gen_debian11_tag.yml b/.github/workflows/gen_debian11_tag.yml index ad6a10865ad..2e98134cbcb 100644 --- a/.github/workflows/gen_debian11_tag.yml +++ b/.github/workflows/gen_debian11_tag.yml @@ -86,7 +86,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "debian11" path: | @@ -104,7 +104,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "debian11" - name: "Checksum" diff --git a/.github/workflows/gen_debian12.yml b/.github/workflows/gen_debian12.yml index 8453d013796..fbf31f72016 100644 --- a/.github/workflows/gen_debian12.yml +++ b/.github/workflows/gen_debian12.yml @@ -103,7 +103,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "debian12" path: | diff --git a/.github/workflows/gen_debian12_continuous.yml b/.github/workflows/gen_debian12_continuous.yml index c9e85b672e3..e7197609c94 100644 --- a/.github/workflows/gen_debian12_continuous.yml +++ b/.github/workflows/gen_debian12_continuous.yml @@ -106,7 +106,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "debian12" path: | @@ -125,7 +125,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "debian12" - name: "Checksum" diff --git a/.github/workflows/gen_debian12_tag.yml b/.github/workflows/gen_debian12_tag.yml index c4f2895e619..0377d4e498e 100644 --- a/.github/workflows/gen_debian12_tag.yml +++ b/.github/workflows/gen_debian12_tag.yml @@ -86,7 +86,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "debian12" path: | @@ -104,7 +104,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "debian12" - name: "Checksum" diff --git a/.github/workflows/gen_fedora38.yml b/.github/workflows/gen_fedora38.yml index 76a80c7eaff..7c8de620767 100644 --- a/.github/workflows/gen_fedora38.yml +++ b/.github/workflows/gen_fedora38.yml @@ -100,7 +100,7 @@ jobs: shell: bash run: "mv ~/rpmbuild/RPMS/*/*.rpm ." - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "fedora38" path: "wezterm-*.rpm" diff --git a/.github/workflows/gen_fedora38_continuous.yml b/.github/workflows/gen_fedora38_continuous.yml index 362cc9acc58..fb1777522f3 100644 --- a/.github/workflows/gen_fedora38_continuous.yml +++ b/.github/workflows/gen_fedora38_continuous.yml @@ -103,7 +103,7 @@ jobs: shell: bash run: "mv ~/rpmbuild/RPMS/*/*.rpm wezterm-nightly-fedora38.rpm" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "fedora38" path: "wezterm-*.rpm" @@ -120,7 +120,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "fedora38" - name: "Checksum" diff --git a/.github/workflows/gen_fedora38_tag.yml b/.github/workflows/gen_fedora38_tag.yml index 683d443b7ca..564af3eb79e 100644 --- a/.github/workflows/gen_fedora38_tag.yml +++ b/.github/workflows/gen_fedora38_tag.yml @@ -83,7 +83,7 @@ jobs: shell: bash run: "mv ~/rpmbuild/RPMS/*/*.rpm ." - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "fedora38" path: "wezterm-*.rpm" @@ -99,7 +99,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "fedora38" - name: "Checksum" diff --git a/.github/workflows/gen_fedora39.yml b/.github/workflows/gen_fedora39.yml index bd4a46f990b..910de4961f2 100644 --- a/.github/workflows/gen_fedora39.yml +++ b/.github/workflows/gen_fedora39.yml @@ -100,7 +100,7 @@ jobs: shell: bash run: "mv ~/rpmbuild/RPMS/*/*.rpm ." - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "fedora39" path: "wezterm-*.rpm" diff --git a/.github/workflows/gen_fedora39_continuous.yml b/.github/workflows/gen_fedora39_continuous.yml index 2290994f9dd..fc4a1525202 100644 --- a/.github/workflows/gen_fedora39_continuous.yml +++ b/.github/workflows/gen_fedora39_continuous.yml @@ -103,7 +103,7 @@ jobs: shell: bash run: "mv ~/rpmbuild/RPMS/*/*.rpm wezterm-nightly-fedora39.rpm" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "fedora39" path: "wezterm-*.rpm" @@ -120,7 +120,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "fedora39" - name: "Checksum" diff --git a/.github/workflows/gen_fedora39_tag.yml b/.github/workflows/gen_fedora39_tag.yml index ca314128147..81201d16614 100644 --- a/.github/workflows/gen_fedora39_tag.yml +++ b/.github/workflows/gen_fedora39_tag.yml @@ -83,7 +83,7 @@ jobs: shell: bash run: "mv ~/rpmbuild/RPMS/*/*.rpm ." - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "fedora39" path: "wezterm-*.rpm" @@ -99,7 +99,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "fedora39" - name: "Checksum" diff --git a/.github/workflows/gen_fedora40.yml b/.github/workflows/gen_fedora40.yml index fa62e6a147e..0ff255360f1 100644 --- a/.github/workflows/gen_fedora40.yml +++ b/.github/workflows/gen_fedora40.yml @@ -100,7 +100,7 @@ jobs: shell: bash run: "mv ~/rpmbuild/RPMS/*/*.rpm ." - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "fedora40" path: "wezterm-*.rpm" diff --git a/.github/workflows/gen_fedora40_continuous.yml b/.github/workflows/gen_fedora40_continuous.yml index bd99559435e..8b56084c8a7 100644 --- a/.github/workflows/gen_fedora40_continuous.yml +++ b/.github/workflows/gen_fedora40_continuous.yml @@ -103,7 +103,7 @@ jobs: shell: bash run: "mv ~/rpmbuild/RPMS/*/*.rpm wezterm-nightly-fedora40.rpm" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "fedora40" path: "wezterm-*.rpm" @@ -120,7 +120,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "fedora40" - name: "Checksum" diff --git a/.github/workflows/gen_fedora40_tag.yml b/.github/workflows/gen_fedora40_tag.yml index c4e80467d67..bc8d38f127c 100644 --- a/.github/workflows/gen_fedora40_tag.yml +++ b/.github/workflows/gen_fedora40_tag.yml @@ -83,7 +83,7 @@ jobs: shell: bash run: "mv ~/rpmbuild/RPMS/*/*.rpm ." - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "fedora40" path: "wezterm-*.rpm" @@ -99,7 +99,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "fedora40" - name: "Checksum" diff --git a/.github/workflows/gen_macos.yml b/.github/workflows/gen_macos.yml index ea91c10d9e9..81a8beb51a8 100644 --- a/.github/workflows/gen_macos.yml +++ b/.github/workflows/gen_macos.yml @@ -91,7 +91,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "macos" path: "WezTerm-*.zip" diff --git a/.github/workflows/gen_macos_continuous.yml b/.github/workflows/gen_macos_continuous.yml index ca026a4321c..cc585603bc8 100644 --- a/.github/workflows/gen_macos_continuous.yml +++ b/.github/workflows/gen_macos_continuous.yml @@ -100,7 +100,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "macos" path: "WezTerm-*.zip" @@ -114,7 +114,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "macos" - name: "Checksum" diff --git a/.github/workflows/gen_macos_tag.yml b/.github/workflows/gen_macos_tag.yml index 0c50e50436f..2d015eedc4b 100644 --- a/.github/workflows/gen_macos_tag.yml +++ b/.github/workflows/gen_macos_tag.yml @@ -85,7 +85,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "macos" path: "WezTerm-*.zip" @@ -112,7 +112,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "macos" - name: "Checksum" diff --git a/.github/workflows/gen_ubuntu20.04.yml b/.github/workflows/gen_ubuntu20.04.yml index 08ef08f8242..d8f6026812d 100644 --- a/.github/workflows/gen_ubuntu20.04.yml +++ b/.github/workflows/gen_ubuntu20.04.yml @@ -117,7 +117,7 @@ jobs: shell: bash run: "bash ci/appimage.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "ubuntu20.04" path: | diff --git a/.github/workflows/gen_ubuntu20.04_continuous.yml b/.github/workflows/gen_ubuntu20.04_continuous.yml index 9930aa7cd7b..a3917e104d6 100644 --- a/.github/workflows/gen_ubuntu20.04_continuous.yml +++ b/.github/workflows/gen_ubuntu20.04_continuous.yml @@ -120,7 +120,7 @@ jobs: shell: bash run: "bash ci/appimage.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "ubuntu20.04" path: | @@ -142,7 +142,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "ubuntu20.04" - name: "Checksum" diff --git a/.github/workflows/gen_ubuntu20.04_tag.yml b/.github/workflows/gen_ubuntu20.04_tag.yml index ca48e2ebbb7..ff6dcf4a333 100644 --- a/.github/workflows/gen_ubuntu20.04_tag.yml +++ b/.github/workflows/gen_ubuntu20.04_tag.yml @@ -97,7 +97,7 @@ jobs: shell: bash run: "bash ci/appimage.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "ubuntu20.04" path: | @@ -132,7 +132,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "ubuntu20.04" - name: "Checksum" diff --git a/.github/workflows/gen_ubuntu22.04.yml b/.github/workflows/gen_ubuntu22.04.yml index d130990c5ae..7031b83d711 100644 --- a/.github/workflows/gen_ubuntu22.04.yml +++ b/.github/workflows/gen_ubuntu22.04.yml @@ -103,7 +103,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "ubuntu22.04" path: | diff --git a/.github/workflows/gen_ubuntu22.04_continuous.yml b/.github/workflows/gen_ubuntu22.04_continuous.yml index 9bcba8a4106..e54fe0b89b3 100644 --- a/.github/workflows/gen_ubuntu22.04_continuous.yml +++ b/.github/workflows/gen_ubuntu22.04_continuous.yml @@ -106,7 +106,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "ubuntu22.04" path: | @@ -125,7 +125,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "ubuntu22.04" - name: "Checksum" diff --git a/.github/workflows/gen_ubuntu22.04_tag.yml b/.github/workflows/gen_ubuntu22.04_tag.yml index 860439bd388..5d2a8fe60b6 100644 --- a/.github/workflows/gen_ubuntu22.04_tag.yml +++ b/.github/workflows/gen_ubuntu22.04_tag.yml @@ -86,7 +86,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "ubuntu22.04" path: | @@ -109,7 +109,7 @@ jobs: shell: bash run: "for f in wezterm*.deb ; do curl -i -F package=@$f https://$FURY_TOKEN@push.fury.io/wez/ ; done" - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "ubuntu22.04" - name: "Checksum" diff --git a/.github/workflows/gen_ubuntu24.04.yml b/.github/workflows/gen_ubuntu24.04.yml index b5f0b6788ed..33d3139418d 100644 --- a/.github/workflows/gen_ubuntu24.04.yml +++ b/.github/workflows/gen_ubuntu24.04.yml @@ -103,7 +103,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "ubuntu24.04" path: | diff --git a/.github/workflows/gen_ubuntu24.04_continuous.yml b/.github/workflows/gen_ubuntu24.04_continuous.yml index 3b7f958704c..bef647cfc47 100644 --- a/.github/workflows/gen_ubuntu24.04_continuous.yml +++ b/.github/workflows/gen_ubuntu24.04_continuous.yml @@ -106,7 +106,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "ubuntu24.04" path: | @@ -125,7 +125,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "ubuntu24.04" - name: "Checksum" diff --git a/.github/workflows/gen_ubuntu24.04_tag.yml b/.github/workflows/gen_ubuntu24.04_tag.yml index 347d6382fc7..796b6311d33 100644 --- a/.github/workflows/gen_ubuntu24.04_tag.yml +++ b/.github/workflows/gen_ubuntu24.04_tag.yml @@ -86,7 +86,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "ubuntu24.04" path: | @@ -104,7 +104,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "ubuntu24.04" - name: "Checksum" diff --git a/.github/workflows/gen_windows.yml b/.github/workflows/gen_windows.yml index f621e099bdd..9d22d734fad 100644 --- a/.github/workflows/gen_windows.yml +++ b/.github/workflows/gen_windows.yml @@ -82,7 +82,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "windows" path: | diff --git a/.github/workflows/gen_windows_continuous.yml b/.github/workflows/gen_windows_continuous.yml index af740148ed5..94c0f017b01 100644 --- a/.github/workflows/gen_windows_continuous.yml +++ b/.github/workflows/gen_windows_continuous.yml @@ -85,7 +85,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "windows" path: | @@ -101,7 +101,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "windows" - name: "Checksum" diff --git a/.github/workflows/gen_windows_tag.yml b/.github/workflows/gen_windows_tag.yml index 7fe59e86d6d..57e679e018c 100644 --- a/.github/workflows/gen_windows_tag.yml +++ b/.github/workflows/gen_windows_tag.yml @@ -72,7 +72,7 @@ jobs: shell: bash run: "bash ci/deploy.sh" - name: "Upload artifact" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "windows" path: | @@ -87,7 +87,7 @@ jobs: - name: "checkout repo" uses: actions/checkout@v4 - name: "Download artifact" - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: "windows" - name: "Checksum" diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index cca29451145..a79b2a14d22 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -8,6 +8,7 @@ on: - '**/*.rs' - '.github/workflows/nix.yml' - 'nix/**' + workflow_dispatch: push: branches: - main diff --git a/.github/workflows/nix_continuous.yml b/.github/workflows/nix_continuous.yml new file mode 100644 index 00000000000..865d95fc876 --- /dev/null +++ b/.github/workflows/nix_continuous.yml @@ -0,0 +1,39 @@ +name: nix_continuous + +on: + schedule: + - cron: "10 3 * * *" + workflow_dispatch: + push: + branches: + - main + paths: + - '**/*.rs' + - '.github/workflows/nix_continuous.yml' + - 'nix/**' + +jobs: + lints: + name: Build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Install nix + uses: DeterminateSystems/nix-installer-action@main + - name: Cache build artifacts + uses: DeterminateSystems/magic-nix-cache-action@main + - name: Check flake inputs + uses: DeterminateSystems/flake-checker-action@main + with: + flake-lock-path: ./nix/flake.lock + ignore-missing-flake-lock: false + - name: Setup Cachix + uses: cachix/cachix-action@v15 + with: + name: wezterm + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + - name: Build default package + run: | + nix build ./nix --json \ + | jq -r '.[].outputs | to_entries[].value' \ + | cachix push wezterm diff --git a/.github/workflows/no-response.yml b/.github/workflows/no-response.yml index a1074b9b12e..3f08adb1d86 100644 --- a/.github/workflows/no-response.yml +++ b/.github/workflows/no-response.yml @@ -1,20 +1,39 @@ name: No Response +permissions: + contents: read + issues: write + pull-requests: write + # Both `issue_comment` and `scheduled` event types are required for this Action # to work properly. on: issue_comment: types: [created] + workflow_dispatch: schedule: # Schedule for five minutes after the hour, every hour - cron: '5 * * * *' + push: + branches: + - main + paths: + - '.github/workflows/no-response.yml' jobs: noResponse: runs-on: ubuntu-latest steps: - - uses: lee-dohm/no-response@v0.5.0 + - uses: actions/stale@v9.0.0 with: - token: ${{ github.token }} - responseRequiredLabel: waiting-on-op - + only-labels: waiting-on-op + days-before-stale: -1 + days-before-close: -1 + days-before-issue-stale: 14 + days-before-issue-close: 0 + close-issue-message: > + This issue has been automatically closed because there has been no response + to our request for more information from the original author. With only the + information that is currently in the issue, we don't have enough information + to take action. Please reach out if you have or find the answers we need so + that we can investigate further. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 57e28e7e17c..b582a59b68e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -28,7 +28,7 @@ Look at [mkdocs serve](https://www.mkdocs.org/user-guide/cli/#mkdocs-serve) for ### Operating system specific installation instructions? There are a lot of targets out there. Today we have docs that are Ubuntu biased -and I know that there are a lot flavors of Linux. Rather than expand the README +and I know that there are a lot of flavors of Linux. Rather than expand the README with instructions for those, please translate the instructions into steps that can be run in the [`get-deps`](https://github.com/wez/wezterm/blob/master/get-deps) script. diff --git a/Cargo.lock b/Cargo.lock index b20b065e65d..6ab6e9d57a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" dependencies = [ "gimli", ] @@ -17,6 +17,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "adler32" version = "1.2.0" @@ -80,9 +86,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", @@ -95,33 +101,33 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -129,9 +135,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "arbitrary" @@ -147,20 +153,20 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "as-raw-xcb-connection" @@ -170,18 +176,18 @@ checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" [[package]] name = "ash" -version = "0.37.3+1.3.251" +version = "0.38.0+1.3.281" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" dependencies = [ - "libloading 0.7.4", + "libloading", ] [[package]] name = "assert_fs" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cd762e110c8ed629b11b6cde59458cc1c71de78ebbcc30099fc8e0403a2a2ec" +checksum = "7efdb1fdb47602827a342857666feb372712cbc64b414172bd6b167a02927674" dependencies = [ "anstyle", "doc-comment", @@ -218,9 +224,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8828ec6e544c02b0d6691d21ed9f9218d0384a82542855073c2a3f58304aaf0" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", @@ -242,9 +248,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.3" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" +checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" dependencies = [ "async-lock", "cfg-if", @@ -253,10 +259,10 @@ dependencies = [ "futures-lite", "parking", "polling", - "rustix 0.38.34", + "rustix 0.38.37", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -283,9 +289,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.2.3" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7eda79bbd84e29c2b308d1dc099d7de8dcc7035e48f4bf5dc4a531a44ff5e2a" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ "async-channel", "async-io", @@ -296,9 +302,8 @@ dependencies = [ "cfg-if", "event-listener", "futures-lite", - "rustix 0.38.34", + "rustix 0.38.37", "tracing", - "windows-sys 0.52.0", ] [[package]] @@ -309,14 +314,14 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] name = "async-signal" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794f185324c2f00e771cd9f1ae8b5ac68be2ca7abb129a87afd6e86d228bc54d" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ "async-io", "async-lock", @@ -324,10 +329,10 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 0.38.34", + "rustix 0.38.37", "signal-hook-registry", "slab", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -338,13 +343,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.81" +version = "0.1.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -407,17 +412,17 @@ checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.8.0", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -469,7 +474,16 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" dependencies = [ - "bit-vec", + "bit-vec 0.6.3", +] + +[[package]] +name = "bit-set" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0481a0e032742109b1133a095184ee93d88f3dc9e0d28a5d033dc77a073f44f" +dependencies = [ + "bit-vec 0.7.0", ] [[package]] @@ -478,6 +492,12 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +[[package]] +name = "bit-vec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" + [[package]] name = "bit_field" version = "0.10.2" @@ -501,9 +521,9 @@ dependencies = [ [[package]] name = "bitstream-io" -version = "2.5.0" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcde5f311c85b8ca30c2e4198d4326bc342c76541590106f5fa4a50946ea499" +checksum = "b81e1519b0d82120d2fd469d5bfb2919a9361c48b02d82d04befc1cdd2002452" [[package]] name = "block" @@ -535,9 +555,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.9.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" dependencies = [ "memchr", "regex-automata", @@ -558,22 +578,22 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.16.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" +checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -590,9 +610,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.6.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" [[package]] name = "cairo-rs" @@ -617,9 +637,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.7" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" [[package]] name = "cassowary" @@ -635,13 +655,13 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.1.2" +version = "1.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47de7e88bbbd467951ae7f5a6f34f70d1b4d9cfce53d5fd70f74ebe118b3db56" +checksum = "2d74707dde2ba56f86ae90effb3b43ddd369504387e718014de010cec7959800" dependencies = [ "jobserver", "libc", - "once_cell", + "shlex", ] [[package]] @@ -724,9 +744,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.9" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64acc1846d54c1fe936a78dc189c34e28d3f5afc348403f28ecf53660b9b8462" +checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" dependencies = [ "clap_builder", "clap_derive", @@ -734,9 +754,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.9" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8393d67ba2e7bfaf28a23458e4e2b543cc73a99595511eb207fdb8aede942" +checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" dependencies = [ "anstream", "anstyle", @@ -747,18 +767,18 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.8" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b4be9c4c4b1f30b78d8a750e0822b6a6102d97e62061c583a6c1dea2dfb33ae" +checksum = "205d5ef6d485fa47606b98b0ddc4ead26eb850aaa86abfb562a94fb3280ecba0" dependencies = [ "clap", ] [[package]] name = "clap_complete_fig" -version = "4.5.1" +version = "4.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb4bc503cddc1cd320736fb555d6598309ad07c2ddeaa23891a10ffb759ee612" +checksum = "d494102c8ff3951810c72baf96910b980fb065ca5d3101243e6a8dc19747c86b" dependencies = [ "clap", "clap_complete", @@ -766,21 +786,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.8" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" +checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] name = "clap_lex" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "clipboard-win" @@ -882,9 +902,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] name = "colored" @@ -906,10 +926,35 @@ dependencies = [ ] [[package]] -name = "com-rs" -version = "0.2.1" +name = "com" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6" +dependencies = [ + "com_macros", +] + +[[package]] +name = "com_macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5" +dependencies = [ + "com_macros_support", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "com_macros_support" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642" +checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] name = "concurrent-queue" @@ -929,7 +974,7 @@ dependencies = [ "colorgrad", "dirs-next", "enum-display-derive", - "env_logger 0.11.3", + "env_logger 0.11.5", "hostname", "lazy_static", "libc", @@ -947,7 +992,7 @@ dependencies = [ "shlex", "smol", "termwiz", - "toml 0.8.14", + "toml 0.8.19", "umask", "wezterm-bidi", "wezterm-config-derive", @@ -970,9 +1015,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core-graphics" @@ -1021,9 +1066,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -1163,12 +1208,12 @@ checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" [[package]] name = "d3d12" -version = "0.7.0" +version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16e44ab292b1dddfdaf7be62cfd8877df52f2f3fde5858d95bab606be259f20" +checksum = "bdbd1f579714e3c809ebd822c81ef148b1ceaeb3d535352afc73fd0c4c6a0017" dependencies = [ "bitflags 2.6.0", - "libloading 0.8.4", + "libloading", "winapi", ] @@ -1193,7 +1238,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -1204,7 +1249,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -1300,7 +1345,19 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading 0.8.4", + "libloading", +] + +[[package]] +name = "dns-lookup" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5766087c2235fec47fafa4cfecc81e494ee679d0fd4a59887ea0919bfb0e4fc" +dependencies = [ + "cfg-if", + "libc", + "socket2", + "windows-sys 0.48.0", ] [[package]] @@ -1309,6 +1366,15 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "document-features" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" +dependencies = [ + "litrs", +] + [[package]] name = "downcast-rs" version = "1.2.1" @@ -1317,9 +1383,9 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dwrote" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b" +checksum = "2da3498378ed373237bdef1eddcc64e7be2d3ba4841f4c22a998e81cadeea83c" dependencies = [ "lazy_static", "libc", @@ -1345,14 +1411,14 @@ dependencies = [ "rustc_version", "toml 0.5.11", "vswhom", - "winreg 0.10.1", + "winreg", ] [[package]] name = "emojis" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f619a926616ae7149a0d82610b051134a0d6c4ae2962d990c06c847a445c5d9" +checksum = "e72f23d65b46527e461b161ab9a126c378aa2249d8a8d15718d23ab1fb4d8786" dependencies = [ "phf", ] @@ -1401,7 +1467,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -1439,9 +1505,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" dependencies = [ "log", "regex", @@ -1462,9 +1528,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.3" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" dependencies = [ "anstream", "anstyle", @@ -1491,9 +1557,9 @@ dependencies = [ [[package]] name = "euclid" -version = "0.22.10" +version = "0.22.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f0eb73b934648cd7a4a61f1b15391cd95dab0b4da6e2e66c2a072c144b4a20" +checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" dependencies = [ "num-traits", ] @@ -1529,7 +1595,7 @@ dependencies = [ "flume", "half", "lebe", - "miniz_oxide", + "miniz_oxide 0.7.4", "rayon-core", "smallvec", "zune-inflate", @@ -1553,15 +1619,15 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" dependencies = [ - "bit-set", + "bit-set 0.5.3", "regex", ] [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fdeflate" @@ -1583,9 +1649,9 @@ dependencies = [ [[package]] name = "filenamegen" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f40529622e8c4e7c28f600abb501b0ca07047d4e15d576aff1837cca8318ab6" +checksum = "b57c1f17080e8d88a15dc3040f324d4ada892f5bc5f0dc605017f26c85dd0303" dependencies = [ "anyhow", "bstr", @@ -1606,14 +1672,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.23" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.4.1", - "windows-sys 0.52.0", + "libredox", + "windows-sys 0.59.0", ] [[package]] @@ -1624,9 +1690,9 @@ checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" [[package]] name = "fixed" -version = "1.27.0" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fc715d38bea7b5bf487fcd79bcf8c209f0b58014f3018a7a19c2b855f472048" +checksum = "85c6e0b89bf864acd20590dbdbad56f69aeb898abfc9443008fd7bd48b2cc85a" dependencies = [ "az", "bytemuck", @@ -1642,12 +1708,12 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -1712,7 +1778,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -1832,7 +1898,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -1871,15 +1937,6 @@ dependencies = [ "slab", ] -[[package]] -name = "fuzzy-matcher" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94" -dependencies = [ - "thread_local", -] - [[package]] name = "generate-bidi" version = "0.1.0" @@ -1903,7 +1960,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc3655aa6818d65bc620d6911f05aa7b6aeb596291e1e9f79e52df85583d1e30" dependencies = [ - "rustix 0.38.34", + "rustix 0.38.37", "windows-targets 0.52.6", ] @@ -1932,9 +1989,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" [[package]] name = "git2" @@ -1964,17 +2021,15 @@ dependencies = [ [[package]] name = "glium" -version = "0.34.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d5813c960a54b76e20fe4ef7e54fbeb12545776a11ecf14f42a946a1c65964" +checksum = "0a3028d1f135b5395e6e4336916b424bc5dd2b38c6e378ce2704e4b8f4a617ed" dependencies = [ "backtrace", "fnv", "gl_generator", - "lazy_static", "memoffset", "smallvec", - "takeable-option", ] [[package]] @@ -1985,9 +2040,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" dependencies = [ "aho-corasick", "bstr", @@ -2021,9 +2076,9 @@ dependencies = [ [[package]] name = "glutin_wgl_sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead" +checksum = "0a4e1951bbd9434a81aa496fe59ccc2235af3820d27b85f9314e279609211e2c" dependencies = [ "gl_generator", ] @@ -2064,23 +2119,22 @@ dependencies = [ [[package]] name = "gpu-allocator" -version = "0.23.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40fe17c8a05d60c38c0a4e5a3c802f2f1ceb66b76c67d96ffb34bef0475a7fad" +checksum = "fdd4240fc91d3433d5e5b0fc5b67672d771850dc19bbee03c1381e19322803d7" dependencies = [ - "backtrace", "log", "presser", "thiserror", "winapi", - "windows 0.51.1", + "windows 0.52.0", ] [[package]] name = "gpu-descriptor" -version = "0.2.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" +checksum = "9c08c1f623a8d0b722b8b99f821eb0ba672a1618f0d3b16ddbee1cedd2dd8557" dependencies = [ "bitflags 2.6.0", "gpu-descriptor-types", @@ -2089,9 +2143,9 @@ dependencies = [ [[package]] name = "gpu-descriptor-types" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ "bitflags 2.6.0", ] @@ -2108,9 +2162,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", @@ -2118,7 +2172,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.2.6", + "indexmap 2.5.0", "slab", "tokio", "tokio-util", @@ -2170,14 +2224,14 @@ dependencies = [ [[package]] name = "hassle-rs" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1397650ee315e8891a0df210707f0fc61771b0cc518c3023896064c5407cb3b0" +checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" dependencies = [ - "bitflags 1.3.2", - "com-rs", + "bitflags 2.6.0", + "com", "libc", - "libloading 0.7.4", + "libloading", "thiserror", "widestring", "winapi", @@ -2283,9 +2337,9 @@ dependencies = [ [[package]] name = "http_req" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd68fe813419e7fd8982607f1b39e2a393226a98cf4cc905e716ba328e2a488f" +checksum = "0122ab6637149482eb66b57288ac597bc7eb9859cbaa79dee62fa19a350df3d2" dependencies = [ "native-tls", "unicase", @@ -2334,9 +2388,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http", @@ -2367,9 +2421,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" dependencies = [ "bytes", "futures-channel", @@ -2396,7 +2450,7 @@ dependencies = [ "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows-core 0.52.0", + "windows-core", ] [[package]] @@ -2426,9 +2480,9 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.22" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" dependencies = [ "crossbeam-deque", "globset", @@ -2442,12 +2496,12 @@ dependencies = [ [[package]] name = "image" -version = "0.25.1" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd54d660e773627692c524beaad361aca785a4f9f5730ce91f42aabe5bce3d11" +checksum = "99314c8a2152b8ddb211f924cdae532d8c5e4c8bb54728e12fff1b0cd5963a10" dependencies = [ "bytemuck", - "byteorder", + "byteorder-lite", "color_quant", "exr", "gif", @@ -2465,12 +2519,12 @@ dependencies = [ [[package]] name = "image-webp" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d730b085583c4d789dfd07fdcf185be59501666a90c97c40162b37e4fdad272d" +checksum = "f79afb8cbee2ef20f59ccd477a218c12a93943d075b492015ecb1bb81f8ee904" dependencies = [ "byteorder-lite", - "thiserror", + "quick-error", ] [[package]] @@ -2492,9 +2546,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -2537,14 +2591,14 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] name = "intrusive-collections" -version = "0.9.6" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b694dc9f70c3bda874626d2aed13b780f137aab435f4e9814121955cf706122e" +checksum = "189d0897e4cbe8c75efedf3502c18c887b05046e59d28404d4d8e46cbc4d1e86" dependencies = [ "memoffset", ] @@ -2571,26 +2625,26 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "libc", "windows-sys 0.52.0", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" @@ -2616,11 +2670,17 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] @@ -2633,9 +2693,9 @@ checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] @@ -2653,7 +2713,7 @@ dependencies = [ "libc", "proc-macro2", "regex", - "syn 2.0.71", + "syn 2.0.77", "terminal_size 0.2.6", ] @@ -2664,7 +2724,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" dependencies = [ "libc", - "libloading 0.8.4", + "libloading", "pkg-config", ] @@ -2738,9 +2798,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.155" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libflate" @@ -2792,19 +2852,9 @@ dependencies = [ [[package]] name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if", - "winapi", -] - -[[package]] -name = "libloading" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", "windows-targets 0.52.6", @@ -2824,6 +2874,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.6.0", "libc", + "redox_syscall 0.5.4", ] [[package]] @@ -2878,9 +2929,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.18" +version = "1.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" dependencies = [ "cc", "libc", @@ -2909,6 +2960,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litrs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" + [[package]] name = "lock_api" version = "0.4.12" @@ -2946,18 +3003,18 @@ dependencies = [ [[package]] name = "lru" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" dependencies = [ "hashbrown 0.14.5", ] [[package]] name = "lua-src" -version = "546.0.2" +version = "547.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da0daa7eee611a4c30c8f5ee31af55266e26e573971ba9336d2993e2da129b2" +checksum = "1edaf29e3517b49b8b746701e5648ccb5785cde1c119062cbabbc5d5cd115e42" dependencies = [ "cc", ] @@ -2974,9 +3031,9 @@ dependencies = [ [[package]] name = "luajit-src" -version = "210.5.8+5790d25" +version = "210.5.10+f725e44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "441f18d9ad792e871fc2f7f2cb8902c386f6f56fdbddef3b835b61475e375346" +checksum = "18a0fa0df28e21f785c48d9c0f0be355cf40658badb667284207dbb4d1e574a9" dependencies = [ "cc", "which", @@ -3023,7 +3080,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" dependencies = [ "cfg-if", - "rayon", ] [[package]] @@ -3043,9 +3099,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" dependencies = [ "libc", ] @@ -3067,9 +3123,9 @@ dependencies = [ [[package]] name = "metal" -version = "0.27.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" +checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" dependencies = [ "bitflags 2.6.0", "block", @@ -3112,6 +3168,15 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + [[package]] name = "mintex" version = "0.1.3" @@ -3130,6 +3195,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi", + "windows-sys 0.52.0", +] + [[package]] name = "mlua" version = "0.9.9" @@ -3146,9 +3223,9 @@ dependencies = [ [[package]] name = "mlua-sys" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a088ed0723df7567f569ba018c5d48c23c501f3878b190b04144dfa5ebfa8abc" +checksum = "ebe026d6bd1583a9cf9080e189030ddaea7e6f5f0deb366a8e26f8a26c4135b8" dependencies = [ "cc", "cfg-if", @@ -3228,17 +3305,18 @@ dependencies = [ [[package]] name = "naga" -version = "0.14.2" +version = "22.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae585df4b6514cf8842ac0f1ab4992edc975892704835b549cf818dc0191249e" +checksum = "8bd5a652b6faf21496f2cfd88fc49989c8db0825d1f6746b1a71a6ede24a63ad" dependencies = [ - "bit-set", + "arrayvec", + "bit-set 0.6.0", "bitflags 2.6.0", + "cfg_aliases 0.1.1", "codespan-reporting", "hexf-parse", - "indexmap 2.2.6", + "indexmap 2.5.0", "log", - "num-traits", "rustc-hash 1.1.0", "spirv", "termcolor", @@ -3281,6 +3359,15 @@ dependencies = [ "tempfile", ] +[[package]] +name = "ndk-sys" +version = "0.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys", +] + [[package]] name = "new_debug_unreachable" version = "1.0.6" @@ -3360,7 +3447,7 @@ dependencies = [ "inotify", "kqueue", "libc", - "mio", + "mio 0.8.11", "walkdir", "windows-sys 0.45.0", ] @@ -3374,6 +3461,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "nucleo-matcher" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf33f538733d1a5a3494b836ba913207f14d9d4a1d3cd67030c5061bdd2cac85" +dependencies = [ + "memchr", + "unicode-segmentation", +] + [[package]] name = "num" version = "0.4.3" @@ -3421,7 +3518,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -3464,16 +3561,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi 0.3.9", - "libc", -] - [[package]] name = "objc" version = "0.2.7" @@ -3481,32 +3568,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", ] [[package]] name = "object" -version = "0.36.1" +version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "33ea5043e58958ee56f3e15a90aee535795cd7dfd319846288d93c5b57d85cbe" [[package]] name = "oorandom" @@ -3516,9 +3593,9 @@ checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -3537,7 +3614,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -3548,18 +3625,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "300.3.1+3.3.1" +version = "300.3.2+3.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7259953d42a81bf137fbbd73bd30a8e1914d6dce43c2b90ed575783a22608b91" +checksum = "a211a18d945ef7e648cc6e0058f4c548ee46aab922ea203e0d30e966ea23647b" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" dependencies = [ "cc", "libc", @@ -3570,9 +3647,9 @@ dependencies = [ [[package]] name = "ordered-float" -version = "4.2.1" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ff2cf528c6c03d9ed653d6c4ce1dc0582dc4af309790ad92f07c1cd551b0be" +checksum = "4a91171844676f8c7990ce64959210cd2eaef32c2612c50f9fae9f8aaa6065a6" dependencies = [ "num-traits", "rand", @@ -3591,9 +3668,9 @@ dependencies = [ [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" @@ -3638,11 +3715,20 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.2", + "redox_syscall 0.5.4", "smallvec", "windows-targets 0.52.6", ] +[[package]] +name = "passfd" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b332c50e4d07c0011fff51ea305374408319908908bc1dbed7a0ffaaf63a8151" +dependencies = [ + "libc", +] + [[package]] name = "paste" version = "1.0.15" @@ -3667,9 +3753,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +checksum = "9c73c26c01b8c87956cea613c907c9d6ecffd8d18a2a5908e5de0adfaa185cea" dependencies = [ "memchr", "thiserror", @@ -3678,9 +3764,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" +checksum = "664d22978e2815783adbdd2c588b455b1bd625299ce36b2a99881ac9627e6d8d" dependencies = [ "pest", "pest_generator", @@ -3688,22 +3774,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" +checksum = "a2d5487022d5d33f4c30d91c22afa240ce2a644e87fe08caad974d4eab6badbe" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] name = "pest_meta" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" +checksum = "0091754bbd0ea592c4deb3a122ce8ecbb0753b738aa82bc055fcc2eccc8d8174" dependencies = [ "once_cell", "pest", @@ -3750,7 +3836,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -3779,7 +3865,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -3796,9 +3882,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", "fastrand", @@ -3818,7 +3904,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ "base64 0.22.1", - "indexmap 2.2.6", + "indexmap 2.5.0", "quick-xml 0.32.0", "serde", "time", @@ -3826,9 +3912,9 @@ dependencies = [ [[package]] name = "plotters" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3" +checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" dependencies = [ "num-traits", "plotters-backend", @@ -3839,15 +3925,15 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7" +checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" [[package]] name = "plotters-svg" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705" +checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" dependencies = [ "plotters-backend", ] @@ -3875,29 +3961,29 @@ dependencies = [ "crc32fast", "fdeflate", "flate2", - "miniz_oxide", + "miniz_oxide 0.7.4", ] [[package]] name = "polling" -version = "3.7.2" +version = "3.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b" +checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.34", + "rustix 0.38.37", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "portable-atomic" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" [[package]] name = "portable-pty" @@ -3919,7 +4005,7 @@ dependencies = [ "shell-words", "smol", "winapi", - "winreg 0.10.1", + "winreg", ] [[package]] @@ -3930,15 +4016,18 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "predicates" -version = "3.1.0" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b87bfd4605926cdfefc1c3b5f8fe560e3feca9d5552cf68c466d3d8236c7e8" +checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97" dependencies = [ "anstyle", "difflib", @@ -3950,15 +4039,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" +checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" [[package]] name = "predicates-tree" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" dependencies = [ "predicates-core", "termtree", @@ -3972,11 +4061,11 @@ checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit 0.21.1", + "toml_edit", ] [[package]] @@ -4028,7 +4117,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" dependencies = [ "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -4085,18 +4174,18 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f24d770aeca0eacb81ac29dfbc55ebcc09312fdd1f8bbecdc7e4a84e000e3b4" +checksum = "96a05e2e8efddfa51a84ca47cec303fac86c8541b686d37cac5efc0e094417bc" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -4192,24 +4281,23 @@ dependencies = [ [[package]] name = "ravif" -version = "0.11.8" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6ba61c28ba24c0cf8406e025cb29a742637e3f70776e61c27a8a8b72a042d12" +checksum = "a8f0bfd976333248de2078d350bfdf182ff96e168a24d23d2436cef320dd4bdd" dependencies = [ "avif-serialize", "imgref", "loop9", "quick-error", "rav1e", - "rayon", "rgb", ] [[package]] name = "raw-window-handle" -version = "0.5.2" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "rayon" @@ -4254,27 +4342,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", @@ -4283,9 +4362,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.5" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", @@ -4324,9 +4403,9 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.12.5" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" dependencies = [ "base64 0.22.1", "bytes", @@ -4362,7 +4441,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg 0.52.0", + "windows-registry", ] [[package]] @@ -4376,9 +4455,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.44" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aee83dc281d5a3200d37b299acd13b81066ea126a7f16f0eae70fc9aed241d9" +checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" dependencies = [ "bytemuck", ] @@ -4430,7 +4509,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.71", + "syn 2.0.77", "unicode-ident", ] @@ -4468,9 +4547,9 @@ checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] @@ -4491,9 +4570,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ "bitflags 2.6.0", "errno", @@ -4504,9 +4583,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.11" +version = "0.23.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4828ea528154ae444e5a642dbb7d5623354030dc9822b83fd9bb79683c7399d0" +checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" dependencies = [ "once_cell", "rustls-pki-types", @@ -4517,9 +4596,9 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" dependencies = [ "base64 0.22.1", "rustls-pki-types", @@ -4527,15 +4606,15 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" [[package]] name = "rustls-webpki" -version = "0.102.5" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a6fccd794a42c2c105b513a2f62bc3fd8f3ba57a4593677ceb0bd035164d78" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", @@ -4559,11 +4638,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4580,9 +4659,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.6.0", "core-foundation", @@ -4593,9 +4672,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" dependencies = [ "core-foundation-sys", "libc", @@ -4609,9 +4688,9 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.204" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] @@ -4625,28 +4704,29 @@ dependencies = [ "luahelper", "serde_json", "serde_yaml", - "toml 0.8.14", + "toml 0.8.19", "wezterm-dynamic", ] [[package]] name = "serde_derive" -version = "1.0.204" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] name = "serde_json" -version = "1.0.120" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -4659,14 +4739,14 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] name = "serde_spanned" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" dependencies = [ "serde", ] @@ -4708,7 +4788,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -4717,7 +4797,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "itoa", "ryu", "serde", @@ -4894,16 +4974,16 @@ checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" [[package]] name = "smithay-client-toolkit" -version = "0.18.1" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" +checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ "bitflags 2.6.0", "cursor-icon", "libc", "log", - "memmap2 0.9.4", - "rustix 0.38.34", + "memmap2 0.9.5", + "rustix 0.38.37", "thiserror", "wayland-backend", "wayland-client", @@ -4917,9 +4997,9 @@ dependencies = [ [[package]] name = "smol" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" dependencies = [ "async-channel", "async-executor", @@ -4977,12 +5057,11 @@ dependencies = [ [[package]] name = "spirv" -version = "0.2.0+1.5.4" +version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 1.3.2", - "num-traits", + "bitflags 2.6.0", ] [[package]] @@ -5086,9 +5165,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.71" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -5102,7 +5181,7 @@ dependencies = [ "anyhow", "color-funcs", "config", - "env_logger 0.11.3", + "env_logger 0.11.5", "futures", "lazy_static", "libflate", @@ -5116,7 +5195,7 @@ dependencies = [ "tar", "tempfile", "tokio", - "toml 0.8.14", + "toml 0.8.19", "wezterm-dynamic", ] @@ -5125,23 +5204,26 @@ name = "sync_wrapper" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -5156,7 +5238,7 @@ dependencies = [ "cfg-expr", "heck", "pkg-config", - "toml 0.8.14", + "toml 0.8.19", "version-compare", ] @@ -5167,12 +5249,6 @@ dependencies = [ "termwiz", ] -[[package]] -name = "takeable-option" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36ae8932fcfea38b7d3883ae2ab357b0d57a02caaa18ebb4f5ece08beaec4aa0" - [[package]] name = "tar" version = "0.4.41" @@ -5186,20 +5262,21 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.15" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4873307b7c257eddcb50c9bedf158eb669578359fb28428bef438fec8e6ba7c2" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if", "fastrand", - "rustix 0.38.34", - "windows-sys 0.52.0", + "once_cell", + "rustix 0.38.37", + "windows-sys 0.59.0", ] [[package]] @@ -5227,7 +5304,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" dependencies = [ - "rustix 0.38.34", + "rustix 0.38.37", "windows-sys 0.48.0", ] @@ -5276,7 +5353,7 @@ dependencies = [ "bitflags 2.6.0", "cassowary", "criterion", - "env_logger 0.11.3", + "env_logger 0.11.5", "fancy-regex", "filedescriptor", "finl_unicode", @@ -5344,22 +5421,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.62" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2675633b1499176c2dff06b0856a27976a8f9d436737b4cf4f312d4d91d8bbb" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.62" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d20468752b09f49e909e55a5d338caa8bedf615594e9d80bc4c565d30faf798c" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -5368,16 +5445,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" -[[package]] -name = "thread_local" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" -dependencies = [ - "cfg-if", - "once_cell", -] - [[package]] name = "tiff" version = "0.9.1" @@ -5488,30 +5555,29 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.38.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", "libc", - "mio", - "num_cpus", + "mio 1.0.2", "pin-project-lite", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -5537,9 +5603,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -5559,47 +5625,36 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.14" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.15", + "toml_edit", ] [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap 2.2.6", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.22.15" +version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59a3a72298453f564e2b111fa896f8d07fabb36f51f06d7e875fc5e0b5a3ef1" +checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.13", + "winnow", ] [[package]] @@ -5619,15 +5674,15 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -5648,7 +5703,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -5714,9 +5769,9 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-linebreak" @@ -5735,9 +5790,9 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" @@ -5747,9 +5802,9 @@ checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" [[package]] name = "unsafe-libyaml" @@ -5849,9 +5904,9 @@ checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vswhom" @@ -5914,34 +5969,35 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if", "js-sys", @@ -5951,9 +6007,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5961,32 +6017,33 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "wayland-backend" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "269c04f203640d0da2092d1b8d89a2d081714ae3ac2f1b53e99f205740517198" +checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6" dependencies = [ "cc", "downcast-rs", - "rustix 0.38.34", + "raw-window-handle", + "rustix 0.38.37", "scoped-tls", "smallvec", "wayland-sys", @@ -5994,12 +6051,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.4" +version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bd0f46c069d3382a36c8666c1b9ccef32b8b04f41667ca1fef06a1adcc2982" +checksum = "e3f45d1222915ef1fd2057220c1d9d9624b7654443ea35c3877f7a52bd0a5a2d" dependencies = [ "bitflags 2.6.0", - "rustix 0.38.34", + "rustix 0.38.37", "wayland-backend", "wayland-scanner", ] @@ -6017,20 +6074,20 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.4" +version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09414bcf0fd8d9577d73e9ac4659ebc45bcc9cff1980a350543ad8e50ee263b2" +checksum = "3a94697e66e76c85923b0d28a0c251e8f0666f58fc47d316c0f4da6da75d37cb" dependencies = [ - "rustix 0.38.34", + "rustix 0.38.37", "wayland-client", "xcursor", ] [[package]] name = "wayland-egl" -version = "0.32.2" +version = "0.32.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d33688a00899e3d9725356ad570325bace112c37ea2eac37d9d13b9e3dd2577" +checksum = "4e3cb8b84ff95310fe59ce6c61f1fa344ec22f4c240c369a2b20f15caebfede4" dependencies = [ "wayland-backend", "wayland-sys", @@ -6038,9 +6095,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.31.2" +version = "0.32.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" +checksum = "2b5755d77ae9040bb872a25026555ce4cb0ae75fd923e90d25fba07d81057de0" dependencies = [ "bitflags 2.6.0", "wayland-backend", @@ -6050,9 +6107,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.2.0" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" +checksum = "dad87b5fd1b1d3ca2f792df8f686a2a11e3fe1077b71096f7a175ab699f89109" dependencies = [ "bitflags 2.6.0", "wayland-backend", @@ -6063,20 +6120,20 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.3" +version = "0.31.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edf466fc49a4feb65a511ca403fec3601494d0dee85dbf37fff6fa0dd4eec3b6" +checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3" dependencies = [ "proc-macro2", - "quick-xml 0.34.0", + "quick-xml 0.36.1", "quote", ] [[package]] name = "wayland-sys" -version = "0.31.3" +version = "0.31.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a6754825230fa5b27bafaa28c30b3c9e72c55530581220cef401fa422c0fae7" +checksum = "efa8ac0d8e8ed3e3b5c9fc92c7881406a268e11555abe36493efabe649a29e09" dependencies = [ "dlib", "log", @@ -6085,9 +6142,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", @@ -6144,7 +6201,7 @@ dependencies = [ name = "wezterm-bidi" version = "0.2.3" dependencies = [ - "env_logger 0.11.3", + "env_logger 0.11.5", "k9", "log", "wezterm-dynamic", @@ -6255,7 +6312,7 @@ dependencies = [ "dwrote", "encoding_rs", "enum-display-derive", - "env_logger 0.11.3", + "env_logger 0.11.5", "euclid", "finl_unicode", "fontconfig", @@ -6266,7 +6323,7 @@ dependencies = [ "lazy_static", "lfucache", "log", - "memmap2 0.9.4", + "memmap2 0.9.5", "metrics", "objc", "ordered-float", @@ -6302,14 +6359,13 @@ dependencies = [ "embed-resource", "emojis", "env-bootstrap", - "env_logger 0.11.3", + "env_logger 0.11.5", "euclid", "fastrand", "filedescriptor", "finl_unicode", "frecency", "futures", - "fuzzy-matcher", "hdrhistogram", "http_req", "image", @@ -6323,6 +6379,7 @@ dependencies = [ "mlua", "mux", "mux-lua", + "nucleo-matcher", "once_cell", "ordered-float", "parking_lot 0.12.3", @@ -6425,9 +6482,11 @@ dependencies = [ "async_ossl", "codec", "config", + "dns-lookup", "futures", "hostname", "lazy_static", + "libc", "log", "mux", "portable-pty", @@ -6462,7 +6521,7 @@ dependencies = [ "camino", "clap", "dirs-next", - "env_logger 0.11.3", + "env_logger 0.11.5", "filedescriptor", "filenamegen", "gethostname", @@ -6471,6 +6530,7 @@ dependencies = [ "libssh-rs", "log", "once_cell", + "passfd", "portable-pty", "predicates", "regex", @@ -6493,7 +6553,7 @@ dependencies = [ "bitflags 1.3.2", "csscolorparser", "downcast-rs", - "env_logger 0.11.3", + "env_logger 0.11.5", "finl_unicode", "hex", "humansize", @@ -6502,7 +6562,7 @@ dependencies = [ "lazy_static", "log", "lru", - "miniz_oxide", + "miniz_oxide 0.7.4", "num-traits", "ordered-float", "serde", @@ -6549,13 +6609,13 @@ dependencies = [ [[package]] name = "wgpu" -version = "0.18.0" +version = "22.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e7d227c9f961f2061c26f4cb0fbd4df0ef37e056edd0931783599d6c94ef24" +checksum = "e1d1c4ba43f80542cf63a0a6ed3134629ae73e8ab51e4b765a67f3aa062eb433" dependencies = [ "arrayvec", - "cfg-if", - "flume", + "cfg_aliases 0.1.1", + "document-features", "js-sys", "log", "naga", @@ -6574,39 +6634,42 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "0.18.1" +version = "22.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef91c1d62d1e9e81c79e600131a258edf75c9531cbdbde09c44a011a47312726" +checksum = "0348c840d1051b8e86c3bcd31206080c5e71e5933dabd79be1ce732b0b2f089a" dependencies = [ "arrayvec", - "bit-vec", + "bit-vec 0.7.0", "bitflags 2.6.0", - "codespan-reporting", + "cfg_aliases 0.1.1", + "document-features", + "indexmap 2.5.0", "log", "naga", + "once_cell", "parking_lot 0.12.3", "profiling", "raw-window-handle", "rustc-hash 1.1.0", "smallvec", "thiserror", - "web-sys", "wgpu-hal", "wgpu-types", ] [[package]] name = "wgpu-hal" -version = "0.18.1" +version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84ecc802da3eb67b4cf3dd9ea6fe45bbb47ef13e6c49c5c3240868a9cc6cdd9" +checksum = "f6bbf4b4de8b2a83c0401d9e5ae0080a2792055f25859a02bf9be97952bbed4f" dependencies = [ "android_system_properties", "arrayvec", "ash", - "bit-set", + "bit-set 0.6.0", "bitflags 2.6.0", "block", + "cfg_aliases 0.1.1", "core-graphics-types", "d3d12", "glow", @@ -6618,10 +6681,11 @@ dependencies = [ "js-sys", "khronos-egl", "libc", - "libloading 0.8.4", + "libloading", "log", "metal", "naga", + "ndk-sys", "objc", "once_cell", "parking_lot 0.12.3", @@ -6640,9 +6704,9 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "0.18.0" +version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5ed5f0edf0de351fe311c53304986315ce866f394a2e6df0c4b3c70774bcdd" +checksum = "bc9d91f0e2c4b51434dfa6db77846f2793149d8e73f800fa2e41f52b8eac3c5d" dependencies = [ "bitflags 2.6.0", "js-sys", @@ -6651,23 +6715,23 @@ dependencies = [ [[package]] name = "which" -version = "6.0.1" +version = "6.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8211e4f58a2b2805adfbefbc07bab82958fc91e3836339b1ab7ae32465dce0d7" +checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f" dependencies = [ "either", "home", - "rustix 0.38.34", + "rustix 0.38.37", "winsafe", ] [[package]] name = "whoami" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" dependencies = [ - "redox_syscall 0.4.1", + "redox_syscall 0.5.4", "wasite", "web-sys", ] @@ -6696,11 +6760,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -6738,11 +6802,11 @@ dependencies = [ "k9", "lazy_static", "libc", - "libloading 0.8.4", + "libloading", "line_drawing", "log", "metrics", - "mio", + "mio 0.8.11", "objc", "plist", "promise", @@ -6755,6 +6819,7 @@ dependencies = [ "thiserror", "tiny-skia", "url", + "wayland-backend", "wayland-client", "wayland-egl", "wayland-protocols", @@ -6764,7 +6829,7 @@ dependencies = [ "wezterm-input-types", "winapi", "windows 0.33.0", - "winreg 0.10.1", + "winreg", "x11", "xcb", "xcb-imdkit", @@ -6799,39 +6864,50 @@ dependencies = [ [[package]] name = "windows" -version = "0.51.1" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" dependencies = [ - "windows-core 0.51.1", - "windows-targets 0.48.5", + "windows-core", + "windows-targets 0.52.6", ] [[package]] -name = "windows" +name = "windows-core" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-core 0.52.0", "windows-targets 0.52.6", ] [[package]] -name = "windows-core" -version = "0.51.1" +name = "windows-registry" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ - "windows-targets 0.48.5", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] -name = "windows-core" -version = "0.52.0" +name = "windows-result" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ + "windows-result", "windows-targets 0.52.6", ] @@ -6862,6 +6938,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -7072,18 +7157,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - -[[package]] -name = "winnow" -version = "0.6.13" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" dependencies = [ "memchr", ] @@ -7097,16 +7173,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "winreg" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "winsafe" version = "0.0.19" @@ -7140,7 +7206,7 @@ checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" dependencies = [ "libc", "linux-raw-sys 0.4.14", - "rustix 0.38.34", + "rustix 0.38.37", ] [[package]] @@ -7170,18 +7236,18 @@ dependencies = [ [[package]] name = "xcursor" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911" +checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61" [[package]] name = "xdg-home" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca91dcf8f93db085f3a0a29358cd0b9d670915468f4290e8b85d118a34211ab8" +checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -7204,9 +7270,9 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.20" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" +checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" [[package]] name = "yasna" @@ -7219,9 +7285,9 @@ dependencies = [ [[package]] name = "zbus" -version = "4.3.1" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "851238c133804e0aa888edf4a0229481c753544ca12a60fd1c3230c8a500fe40" +checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" dependencies = [ "async-broadcast", "async-executor", @@ -7257,14 +7323,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "4.3.1" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d5a3f12c20bd473be3194af6b49d50d7bb804ef3192dc70eddedb26b85d9da7" +checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", "zvariant_utils", ] @@ -7285,6 +7351,7 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] @@ -7296,7 +7363,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] [[package]] @@ -7326,9 +7393,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.12+zstd.1.5.6" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", @@ -7351,18 +7418,18 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.11" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec866b44a2a1fd6133d363f073ca1b179f438f99e7e5bfb1e33f7181facfe448" +checksum = "16099418600b4d8f028622f73ff6e3deaabdff330fb9a2a131dea781ee8b0768" dependencies = [ "zune-core", ] [[package]] name = "zvariant" -version = "4.1.2" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1724a2b330760dc7d2a8402d841119dc869ef120b139d29862d6980e9c75bfc9" +checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" dependencies = [ "endi", "enumflags2", @@ -7373,24 +7440,24 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "4.1.2" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55025a7a518ad14518fb243559c058a2e5b848b015e31f1d90414f36e3317859" +checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc242db087efc22bd9ade7aa7809e4ba828132edc312871584a6b4391bdf8786" +checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.77", ] diff --git a/assets/shell-integration/wezterm.sh b/assets/shell-integration/wezterm.sh index 1cc83f86c72..2ed422c8e96 100644 --- a/assets/shell-integration/wezterm.sh +++ b/assets/shell-integration/wezterm.sh @@ -15,12 +15,12 @@ # about running programs # shellcheck disable=SC2166 -if [ -z "${BASH_VERSION}" -a -z "${ZSH_NAME}" ] ; then +if [ -z "${BASH_VERSION-}" -a -z "${ZSH_NAME-}" ] ; then # Only for bash or zsh return 0 fi -if [ "${WEZTERM_SHELL_SKIP_ALL}" = "1" ] ; then +if [ "${WEZTERM_SHELL_SKIP_ALL-}" = "1" ] ; then return 0 fi @@ -425,7 +425,7 @@ fi; # blesh provides it's own preexec mechanism which is recommended over bash-preexec # See https://github.com/akinomyoga/ble.sh/wiki/Manual-%C2%A71-Introduction#user-content-fn-blehook for more details -if [[ ! -n "$BLE_VERSION" ]]; then +if [[ ! -n "${BLE_VERSION-}" ]]; then __wezterm_install_bash_prexec fi @@ -434,7 +434,7 @@ fi # It requires the `base64` utility to be available in the path. __wezterm_set_user_var() { if hash base64 2>/dev/null ; then - if [[ -z "${TMUX}" ]] ; then + if [[ -z "${TMUX-}" ]] ; then printf "\033]1337;SetUserVar=%s=%s\007" "$1" `echo -n "$2" | base64` else # @@ -486,9 +486,12 @@ __wezterm_semantic_precmd() { } function __wezterm_semantic_preexec() { - # Restore the original PS1/PS2 - PS1="$__wezterm_save_ps1" - PS2="$__wezterm_save_ps2" + # Restore the original PS1/PS2 if set + if [ -n "${__wezterm_save_ps1+1}" ]; then + PS1="$__wezterm_save_ps1" + PS2="$__wezterm_save_ps2" + unset __wezterm_save_ps1 + fi # Indicate that the command output begins here printf "\033]133;C;\007" __wezterm_semantic_precmd_executing=1 @@ -499,7 +502,7 @@ __wezterm_user_vars_precmd() { __wezterm_set_user_var "WEZTERM_USER" "$(id -un)" # Indicate whether this pane is running inside tmux or not - if [[ -n "${TMUX}" ]] ; then + if [[ -n "${TMUX-}" ]] ; then __wezterm_set_user_var "WEZTERM_IN_TMUX" "1" else __wezterm_set_user_var "WEZTERM_IN_TMUX" "0" @@ -526,8 +529,8 @@ __wezterm_user_vars_preexec() { # Register the various functions; take care to perform osc7 after # the semantic zones as we don't want to perturb the last command # status before we've had a chance to report it to the terminal -if [[ -z "${WEZTERM_SHELL_SKIP_SEMANTIC_ZONES}" ]]; then - if [[ -n "$BLE_VERSION" ]]; then +if [[ -z "${WEZTERM_SHELL_SKIP_SEMANTIC_ZONES-}" ]]; then + if [[ -n "${BLE_VERSION-}" ]]; then blehook PRECMD+=__wezterm_semantic_precmd blehook PREEXEC+=__wezterm_semantic_preexec else @@ -536,8 +539,8 @@ if [[ -z "${WEZTERM_SHELL_SKIP_SEMANTIC_ZONES}" ]]; then fi fi -if [[ -z "${WEZTERM_SHELL_SKIP_USER_VARS}" ]]; then - if [[ -n "$BLE_VERSION" ]]; then +if [[ -z "${WEZTERM_SHELL_SKIP_USER_VARS-}" ]]; then + if [[ -n "${BLE_VERSION-}" ]]; then blehook PRECMD+=__wezterm_user_vars_precmd blehook PREEXEC+=__wezterm_user_vars_preexec else @@ -546,8 +549,8 @@ if [[ -z "${WEZTERM_SHELL_SKIP_USER_VARS}" ]]; then fi fi -if [[ -z "${WEZTERM_SHELL_SKIP_CWD}" ]] ; then - if [[ -n "$BLE_VERSION" ]]; then +if [[ -z "${WEZTERM_SHELL_SKIP_CWD-}" ]] ; then + if [[ -n "${BLE_VERSION-}" ]]; then blehook PRECMD+=__wezterm_osc7 else precmd_functions+=(__wezterm_osc7) diff --git a/ci/generate-workflows.py b/ci/generate-workflows.py index ddf35dcdb10..b83255bbf78 100755 --- a/ci/generate-workflows.py +++ b/ci/generate-workflows.py @@ -551,7 +551,7 @@ def upload_artifact(self): return steps + [ ActionStep( "Upload artifact", - action="actions/upload-artifact@v3", + action="actions/upload-artifact@v4", params={"name": self.name, "path": paths}, ), ] @@ -609,7 +609,7 @@ def upload_artifact_nightly(self): return steps + [ ActionStep( "Upload artifact", - action="actions/upload-artifact@v3", + action="actions/upload-artifact@v4", params={"name": self.name, "path": paths, "retention-days": 5}, ), ] @@ -638,7 +638,7 @@ def upload_asset_nightly(self): return [ ActionStep( "Download artifact", - action="actions/download-artifact@v3", + action="actions/download-artifact@v4", params={"name": self.name}, ), checksum, @@ -673,7 +673,7 @@ def upload_asset_tag(self): return steps + [ ActionStep( "Download artifact", - action="actions/download-artifact@v3", + action="actions/download-artifact@v4", params={"name": self.name}, ), checksum, diff --git a/codec/src/lib.rs b/codec/src/lib.rs index 1f200d877a5..71767228825 100644 --- a/codec/src/lib.rs +++ b/codec/src/lib.rs @@ -9,7 +9,7 @@ //! of this code; in this way the client and server can more gracefully //! manage unknown enum variants. #![allow(dead_code)] -#![cfg_attr(feature = "cargo-clippy", allow(clippy::range_plus_one))] +#![allow(clippy::range_plus_one)] use anyhow::{bail, Context as _, Error}; use config::keyassignment::{PaneDirection, ScrollbackEraseMode}; diff --git a/config/derive/src/attr.rs b/config/derive/src/attr.rs index cc08abc7859..49fbb82a345 100644 --- a/config/derive/src/attr.rs +++ b/config/derive/src/attr.rs @@ -5,6 +5,7 @@ use syn::{ Result, Type, }; +#[allow(unused)] pub struct ContainerInfo { pub into: Option, pub try_from: Option, @@ -67,6 +68,7 @@ pub enum DefValue { Path(Path), } +#[allow(unused)] pub struct FieldInfo<'a> { pub field: &'a Field, pub type_name: String, diff --git a/config/src/config.rs b/config/src/config.rs index 5b099edc7ad..113cdbfba4c 100644 --- a/config/src/config.rs +++ b/config/src/config.rs @@ -185,7 +185,10 @@ pub struct Config { pub color_schemes: HashMap, /// How many lines of scrollback you want to retain - #[dynamic(default = "default_scrollback_lines")] + #[dynamic( + default = "default_scrollback_lines", + validate = "validate_scrollback_lines" + )] pub scrollback_lines: usize, /// If no `prog` is specified on the command line, use this @@ -469,6 +472,9 @@ pub struct Config { #[dynamic(default = "default_true")] pub show_new_tab_button_in_tab_bar: bool, + #[dynamic(default = "default_true")] + pub show_close_tab_button_in_tabs: bool, + /// If true, show_tab_index_in_tab_bar uses a zero-based index. /// The default is false and the tab shows a one-based index. #[dynamic(default)] @@ -1635,6 +1641,16 @@ fn default_scrollback_lines() -> usize { 3500 } +const MAX_SCROLLBACK_LINES: usize = 999_999_999; +fn validate_scrollback_lines(value: &usize) -> Result<(), String> { + if *value > MAX_SCROLLBACK_LINES { + return Err(format!( + "Illegal value {value} for scrollback_lines; it must be <= {MAX_SCROLLBACK_LINES}!" + )); + } + Ok(()) +} + fn default_initial_rows() -> u16 { 24 } @@ -1673,6 +1689,14 @@ fn default_font_size() -> f64 { 12.0 } +pub(crate) fn compute_cache_dir() -> anyhow::Result { + if let Some(runtime) = dirs_next::cache_dir() { + return Ok(runtime.join("wezterm")); + } + + Ok(crate::HOME_DIR.join(".local/share/wezterm")) +} + pub(crate) fn compute_data_dir() -> anyhow::Result { if let Some(runtime) = dirs_next::data_dir() { return Ok(runtime.join("wezterm")); @@ -1742,6 +1766,7 @@ fn default_tiling_desktop_environments() -> Vec { "X11 bspwm", "X11 dwm", "X11 i3", + "X11 xmonad", ] .iter() .map(|s| s.to_string()) diff --git a/config/src/font.rs b/config/src/font.rs index f137a792d3e..99b75fcb85b 100644 --- a/config/src/font.rs +++ b/config/src/font.rs @@ -581,7 +581,7 @@ impl TextStyle { } } - #[cfg_attr(feature = "cargo-clippy", allow(clippy::let_and_return))] + #[allow(clippy::let_and_return)] pub fn font_with_fallback(&self) -> Vec { let mut font = self.font.clone(); diff --git a/config/src/keyassignment.rs b/config/src/keyassignment.rs index ed284a5ec98..c273182caa4 100644 --- a/config/src/keyassignment.rs +++ b/config/src/keyassignment.rs @@ -457,9 +457,19 @@ pub struct QuickSelectArguments { #[derive(Debug, Clone, PartialEq, FromDynamic, ToDynamic)] pub struct PromptInputLine { pub action: Box, + /// Optional label to pre-fill the input line with + #[dynamic(default)] + pub initial_value: Option, /// Descriptive text to show ahead of prompt #[dynamic(default)] pub description: String, + /// Text to show for prompt + #[dynamic(default = "default_prompt")] + pub prompt: String, +} + +fn default_prompt() -> String { + "> ".to_string() } #[derive(Debug, Clone, PartialEq, FromDynamic, ToDynamic)] diff --git a/config/src/lib.rs b/config/src/lib.rs index e4928d31c6b..881cebbcb64 100644 --- a/config/src/lib.rs +++ b/config/src/lib.rs @@ -67,6 +67,7 @@ lazy_static! { pub static ref CONFIG_DIRS: Vec = config_dirs(); pub static ref RUNTIME_DIR: PathBuf = compute_runtime_dir().unwrap(); pub static ref DATA_DIR: PathBuf = compute_data_dir().unwrap(); + pub static ref CACHE_DIR: PathBuf = compute_cache_dir().unwrap(); static ref CONFIG: Configuration = Configuration::new(); static ref CONFIG_FILE_OVERRIDE: Mutex> = Mutex::new(None); static ref CONFIG_SKIP: AtomicBool = AtomicBool::new(false); diff --git a/config/src/lua.rs b/config/src/lua.rs index 4b50977645a..8d955d535c5 100644 --- a/config/src/lua.rs +++ b/config/src/lua.rs @@ -278,7 +278,7 @@ end "#, ) .set_name("=searcher") - .eval() + .eval::<()>() .context("replace package.searchers")?; wezterm_mod.set( diff --git a/config/src/scheme_data.rs b/config/src/scheme_data.rs index d6e3df9c920..a81609139cb 100644 --- a/config/src/scheme_data.rs +++ b/config/src/scheme_data.rs @@ -1,6 +1,6 @@ //! This file was generated by sync-color-schemes -pub const SCHEMES: [(&'static str, &'static str); 993] = [ +pub const SCHEMES: [(&'static str, &'static str); 1001] = [ // Start here ("3024 (base16)", "[colors]\nansi = [\n \"#090300\",\n \"#db2d20\",\n \"#01a252\",\n \"#fded02\",\n \"#01a0e4\",\n \"#a16a94\",\n \"#b5e4f4\",\n \"#a5a2a2\",\n]\nbackground = \"#090300\"\nbrights = [\n \"#5c5855\",\n \"#db2d20\",\n \"#01a252\",\n \"#fded02\",\n \"#01a0e4\",\n \"#a16a94\",\n \"#b5e4f4\",\n \"#f7f7f7\",\n]\ncursor_bg = \"#a5a2a2\"\ncursor_border = \"#a5a2a2\"\ncursor_fg = \"#090300\"\nforeground = \"#a5a2a2\"\nselection_bg = \"#a5a2a2\"\nselection_fg = \"#090300\"\n\n[colors.indexed]\n16 = \"#e8bbd0\"\n17 = \"#cdab53\"\n18 = \"#3a3432\"\n19 = \"#4a4543\"\n20 = \"#807d7c\"\n21 = \"#d6d5d4\"\n\n[metadata]\naliases = [\"3024 (dark) (terminal.sexy)\"]\nauthor = \"Jan T. Sott (http://github.com/idleberg)\"\nname = \"3024 (base16)\"\norigin_url = \"https://github.com/chriskempson/base16-unclaimed-schemes\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), @@ -37,6 +37,7 @@ pub const SCHEMES: [(&'static str, &'static str); 993] = [ ("Ashes (base16)", "[colors]\nansi = [\n \"#1c2023\",\n \"#c7ae95\",\n \"#95c7ae\",\n \"#aec795\",\n \"#ae95c7\",\n \"#c795ae\",\n \"#95aec7\",\n \"#c7ccd1\",\n]\nbackground = \"#1c2023\"\nbrights = [\n \"#747c84\",\n \"#c7ae95\",\n \"#95c7ae\",\n \"#aec795\",\n \"#ae95c7\",\n \"#c795ae\",\n \"#95aec7\",\n \"#f3f4f5\",\n]\ncursor_bg = \"#c7ccd1\"\ncursor_border = \"#c7ccd1\"\ncursor_fg = \"#1c2023\"\nforeground = \"#c7ccd1\"\nselection_bg = \"#c7ccd1\"\nselection_fg = \"#1c2023\"\n\n[colors.indexed]\n16 = \"#c7c795\"\n17 = \"#c79595\"\n18 = \"#393f45\"\n19 = \"#565e65\"\n20 = \"#adb3ba\"\n21 = \"#dfe2e5\"\n\n[metadata]\naliases = [\"Ashes (dark) (terminal.sexy)\"]\nauthor = \"Jannik Siebert (https://github.com/janniks)\"\nname = \"Ashes (base16)\"\norigin_url = \"https://github.com/chriskempson/base16-unclaimed-schemes\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), ("Ashes (dark) (terminal.sexy)", "[colors]\nansi = [\n \"#1c2023\",\n \"#c7ae95\",\n \"#95c7ae\",\n \"#aec795\",\n \"#ae95c7\",\n \"#c795ae\",\n \"#95aec7\",\n \"#c7ccd1\",\n]\nbackground = \"#1c2023\"\nbrights = [\n \"#747c84\",\n \"#c7ae95\",\n \"#95c7ae\",\n \"#aec795\",\n \"#ae95c7\",\n \"#c795ae\",\n \"#95aec7\",\n \"#f3f4f5\",\n]\nforeground = \"#c7ccd1\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nauthor = \"Chris Kempson\"\nname = \"Ashes (dark) (terminal.sexy)\"\norigin_url = \"https://github.com/stayradiated/terminal.sexy\"\nwezterm_version = \"20230712-072601-f4abf8fd\"\n"), ("Ashes (light) (terminal.sexy)", "[colors]\nansi = [\n \"#1c2023\",\n \"#c7ae95\",\n \"#95c7ae\",\n \"#aec795\",\n \"#ae95c7\",\n \"#c795ae\",\n \"#95aec7\",\n \"#c7ccd1\",\n]\nbackground = \"#f3f4f5\"\nbrights = [\n \"#747c84\",\n \"#c7ae95\",\n \"#95c7ae\",\n \"#aec795\",\n \"#ae95c7\",\n \"#c795ae\",\n \"#95aec7\",\n \"#f3f4f5\",\n]\nforeground = \"#565e65\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nauthor = \"Chris Kempson\"\nname = \"Ashes (light) (terminal.sexy)\"\norigin_url = \"https://github.com/stayradiated/terminal.sexy\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), +("Astrodark (Gogh)", "[colors]\nansi = [\n \"#111317\",\n \"#f8747e\",\n \"#75ad47\",\n \"#d09214\",\n \"#50a4e9\",\n \"#cc83e3\",\n \"#00b298\",\n \"#adb0bb\",\n]\nbackground = \"#1a1d23\"\nbrights = [\n \"#576176\",\n \"#faa5ab\",\n \"#a5cd84\",\n \"#efbd58\",\n \"#8dc3f1\",\n \"#deaeed\",\n \"#27ffdf\",\n \"#caccd3\",\n]\ncursor_bg = \"#caccd3\"\ncursor_border = \"#caccd3\"\ncursor_fg = \"#1a1d23\"\nforeground = \"#9b9fa9\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Astrodark (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"nightly builds only\"\n"), ("astromouse (terminal.sexy)", "[colors]\nansi = [\n \"#1c1c1c\",\n \"#d770af\",\n \"#9acc79\",\n \"#d0d26b\",\n \"#77b6c5\",\n \"#a488d9\",\n \"#7fcab3\",\n \"#8d8d8d\",\n]\nbackground = \"#000000\"\nbrights = [\n \"#3d3a3a\",\n \"#d28abf\",\n \"#8fb676\",\n \"#c8bc45\",\n \"#8fa7b9\",\n \"#bd89de\",\n \"#6ec2a8\",\n \"#dad3d3\",\n]\nforeground = \"#ffffff\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nauthor = \"\"\nname = \"astromouse (terminal.sexy)\"\norigin_url = \"https://github.com/stayradiated/terminal.sexy\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), ("Atelier Cave (base16)", "[colors]\nansi = [\n \"#19171c\",\n \"#be4678\",\n \"#2a9292\",\n \"#a06e3b\",\n \"#576ddb\",\n \"#955ae7\",\n \"#398bc6\",\n \"#8b8792\",\n]\nbackground = \"#19171c\"\nbrights = [\n \"#655f6d\",\n \"#be4678\",\n \"#2a9292\",\n \"#a06e3b\",\n \"#576ddb\",\n \"#955ae7\",\n \"#398bc6\",\n \"#efecf4\",\n]\ncursor_bg = \"#8b8792\"\ncursor_border = \"#8b8792\"\ncursor_fg = \"#19171c\"\nforeground = \"#8b8792\"\nselection_bg = \"#8b8792\"\nselection_fg = \"#19171c\"\n\n[colors.indexed]\n16 = \"#aa573c\"\n17 = \"#bf40bf\"\n18 = \"#26232a\"\n19 = \"#585260\"\n20 = \"#7e7887\"\n21 = \"#e2dfe7\"\n\n[metadata]\naliases = []\nauthor = \"Bram de Haan (http://atelierbramdehaan.nl)\"\nname = \"Atelier Cave (base16)\"\norigin_url = \"https://github.com/atelierbram/base16-atelier-schemes\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), ("Atelier Cave Light (base16)", "[colors]\nansi = [\n \"#efecf4\",\n \"#be4678\",\n \"#2a9292\",\n \"#a06e3b\",\n \"#576ddb\",\n \"#955ae7\",\n \"#398bc6\",\n \"#585260\",\n]\nbackground = \"#efecf4\"\nbrights = [\n \"#7e7887\",\n \"#be4678\",\n \"#2a9292\",\n \"#a06e3b\",\n \"#576ddb\",\n \"#955ae7\",\n \"#398bc6\",\n \"#19171c\",\n]\ncursor_bg = \"#585260\"\ncursor_border = \"#585260\"\ncursor_fg = \"#efecf4\"\nforeground = \"#585260\"\nselection_bg = \"#585260\"\nselection_fg = \"#efecf4\"\n\n[colors.indexed]\n16 = \"#aa573c\"\n17 = \"#bf40bf\"\n18 = \"#e2dfe7\"\n19 = \"#8b8792\"\n20 = \"#655f6d\"\n21 = \"#26232a\"\n\n[metadata]\naliases = []\nauthor = \"Bram de Haan (http://atelierbramdehaan.nl)\"\nname = \"Atelier Cave Light (base16)\"\norigin_url = \"https://github.com/atelierbram/base16-atelier-schemes\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), @@ -123,6 +124,7 @@ pub const SCHEMES: [(&'static str, &'static str); 993] = [ ("BlulocoLight", "[colors]\nansi = [\n \"#373a41\",\n \"#d52753\",\n \"#23974a\",\n \"#df631c\",\n \"#275fe4\",\n \"#823ff1\",\n \"#27618d\",\n \"#babbc2\",\n]\nbackground = \"#f9f9f9\"\nbrights = [\n \"#676a77\",\n \"#ff6480\",\n \"#3cbc66\",\n \"#c5a332\",\n \"#0099e1\",\n \"#ce33c0\",\n \"#6d93bb\",\n \"#d3d3d3\",\n]\ncursor_bg = \"#f32759\"\ncursor_border = \"#f32759\"\ncursor_fg = \"#ffffff\"\nforeground = \"#373a41\"\nselection_bg = \"#daf0ff\"\nselection_fg = \"#373a41\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"BlulocoLight\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("Borland", "[colors]\nansi = [\n \"#4f4f4f\",\n \"#ff6c60\",\n \"#a8ff60\",\n \"#ffffb6\",\n \"#96cbfe\",\n \"#ff73fd\",\n \"#c6c5fe\",\n \"#eeeeee\",\n]\nbackground = \"#0000a4\"\nbrights = [\n \"#7c7c7c\",\n \"#ffb6b0\",\n \"#ceffac\",\n \"#ffffcc\",\n \"#b5dcff\",\n \"#ff9cfe\",\n \"#dfdffe\",\n \"#ffffff\",\n]\ncursor_bg = \"#ffa560\"\ncursor_border = \"#ffa560\"\ncursor_fg = \"#ffffff\"\nforeground = \"#ffff4e\"\nselection_bg = \"#a4a4a4\"\nselection_fg = \"#0000a4\"\n\n[colors.indexed]\n\n[metadata]\naliases = [\"Borland (Gogh)\"]\nname = \"Borland\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("Borland (Gogh)", "[colors]\nansi = [\n \"#4f4f4f\",\n \"#ff6c60\",\n \"#a8ff60\",\n \"#ffffb6\",\n \"#96cbfe\",\n \"#ff73fd\",\n \"#c6c5fe\",\n \"#eeeeee\",\n]\nbackground = \"#0000a4\"\nbrights = [\n \"#7c7c7c\",\n \"#ffb6b0\",\n \"#ceffac\",\n \"#ffffcc\",\n \"#b5dcff\",\n \"#ff9cfe\",\n \"#dfdffe\",\n \"#ffffff\",\n]\ncursor_bg = \"#ffff4e\"\ncursor_border = \"#ffff4e\"\ncursor_fg = \"#0000a4\"\nforeground = \"#ffff4e\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Borland (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20230712-072601-f4abf8fd\"\n"), +("Breadog (Gogh)", "[colors]\nansi = [\n \"#362c24\",\n \"#b10b00\",\n \"#007232\",\n \"#8b4c00\",\n \"#005cb4\",\n \"#9b0097\",\n \"#006a78\",\n \"#d4c3b7\",\n]\nbackground = \"#f1ebe6\"\nbrights = [\n \"#514337\",\n \"#de1100\",\n \"#008f40\",\n \"#ae6000\",\n \"#0074e1\",\n \"#c300bd\",\n \"#008697\",\n \"#eae1da\",\n]\ncursor_bg = \"#362c24\"\ncursor_border = \"#362c24\"\ncursor_fg = \"#f1ebe6\"\nforeground = \"#362c24\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Breadog (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"nightly builds only\"\n"), ("Breath (Gogh)", "[colors]\nansi = [\n \"#1e2229\",\n \"#ed1515\",\n \"#44853a\",\n \"#f67400\",\n \"#1d99f3\",\n \"#9b59b6\",\n \"#1abc9c\",\n \"#fcfcfc\",\n]\nbackground = \"#1e2229\"\nbrights = [\n \"#7f8c8d\",\n \"#c0392b\",\n \"#55a649\",\n \"#fdbc4b\",\n \"#3daee9\",\n \"#8e44ad\",\n \"#16a085\",\n \"#ffffff\",\n]\ncursor_bg = \"#17a88b\"\ncursor_border = \"#17a88b\"\ncursor_fg = \"#1e2229\"\nforeground = \"#17a88b\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Breath (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20230320-124340-559cb7b0\"\n"), ("Breath Darker (Gogh)", "[colors]\nansi = [\n \"#1e2229\",\n \"#ed1515\",\n \"#44853a\",\n \"#f67400\",\n \"#1d99f3\",\n \"#9b59b6\",\n \"#1abc9c\",\n \"#fcfcfc\",\n]\nbackground = \"#080d14\"\nbrights = [\n \"#7f8c8d\",\n \"#c0392b\",\n \"#55a649\",\n \"#fdbc4b\",\n \"#3daee9\",\n \"#8e44ad\",\n \"#16a085\",\n \"#ffffff\",\n]\ncursor_bg = \"#17a88b\"\ncursor_border = \"#17a88b\"\ncursor_fg = \"#080d14\"\nforeground = \"#17a88b\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Breath Darker (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20230320-124340-559cb7b0\"\n"), ("Breath Light (Gogh)", "[colors]\nansi = [\n \"#e8e8e8\",\n \"#ed1515\",\n \"#c0392b\",\n \"#f67400\",\n \"#1d99f3\",\n \"#9b59b6\",\n \"#1abc9c\",\n \"#fcfcfc\",\n]\nbackground = \"#e8e8e8\"\nbrights = [\n \"#7f8c8d\",\n \"#c0392b\",\n \"#55a649\",\n \"#fdbc4b\",\n \"#3daee9\",\n \"#8e44ad\",\n \"#16a085\",\n \"#ffffff\",\n]\ncursor_bg = \"#292f34\"\ncursor_border = \"#292f34\"\ncursor_fg = \"#e8e8e8\"\nforeground = \"#292f34\"\n\n[colors.indexed]\n\n[metadata]\naliases = [\"BreathLight (Gogh)\"]\nname = \"Breath Light (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20230320-124340-559cb7b0\"\n"), @@ -183,6 +185,7 @@ pub const SCHEMES: [(&'static str, &'static str); 993] = [ ("Ciapre", "[colors]\nansi = [\n \"#181818\",\n \"#810009\",\n \"#48513b\",\n \"#cc8b3f\",\n \"#576d8c\",\n \"#724d7c\",\n \"#5c4f4b\",\n \"#aea47f\",\n]\nbackground = \"#191c27\"\nbrights = [\n \"#555555\",\n \"#ac3835\",\n \"#a6a75d\",\n \"#dcdf7c\",\n \"#3097c6\",\n \"#d33061\",\n \"#f3dbb2\",\n \"#f4f4f4\",\n]\ncursor_bg = \"#92805b\"\ncursor_border = \"#92805b\"\ncursor_fg = \"#181818\"\nforeground = \"#aea47a\"\nselection_bg = \"#172539\"\nselection_fg = \"#aea47f\"\n\n[colors.indexed]\n\n[metadata]\naliases = [\"Ciapre (Gogh)\"]\nname = \"Ciapre\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("Ciapre (Gogh)", "[colors]\nansi = [\n \"#181818\",\n \"#810009\",\n \"#48513b\",\n \"#cc8b3f\",\n \"#576d8c\",\n \"#724d7c\",\n \"#5c4f4b\",\n \"#aea47f\",\n]\nbackground = \"#191c27\"\nbrights = [\n \"#555555\",\n \"#ac3835\",\n \"#a6a75d\",\n \"#dcdf7c\",\n \"#3097c6\",\n \"#d33061\",\n \"#f3dbb2\",\n \"#f4f4f4\",\n]\ncursor_bg = \"#aea47a\"\ncursor_border = \"#aea47a\"\ncursor_fg = \"#191c27\"\nforeground = \"#aea47a\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Ciapre (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20230712-072601-f4abf8fd\"\n"), ("Circus (base16)", "[colors]\nansi = [\n \"#191919\",\n \"#dc657d\",\n \"#84b97c\",\n \"#c3ba63\",\n \"#639ee4\",\n \"#b888e2\",\n \"#4bb1a7\",\n \"#a7a7a7\",\n]\nbackground = \"#191919\"\nbrights = [\n \"#5f5a60\",\n \"#dc657d\",\n \"#84b97c\",\n \"#c3ba63\",\n \"#639ee4\",\n \"#b888e2\",\n \"#4bb1a7\",\n \"#ffffff\",\n]\ncursor_bg = \"#a7a7a7\"\ncursor_border = \"#a7a7a7\"\ncursor_fg = \"#191919\"\nforeground = \"#a7a7a7\"\nselection_bg = \"#a7a7a7\"\nselection_fg = \"#191919\"\n\n[colors.indexed]\n16 = \"#4bb1a7\"\n17 = \"#b888e2\"\n18 = \"#202020\"\n19 = \"#303030\"\n20 = \"#505050\"\n21 = \"#808080\"\n\n[metadata]\naliases = []\nauthor = \"Stephan Boyer (https://github.com/stepchowfun) and Esther Wang (https://github.com/ewang12)\"\nname = \"Circus (base16)\"\norigin_url = \"https://github.com/stepchowfun/base16-circus-scheme\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), +("City Lights (Gogh)", "[colors]\nansi = [\n \"#41505e\",\n \"#d95468\",\n \"#8bd49c\",\n \"#ebbf83\",\n \"#539afc\",\n \"#b62d65\",\n \"#70e1e8\",\n \"#ffffff\",\n]\nbackground = \"#171d23\"\nbrights = [\n \"#41505e\",\n \"#d95468\",\n \"#8bd49c\",\n \"#ebbf83\",\n \"#539afc\",\n \"#b62d65\",\n \"#70e1e8\",\n \"#ffffff\",\n]\ncursor_bg = \"#008b94\"\ncursor_border = \"#008b94\"\ncursor_fg = \"#171d23\"\nforeground = \"#ffffff\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"City Lights (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"nightly builds only\"\n"), ("City Streets (terminal.sexy)", "[colors]\nansi = [\n \"#201e24\",\n \"#2d2b30\",\n \"#3f3d40\",\n \"#413c3e\",\n \"#423e41\",\n \"#4e4a4b\",\n \"#6e6765\",\n \"#837e81\",\n]\nbackground = \"#000000\"\nbrights = [\n \"#837c78\",\n \"#89827d\",\n \"#a7a099\",\n \"#c2bec1\",\n \"#c3bcb2\",\n \"#cbc5ba\",\n \"#e3ddd2\",\n \"#efe8dc\",\n]\nforeground = \"#d3d3d3\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nauthor = \"dkeg\"\nname = \"City Streets (terminal.sexy)\"\norigin_url = \"https://github.com/stayradiated/terminal.sexy\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), ("Classic Dark (base16)", "[colors]\nansi = [\n \"#151515\",\n \"#ac4142\",\n \"#90a959\",\n \"#f4bf75\",\n \"#6a9fb5\",\n \"#aa759f\",\n \"#75b5aa\",\n \"#d0d0d0\",\n]\nbackground = \"#151515\"\nbrights = [\n \"#505050\",\n \"#ac4142\",\n \"#90a959\",\n \"#f4bf75\",\n \"#6a9fb5\",\n \"#aa759f\",\n \"#75b5aa\",\n \"#f5f5f5\",\n]\ncursor_bg = \"#d0d0d0\"\ncursor_border = \"#d0d0d0\"\ncursor_fg = \"#151515\"\nforeground = \"#d0d0d0\"\nselection_bg = \"#d0d0d0\"\nselection_fg = \"#151515\"\n\n[colors.indexed]\n16 = \"#d28445\"\n17 = \"#8f5536\"\n18 = \"#202020\"\n19 = \"#303030\"\n20 = \"#b0b0b0\"\n21 = \"#e0e0e0\"\n\n[metadata]\naliases = [\"Default (dark) (terminal.sexy)\"]\nauthor = \"Jason Heeris (http://heeris.id.au)\"\nname = \"Classic Dark (base16)\"\norigin_url = \"https://github.com/detly/base16-classic-scheme\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), ("Classic Light (base16)", "[colors]\nansi = [\n \"#f5f5f5\",\n \"#ac4142\",\n \"#90a959\",\n \"#f4bf75\",\n \"#6a9fb5\",\n \"#aa759f\",\n \"#75b5aa\",\n \"#303030\",\n]\nbackground = \"#f5f5f5\"\nbrights = [\n \"#b0b0b0\",\n \"#ac4142\",\n \"#90a959\",\n \"#f4bf75\",\n \"#6a9fb5\",\n \"#aa759f\",\n \"#75b5aa\",\n \"#151515\",\n]\ncursor_bg = \"#303030\"\ncursor_border = \"#303030\"\ncursor_fg = \"#f5f5f5\"\nforeground = \"#303030\"\nselection_bg = \"#303030\"\nselection_fg = \"#f5f5f5\"\n\n[colors.indexed]\n16 = \"#d28445\"\n17 = \"#8f5536\"\n18 = \"#e0e0e0\"\n19 = \"#d0d0d0\"\n20 = \"#505050\"\n21 = \"#202020\"\n\n[metadata]\naliases = []\nauthor = \"Jason Heeris (http://heeris.id.au)\"\nname = \"Classic Light (base16)\"\norigin_url = \"https://github.com/detly/base16-classic-scheme\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), @@ -207,7 +210,7 @@ pub const SCHEMES: [(&'static str, &'static str); 993] = [ ("CrayonPonyFish", "[colors]\nansi = [\n \"#2b1b1d\",\n \"#91002b\",\n \"#579524\",\n \"#ab311b\",\n \"#8c87b0\",\n \"#692f50\",\n \"#e8a866\",\n \"#68525a\",\n]\nbackground = \"#150707\"\nbrights = [\n \"#3d2b2e\",\n \"#c5255d\",\n \"#8dff57\",\n \"#c8381d\",\n \"#cfc9ff\",\n \"#fc6cba\",\n \"#ffceaf\",\n \"#b0949d\",\n]\ncursor_bg = \"#68525a\"\ncursor_border = \"#68525a\"\ncursor_fg = \"#140707\"\nforeground = \"#68525a\"\nselection_bg = \"#2b1b1d\"\nselection_fg = \"#69525a\"\n\n[colors.indexed]\n\n[metadata]\naliases = [\"Crayon Pony Fish (Gogh)\"]\nname = \"CrayonPonyFish\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("Cupcake (base16)", "[colors]\nansi = [\n \"#fbf1f2\",\n \"#d57e85\",\n \"#a3b367\",\n \"#dcb16c\",\n \"#7297b9\",\n \"#bb99b4\",\n \"#69a9a7\",\n \"#8b8198\",\n]\nbackground = \"#fbf1f2\"\nbrights = [\n \"#bfb9c6\",\n \"#d57e85\",\n \"#a3b367\",\n \"#dcb16c\",\n \"#7297b9\",\n \"#bb99b4\",\n \"#69a9a7\",\n \"#585062\",\n]\ncursor_bg = \"#8b8198\"\ncursor_border = \"#8b8198\"\ncursor_fg = \"#fbf1f2\"\nforeground = \"#8b8198\"\nselection_bg = \"#8b8198\"\nselection_fg = \"#fbf1f2\"\n\n[colors.indexed]\n16 = \"#ebb790\"\n17 = \"#baa58c\"\n18 = \"#f2f1f4\"\n19 = \"#d8d5dd\"\n20 = \"#a59daf\"\n21 = \"#72677e\"\n\n[metadata]\naliases = []\nauthor = \"Chris Kempson (http://chriskempson.com)\"\nname = \"Cupcake (base16)\"\norigin_url = \"https://github.com/chriskempson/base16-default-schemes\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), ("Cupertino (base16)", "[colors]\nansi = [\n \"#ffffff\",\n \"#c41a15\",\n \"#007400\",\n \"#826b28\",\n \"#0000ff\",\n \"#a90d91\",\n \"#318495\",\n \"#404040\",\n]\nbackground = \"#ffffff\"\nbrights = [\n \"#808080\",\n \"#c41a15\",\n \"#007400\",\n \"#826b28\",\n \"#0000ff\",\n \"#a90d91\",\n \"#318495\",\n \"#5e5e5e\",\n]\ncursor_bg = \"#404040\"\ncursor_border = \"#404040\"\ncursor_fg = \"#ffffff\"\nforeground = \"#404040\"\nselection_bg = \"#404040\"\nselection_fg = \"#ffffff\"\n\n[colors.indexed]\n16 = \"#eb8500\"\n17 = \"#826b28\"\n18 = \"#c0c0c0\"\n19 = \"#c0c0c0\"\n20 = \"#808080\"\n21 = \"#404040\"\n\n[metadata]\naliases = []\nauthor = \"Defman21\"\nname = \"Cupertino (base16)\"\norigin_url = \"https://github.com/Defman21/base16-cupertino\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), -("CutiePro", "[colors]\nansi = [\n \"#000000\",\n \"#f56e7f\",\n \"#bec975\",\n \"#f58669\",\n \"#42d9c5\",\n \"#d286b7\",\n \"#37cb8a\",\n \"#d5c3c3\",\n]\nbackground = \"#181818\"\nbrights = [\n \"#373b41\",\n \"#e5a1a3\",\n \"#e8d6a7\",\n \"#f1bb79\",\n \"#80c5de\",\n \"#b294bb\",\n \"#9dccbb\",\n \"#ffffff\",\n]\ncursor_bg = \"#efc4cd\"\ncursor_border = \"#efc4cd\"\ncursor_fg = \"#181818\"\nforeground = \"#d5d0c9\"\nselection_bg = \"#363636\"\nselection_fg = \"#d5d0c9\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"CutiePro\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"nightly builds only\"\n"), +("CutiePro", "[colors]\nansi = [\n \"#000000\",\n \"#f56e7f\",\n \"#bec975\",\n \"#f58669\",\n \"#42d9c5\",\n \"#d286b7\",\n \"#37cb8a\",\n \"#d5c3c3\",\n]\nbackground = \"#181818\"\nbrights = [\n \"#88847f\",\n \"#e5a1a3\",\n \"#e8d6a7\",\n \"#f1bb79\",\n \"#80c5de\",\n \"#b294bb\",\n \"#9dccbb\",\n \"#ffffff\",\n]\ncursor_bg = \"#efc4cd\"\ncursor_border = \"#efc4cd\"\ncursor_fg = \"#181818\"\nforeground = \"#d5d0c9\"\nselection_bg = \"#363636\"\nselection_fg = \"#d5d0c9\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"CutiePro\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"nightly builds only\"\n"), ("Cyberdyne", "[colors]\nansi = [\n \"#080808\",\n \"#ff8373\",\n \"#00c172\",\n \"#d2a700\",\n \"#0071cf\",\n \"#ff90fe\",\n \"#6bffdd\",\n \"#f1f1f1\",\n]\nbackground = \"#151144\"\nbrights = [\n \"#2e2e2e\",\n \"#ffc4be\",\n \"#d6fcba\",\n \"#fffed5\",\n \"#c2e3ff\",\n \"#ffb2fe\",\n \"#e6e7fe\",\n \"#ffffff\",\n]\ncursor_bg = \"#00ff9c\"\ncursor_border = \"#00ff9c\"\ncursor_fg = \"#ffffff\"\nforeground = \"#00ff92\"\nselection_bg = \"#454d96\"\nselection_fg = \"#f4f4f4\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Cyberdyne\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("cyberpunk", "[colors]\nansi = [\n \"#000000\",\n \"#ff7092\",\n \"#00fbac\",\n \"#fffa6a\",\n \"#00bfff\",\n \"#df95ff\",\n \"#86cbfe\",\n \"#ffffff\",\n]\nbackground = \"#332a57\"\nbrights = [\n \"#000000\",\n \"#ff8aa4\",\n \"#21f6bc\",\n \"#fff787\",\n \"#1bccfd\",\n \"#e6aefe\",\n \"#99d6fc\",\n \"#ffffff\",\n]\ncursor_bg = \"#21f6bc\"\ncursor_border = \"#21f6bc\"\ncursor_fg = \"#ffffff\"\nforeground = \"#e6e6e6\"\nselection_bg = \"#c1deff\"\nselection_fg = \"#000000\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"cyberpunk\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("DanQing (base16)", "[colors]\nansi = [\n \"#2d302f\",\n \"#f9906f\",\n \"#8ab361\",\n \"#f0c239\",\n \"#b0a4e3\",\n \"#cca4e3\",\n \"#30dff3\",\n \"#e0f0ef\",\n]\nbackground = \"#2d302f\"\nbrights = [\n \"#9da8a3\",\n \"#f9906f\",\n \"#8ab361\",\n \"#f0c239\",\n \"#b0a4e3\",\n \"#cca4e3\",\n \"#30dff3\",\n \"#fcfefd\",\n]\ncursor_bg = \"#e0f0ef\"\ncursor_border = \"#e0f0ef\"\ncursor_fg = \"#2d302f\"\nforeground = \"#e0f0ef\"\nselection_bg = \"#e0f0ef\"\nselection_fg = \"#2d302f\"\n\n[colors.indexed]\n16 = \"#b38a61\"\n17 = \"#ca6924\"\n18 = \"#434846\"\n19 = \"#5a605d\"\n20 = \"#cad8d2\"\n21 = \"#ecf6f2\"\n\n[metadata]\naliases = []\nauthor = \"Wenhan Zhu (Cosmos) (zhuwenhan950913@gmail.com)\"\nname = \"DanQing (base16)\"\norigin_url = \"https://github.com/CosmosAtlas/base16-danqing-scheme\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), @@ -467,6 +470,7 @@ pub const SCHEMES: [(&'static str, &'static str); 993] = [ ("Ic Orange Ppl (Gogh)", "[colors]\nansi = [\n \"#000000\",\n \"#c13900\",\n \"#a4a900\",\n \"#caaf00\",\n \"#bd6d00\",\n \"#fc5e00\",\n \"#f79500\",\n \"#ffc88a\",\n]\nbackground = \"#262626\"\nbrights = [\n \"#6a4f2a\",\n \"#ff8c68\",\n \"#f6ff40\",\n \"#ffe36e\",\n \"#ffbe55\",\n \"#fc874f\",\n \"#c69752\",\n \"#fafaff\",\n]\ncursor_bg = \"#ffcb83\"\ncursor_border = \"#ffcb83\"\ncursor_fg = \"#262626\"\nforeground = \"#ffcb83\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Ic Orange Ppl (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20230712-072601-f4abf8fd\"\n"), ("IC_Green_PPL", "[colors]\nansi = [\n \"#014401\",\n \"#ff2736\",\n \"#41a638\",\n \"#76a831\",\n \"#2ec3b9\",\n \"#50a096\",\n \"#3ca078\",\n \"#e6fef2\",\n]\nbackground = \"#2c2c2c\"\nbrights = [\n \"#035c03\",\n \"#b4fa5c\",\n \"#aefb86\",\n \"#dafa87\",\n \"#2efaeb\",\n \"#50fafa\",\n \"#3cfac8\",\n \"#e0f1dc\",\n]\ncursor_bg = \"#47fa6b\"\ncursor_border = \"#47fa6b\"\ncursor_fg = \"#292929\"\nforeground = \"#e0f1dc\"\nselection_bg = \"#116b41\"\nselection_fg = \"#e0f1dc\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"IC_Green_PPL\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("IC_Orange_PPL", "[colors]\nansi = [\n \"#000000\",\n \"#c13900\",\n \"#a4a900\",\n \"#caaf00\",\n \"#bd6d00\",\n \"#fc5e00\",\n \"#f79500\",\n \"#ffc88a\",\n]\nbackground = \"#262626\"\nbrights = [\n \"#6a4f2a\",\n \"#ff8c68\",\n \"#f6ff40\",\n \"#ffe36e\",\n \"#ffbe55\",\n \"#fc874f\",\n \"#c69752\",\n \"#fafaff\",\n]\ncursor_bg = \"#fc531d\"\ncursor_border = \"#fc531d\"\ncursor_fg = \"#ffc88a\"\nforeground = \"#ffcb83\"\nselection_bg = \"#c14020\"\nselection_fg = \"#ffc88a\"\n\n[colors.indexed]\n\n[metadata]\naliases = [\n \"ICOrangePPL (Gogh)\",\n \"Ic Orange Ppl (Gogh)\",\n]\nname = \"IC_Orange_PPL\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), +("Iceberg (Gogh)", "[colors]\nansi = [\n \"#161821\",\n \"#e27878\",\n \"#b4be82\",\n \"#e2a478\",\n \"#84a0c6\",\n \"#a093c7\",\n \"#89b8c2\",\n \"#c6c8d1\",\n]\nbackground = \"#161821\"\nbrights = [\n \"#6b7089\",\n \"#e98989\",\n \"#c0ca8e\",\n \"#e9b189\",\n \"#91acd1\",\n \"#ada0d3\",\n \"#95c4ce\",\n \"#d2d4de\",\n]\ncursor_bg = \"#d2d4de\"\ncursor_border = \"#d2d4de\"\ncursor_fg = \"#161821\"\nforeground = \"#c6c8d1\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Iceberg (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"nightly builds only\"\n"), ("iceberg-dark", "[colors]\nansi = [\n \"#1e2132\",\n \"#e27878\",\n \"#b4be82\",\n \"#e2a478\",\n \"#84a0c6\",\n \"#a093c7\",\n \"#89b8c2\",\n \"#c6c8d1\",\n]\nbackground = \"#161821\"\nbrights = [\n \"#6b7089\",\n \"#e98989\",\n \"#c0ca8e\",\n \"#e9b189\",\n \"#91acd1\",\n \"#ada0d3\",\n \"#95c4ce\",\n \"#d2d4de\",\n]\ncursor_bg = \"#c6c8d1\"\ncursor_border = \"#c6c8d1\"\ncursor_fg = \"#161821\"\nforeground = \"#c6c8d1\"\nselection_bg = \"#c6c8d1\"\nselection_fg = \"#161821\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"iceberg-dark\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("iceberg-light", "[colors]\nansi = [\n \"#dcdfe7\",\n \"#cc517a\",\n \"#668e3d\",\n \"#c57339\",\n \"#2d539e\",\n \"#7759b4\",\n \"#3f83a6\",\n \"#33374c\",\n]\nbackground = \"#e8e9ec\"\nbrights = [\n \"#8389a3\",\n \"#cc3768\",\n \"#598030\",\n \"#b6662d\",\n \"#22478e\",\n \"#6845ad\",\n \"#327698\",\n \"#262a3f\",\n]\ncursor_bg = \"#33374c\"\ncursor_border = \"#33374c\"\ncursor_fg = \"#e8e9ec\"\nforeground = \"#33374c\"\nselection_bg = \"#33374c\"\nselection_fg = \"#e8e9ec\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"iceberg-light\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("Icy Dark (base16)", "[colors]\nansi = [\n \"#021012\",\n \"#16c1d9\",\n \"#4dd0e1\",\n \"#80deea\",\n \"#00bcd4\",\n \"#00acc1\",\n \"#26c6da\",\n \"#095b67\",\n]\nbackground = \"#021012\"\nbrights = [\n \"#052e34\",\n \"#16c1d9\",\n \"#4dd0e1\",\n \"#80deea\",\n \"#00bcd4\",\n \"#00acc1\",\n \"#26c6da\",\n \"#109cb0\",\n]\ncursor_bg = \"#095b67\"\ncursor_border = \"#095b67\"\ncursor_fg = \"#021012\"\nforeground = \"#095b67\"\nselection_bg = \"#095b67\"\nselection_fg = \"#021012\"\n\n[colors.indexed]\n16 = \"#b3ebf2\"\n17 = \"#0097a7\"\n18 = \"#031619\"\n19 = \"#041f23\"\n20 = \"#064048\"\n21 = \"#0c7c8c\"\n\n[metadata]\naliases = []\nauthor = \"icyphox (https://icyphox.ga)\"\nname = \"Icy Dark (base16)\"\norigin_url = \"https://github.com/icyphox/base16-icy-scheme\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), @@ -513,6 +517,7 @@ pub const SCHEMES: [(&'static str, &'static str); 993] = [ ("Kokuban (Gogh)", "[colors]\nansi = [\n \"#2e8744\",\n \"#d84e4c\",\n \"#95da5a\",\n \"#d6e264\",\n \"#4b9ed7\",\n \"#945fc5\",\n \"#d89b25\",\n \"#d8e2d7\",\n]\nbackground = \"#0d4a08\"\nbrights = [\n \"#34934f\",\n \"#ff4f59\",\n \"#aff56a\",\n \"#fcff75\",\n \"#57aeff\",\n \"#ae63e9\",\n \"#ffaa2b\",\n \"#fffefe\",\n]\ncursor_bg = \"#d8e2d7\"\ncursor_border = \"#d8e2d7\"\ncursor_fg = \"#0d4a08\"\nforeground = \"#d8e2d7\"\n\n[colors.indexed]\n\n[metadata]\naliases = [\"kokuban (Gogh)\"]\nname = \"Kokuban (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), ("Kolorit", "[colors]\nansi = [\n \"#1d1a1e\",\n \"#ff5b82\",\n \"#47d7a1\",\n \"#e8e562\",\n \"#5db4ee\",\n \"#da6cda\",\n \"#57e9eb\",\n \"#ededed\",\n]\nbackground = \"#1d1a1e\"\nbrights = [\n \"#1d1a1e\",\n \"#ff5b82\",\n \"#47d7a1\",\n \"#e8e562\",\n \"#5db4ee\",\n \"#da6cda\",\n \"#57e9eb\",\n \"#ededed\",\n]\ncursor_bg = \"#c7c7c7\"\ncursor_border = \"#c7c7c7\"\ncursor_fg = \"#ffffff\"\nforeground = \"#efecec\"\nselection_bg = \"#e1925c\"\nselection_fg = \"#1d1a1e\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Kolorit\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("Konsolas", "[colors]\nansi = [\n \"#000000\",\n \"#aa1717\",\n \"#18b218\",\n \"#ebae1f\",\n \"#2323a5\",\n \"#ad1edc\",\n \"#42b0c8\",\n \"#c8c1c1\",\n]\nbackground = \"#060606\"\nbrights = [\n \"#7b716e\",\n \"#ff4141\",\n \"#5fff5f\",\n \"#ffff55\",\n \"#4b4bff\",\n \"#ff54ff\",\n \"#69ffff\",\n \"#ffffff\",\n]\ncursor_bg = \"#c8c1c1\"\ncursor_border = \"#c8c1c1\"\ncursor_fg = \"#060606\"\nforeground = \"#c8c1c1\"\nselection_bg = \"#060606\"\nselection_fg = \"#c8c1c1\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Konsolas\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), +("kurokula", "[colors]\nansi = [\n \"#333333\",\n \"#b66056\",\n \"#85b1a9\",\n \"#dbbb43\",\n \"#6890d7\",\n \"#887aa3\",\n \"#837369\",\n \"#ddd0c4\",\n]\nbackground = \"#141515\"\nbrights = [\n \"#515151\",\n \"#ffc663\",\n \"#c1ffae\",\n \"#fff700\",\n \"#a1d9ff\",\n \"#a994ff\",\n \"#f9cfb9\",\n \"#ffffff\",\n]\ncursor_bg = \"#702420\"\ncursor_border = \"#702420\"\ncursor_fg = \"#fefbf3\"\nforeground = \"#ddd0c4\"\nselection_bg = \"#515151\"\nselection_fg = \"#ffc663\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"kurokula\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"nightly builds only\"\n"), ("Lab Fox", "[colors]\nansi = [\n \"#2e2e2e\",\n \"#fc6d26\",\n \"#3eb383\",\n \"#fca121\",\n \"#db3b21\",\n \"#380d75\",\n \"#6e49cb\",\n \"#ffffff\",\n]\nbackground = \"#2e2e2e\"\nbrights = [\n \"#464646\",\n \"#ff6517\",\n \"#53eaa8\",\n \"#fca013\",\n \"#db501f\",\n \"#441090\",\n \"#7d53e7\",\n \"#ffffff\",\n]\ncursor_bg = \"#7f7f7f\"\ncursor_border = \"#7f7f7f\"\ncursor_fg = \"#7f7f7f\"\nforeground = \"#ffffff\"\nselection_bg = \"#cb392e\"\nselection_fg = \"#ffffff\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Lab Fox\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("Laser", "[colors]\nansi = [\n \"#626262\",\n \"#ff8373\",\n \"#b4fb73\",\n \"#09b4bd\",\n \"#fed300\",\n \"#ff90fe\",\n \"#d1d1fe\",\n \"#f1f1f1\",\n]\nbackground = \"#030d18\"\nbrights = [\n \"#8f8f8f\",\n \"#ffc4be\",\n \"#d6fcba\",\n \"#fffed5\",\n \"#f92883\",\n \"#ffb2fe\",\n \"#e6e7fe\",\n \"#ffffff\",\n]\ncursor_bg = \"#00ff9c\"\ncursor_border = \"#00ff9c\"\ncursor_fg = \"#ffffff\"\nforeground = \"#f106e3\"\nselection_bg = \"#2e206a\"\nselection_fg = \"#f4f4f4\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Laser\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("Laserwave (Gogh)", "[colors]\nansi = [\n \"#39243a\",\n \"#eb64b9\",\n \"#afd686\",\n \"#feae87\",\n \"#40b4c4\",\n \"#b381c5\",\n \"#215969\",\n \"#91889b\",\n]\nbackground = \"#1f1926\"\nbrights = [\n \"#716485\",\n \"#fc2377\",\n \"#50fa7b\",\n \"#ffe261\",\n \"#74dfc4\",\n \"#6d75e0\",\n \"#b4dce7\",\n \"#ffffff\",\n]\ncursor_bg = \"#c7c7c7\"\ncursor_border = \"#c7c7c7\"\ncursor_fg = \"#1f1926\"\nforeground = \"#e0e0e0\"\n\n[colors.indexed]\n\n[metadata]\naliases = [\"laserwave (Gogh)\"]\nname = \"Laserwave (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), @@ -689,6 +694,7 @@ pub const SCHEMES: [(&'static str, &'static str); 993] = [ ("Panda (Gogh)", "[colors]\nansi = [\n \"#1f1f20\",\n \"#fb055a\",\n \"#26ffd4\",\n \"#fdaa5a\",\n \"#5c9fff\",\n \"#fc59a6\",\n \"#26ffd4\",\n \"#f0f0f0\",\n]\nbackground = \"#1d1e20\"\nbrights = [\n \"#5c6370\",\n \"#fb055a\",\n \"#26ffd4\",\n \"#febe7e\",\n \"#55adff\",\n \"#fd95d0\",\n \"#26ffd4\",\n \"#f0f0f0\",\n]\ncursor_bg = \"#f0f0f0\"\ncursor_border = \"#f0f0f0\"\ncursor_fg = \"#1d1e20\"\nforeground = \"#f0f0f0\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Panda (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), ("Pandora", "[colors]\nansi = [\n \"#000000\",\n \"#ff4242\",\n \"#74af68\",\n \"#ffad29\",\n \"#338f86\",\n \"#9414e6\",\n \"#23d7d7\",\n \"#e2e2e2\",\n]\nbackground = \"#141e43\"\nbrights = [\n \"#3f5648\",\n \"#ff3242\",\n \"#74cd68\",\n \"#ffb929\",\n \"#23d7d7\",\n \"#ff37ff\",\n \"#00ede1\",\n \"#ffffff\",\n]\ncursor_bg = \"#43d58e\"\ncursor_border = \"#43d58e\"\ncursor_fg = \"#ffffff\"\nforeground = \"#e1e1e1\"\nselection_bg = \"#2d37ff\"\nselection_fg = \"#82e0ff\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Pandora\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("Panels (terminal.sexy)", "[colors]\nansi = [\n \"#191927\",\n \"#282f5e\",\n \"#2b4593\",\n \"#344276\",\n \"#4e3a4f\",\n \"#61372f\",\n \"#6b484c\",\n \"#744537\",\n]\nbackground = \"#000000\"\nbrights = [\n \"#905749\",\n \"#94431c\",\n \"#9f582a\",\n \"#a38687\",\n \"#e1750f\",\n \"#eaaf25\",\n \"#fa8e08\",\n \"#fca806\",\n]\nforeground = \"#d3d3d3\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nauthor = \"dkeg\"\nname = \"Panels (terminal.sexy)\"\norigin_url = \"https://github.com/stayradiated/terminal.sexy\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), +("Paper (Gogh)", "[colors]\nansi = [\n \"#000000\",\n \"#cc3e28\",\n \"#216609\",\n \"#b58900\",\n \"#1e6fcc\",\n \"#5c21a5\",\n \"#158c86\",\n \"#aaaaaa\",\n]\nbackground = \"#f2eede\"\nbrights = [\n \"#555555\",\n \"#cc3e28\",\n \"#216609\",\n \"#b58900\",\n \"#1e6fcc\",\n \"#5c21a5\",\n \"#158c86\",\n \"#aaaaaa\",\n]\ncursor_bg = \"#000000\"\ncursor_border = \"#000000\"\ncursor_fg = \"#f2eede\"\nforeground = \"#000000\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Paper (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"nightly builds only\"\n"), ("PaperColor Dark (base16)", "[colors]\nansi = [\n \"#1c1c1c\",\n \"#585858\",\n \"#af87d7\",\n \"#afd700\",\n \"#ff5faf\",\n \"#00afaf\",\n \"#ffaf00\",\n \"#808080\",\n]\nbackground = \"#1c1c1c\"\nbrights = [\n \"#d7af5f\",\n \"#585858\",\n \"#af87d7\",\n \"#afd700\",\n \"#ff5faf\",\n \"#00afaf\",\n \"#ffaf00\",\n \"#d0d0d0\",\n]\ncursor_bg = \"#808080\"\ncursor_border = \"#808080\"\ncursor_fg = \"#1c1c1c\"\nforeground = \"#808080\"\nselection_bg = \"#808080\"\nselection_fg = \"#1c1c1c\"\n\n[colors.indexed]\n16 = \"#5faf5f\"\n17 = \"#5f8787\"\n18 = \"#af005f\"\n19 = \"#5faf00\"\n20 = \"#5fafd7\"\n21 = \"#d7875f\"\n\n[metadata]\naliases = []\nauthor = \"Jon Leopard (http://github.com/jonleopard) based on PaperColor Theme (https://github.com/NLKNguyen/papercolor-theme)\"\nname = \"PaperColor Dark (base16)\"\norigin_url = \"https://github.com/jonleopard/base16-papercolor-scheme\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), ("Papercolor Dark (Gogh)", "[colors]\nansi = [\n \"#1c1c1c\",\n \"#af005f\",\n \"#5faf00\",\n \"#d7af5f\",\n \"#5fafd7\",\n \"#808080\",\n \"#d7875f\",\n \"#d0d0d0\",\n]\nbackground = \"#1c1c1c\"\nbrights = [\n \"#585858\",\n \"#5faf5f\",\n \"#afd700\",\n \"#af87d7\",\n \"#ffaf00\",\n \"#ff5faf\",\n \"#00afaf\",\n \"#5f8787\",\n]\ncursor_bg = \"#d0d0d0\"\ncursor_border = \"#d0d0d0\"\ncursor_fg = \"#1c1c1c\"\nforeground = \"#d0d0d0\"\n\n[colors.indexed]\n\n[metadata]\naliases = [\"PaperColorDark (Gogh)\"]\nname = \"Papercolor Dark (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), ("PaperColor Light (base16)", "[colors]\nansi = [\n \"#eeeeee\",\n \"#bcbcbc\",\n \"#8700af\",\n \"#d70087\",\n \"#d75f00\",\n \"#005faf\",\n \"#d75f00\",\n \"#444444\",\n]\nbackground = \"#eeeeee\"\nbrights = [\n \"#5f8700\",\n \"#bcbcbc\",\n \"#8700af\",\n \"#d70087\",\n \"#d75f00\",\n \"#005faf\",\n \"#d75f00\",\n \"#878787\",\n]\ncursor_bg = \"#444444\"\ncursor_border = \"#444444\"\ncursor_fg = \"#eeeeee\"\nforeground = \"#444444\"\nselection_bg = \"#444444\"\nselection_fg = \"#eeeeee\"\n\n[colors.indexed]\n16 = \"#d70000\"\n17 = \"#005f87\"\n18 = \"#af0000\"\n19 = \"#008700\"\n20 = \"#0087af\"\n21 = \"#005f87\"\n\n[metadata]\naliases = []\nauthor = \"Jon Leopard (http://github.com/jonleopard) based on PaperColor Theme (https://github.com/NLKNguyen/papercolor-theme)\"\nname = \"PaperColor Light (base16)\"\norigin_url = \"https://github.com/jonleopard/base16-papercolor-scheme\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), @@ -850,6 +856,7 @@ pub const SCHEMES: [(&'static str, &'static str); 993] = [ ("Srcery (Gogh)", "[colors]\nansi = [\n \"#1c1b19\",\n \"#ef2f27\",\n \"#519f50\",\n \"#fbb829\",\n \"#2c78bf\",\n \"#e02c6d\",\n \"#0aaeb3\",\n \"#baa67f\",\n]\nbackground = \"#1c1b19\"\nbrights = [\n \"#918175\",\n \"#f75341\",\n \"#98bc37\",\n \"#fed06e\",\n \"#68a8e4\",\n \"#ff5c8f\",\n \"#2be4d0\",\n \"#fce8c3\",\n]\ncursor_bg = \"#fbb829\"\ncursor_border = \"#fbb829\"\ncursor_fg = \"#1c1b19\"\nforeground = \"#fce8c3\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Srcery (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), ("Sublette", "[colors]\nansi = [\n \"#253045\",\n \"#ee5577\",\n \"#55ee77\",\n \"#ffdd88\",\n \"#5588ff\",\n \"#ff77cc\",\n \"#44eeee\",\n \"#f5f5da\",\n]\nbackground = \"#202535\"\nbrights = [\n \"#405570\",\n \"#ee6655\",\n \"#99ee77\",\n \"#ffff77\",\n \"#77bbff\",\n \"#aa88ff\",\n \"#55ffbb\",\n \"#ffffee\",\n]\ncursor_bg = \"#ccced0\"\ncursor_border = \"#ccced0\"\ncursor_fg = \"#202535\"\nforeground = \"#ccced0\"\nselection_bg = \"#ccced0\"\nselection_fg = \"#202535\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Sublette\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("Subliminal", "[colors]\nansi = [\n \"#7f7f7f\",\n \"#e15a60\",\n \"#a9cfa4\",\n \"#ffe2a9\",\n \"#6699cc\",\n \"#f1a5ab\",\n \"#5fb3b3\",\n \"#d4d4d4\",\n]\nbackground = \"#282c35\"\nbrights = [\n \"#7f7f7f\",\n \"#e15a60\",\n \"#a9cfa4\",\n \"#ffe2a9\",\n \"#6699cc\",\n \"#f1a5ab\",\n \"#5fb3b3\",\n \"#d4d4d4\",\n]\ncursor_bg = \"#c7c7c7\"\ncursor_border = \"#c7c7c7\"\ncursor_fg = \"#ffffff\"\nforeground = \"#d4d4d4\"\nselection_bg = \"#484e5b\"\nselection_fg = \"#ffffff\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Subliminal\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), +("Sugarplum", "[colors]\nansi = [\n \"#111147\",\n \"#5ca8dc\",\n \"#53b397\",\n \"#249a84\",\n \"#db7ddd\",\n \"#d0beee\",\n \"#f9f3f9\",\n \"#a175d4\",\n]\nbackground = \"#111147\"\nbrights = [\n \"#111147\",\n \"#5cb5dc\",\n \"#52deb5\",\n \"#01f5c7\",\n \"#fa5dfd\",\n \"#c6a5fd\",\n \"#ffffff\",\n \"#b577fd\",\n]\ncursor_bg = \"#53b397\"\ncursor_border = \"#53b397\"\ncursor_fg = \"#53b397\"\nforeground = \"#db7ddd\"\nselection_bg = \"#5ca8dc\"\nselection_fg = \"#d0beee\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nauthor = \"lemonlime0x3C33 (https://github.com/lemonlime0x3C33)\"\nname = \"Sugarplum\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"nightly builds only\"\n"), ("Summer Pop (Gogh)", "[colors]\nansi = [\n \"#666666\",\n \"#ff1e8e\",\n \"#8eff1e\",\n \"#fffb00\",\n \"#1e8eff\",\n \"#e500e5\",\n \"#00e5e5\",\n \"#e5e5e5\",\n]\nbackground = \"#272822\"\nbrights = [\n \"#666666\",\n \"#ff1e8e\",\n \"#8eff1e\",\n \"#fffb00\",\n \"#1e8eff\",\n \"#e500e5\",\n \"#00e5e5\",\n \"#e5e5e5\",\n]\ncursor_bg = \"#ffffff\"\ncursor_border = \"#ffffff\"\ncursor_fg = \"#272822\"\nforeground = \"#ffffff\"\n\n[colors.indexed]\n\n[metadata]\naliases = [\"summer-pop (Gogh)\"]\nname = \"Summer Pop (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), ("summercamp (base16)", "[colors]\nansi = [\n \"#1c1810\",\n \"#e35142\",\n \"#5ceb5a\",\n \"#f2ff27\",\n \"#489bf0\",\n \"#ff8080\",\n \"#5aebbc\",\n \"#736e55\",\n]\nbackground = \"#1c1810\"\nbrights = [\n \"#504b38\",\n \"#e35142\",\n \"#5ceb5a\",\n \"#f2ff27\",\n \"#489bf0\",\n \"#ff8080\",\n \"#5aebbc\",\n \"#f8f5de\",\n]\ncursor_bg = \"#736e55\"\ncursor_border = \"#736e55\"\ncursor_fg = \"#1c1810\"\nforeground = \"#736e55\"\nselection_bg = \"#736e55\"\nselection_fg = \"#1c1810\"\n\n[colors.indexed]\n16 = \"#fba11b\"\n17 = \"#f69be7\"\n18 = \"#2a261c\"\n19 = \"#3a3527\"\n20 = \"#5f5b45\"\n21 = \"#bab696\"\n\n[metadata]\naliases = []\nauthor = \"zoe firi (zoefiri.github.io)\"\nname = \"summercamp (base16)\"\norigin_url = \"https://github.com/zoefiri/base16-summercamp\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), ("Summerfruit Dark (base16)", "[colors]\nansi = [\n \"#151515\",\n \"#ff0086\",\n \"#00c918\",\n \"#aba800\",\n \"#3777e6\",\n \"#ad00a1\",\n \"#1faaaa\",\n \"#d0d0d0\",\n]\nbackground = \"#151515\"\nbrights = [\n \"#505050\",\n \"#ff0086\",\n \"#00c918\",\n \"#aba800\",\n \"#3777e6\",\n \"#ad00a1\",\n \"#1faaaa\",\n \"#ffffff\",\n]\ncursor_bg = \"#d0d0d0\"\ncursor_border = \"#d0d0d0\"\ncursor_fg = \"#151515\"\nforeground = \"#d0d0d0\"\nselection_bg = \"#d0d0d0\"\nselection_fg = \"#151515\"\n\n[colors.indexed]\n16 = \"#fd8900\"\n17 = \"#cc6633\"\n18 = \"#202020\"\n19 = \"#303030\"\n20 = \"#b0b0b0\"\n21 = \"#e0e0e0\"\n\n[metadata]\naliases = []\nauthor = \"Christopher Corley (http://christop.club/)\"\nname = \"Summerfruit Dark (base16)\"\norigin_url = \"https://github.com/cscorley/base16-summerfruit-scheme\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), @@ -903,7 +910,7 @@ pub const SCHEMES: [(&'static str, &'static str); 993] = [ ("tokyonight", "[colors]\nansi = [\n \"#15161e\",\n \"#f7768e\",\n \"#9ece6a\",\n \"#e0af68\",\n \"#7aa2f7\",\n \"#bb9af7\",\n \"#7dcfff\",\n \"#a9b1d6\",\n]\nbackground = \"#1a1b26\"\nbrights = [\n \"#414868\",\n \"#f7768e\",\n \"#9ece6a\",\n \"#e0af68\",\n \"#7aa2f7\",\n \"#bb9af7\",\n \"#7dcfff\",\n \"#c0caf5\",\n]\ncursor_bg = \"#c0caf5\"\ncursor_border = \"#c0caf5\"\ncursor_fg = \"#15161e\"\nforeground = \"#c0caf5\"\nselection_bg = \"#33467c\"\nselection_fg = \"#c0caf5\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"tokyonight\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"20230712-072601-f4abf8fd\"\n"), ("tokyonight-day", "[colors]\nansi = [\n \"#e9e9ed\",\n \"#f52a65\",\n \"#587539\",\n \"#8c6c3e\",\n \"#2e7de9\",\n \"#9854f1\",\n \"#007197\",\n \"#6172b0\",\n]\nbackground = \"#e1e2e7\"\nbrights = [\n \"#a1a6c5\",\n \"#f52a65\",\n \"#587539\",\n \"#8c6c3e\",\n \"#2e7de9\",\n \"#9854f1\",\n \"#007197\",\n \"#3760bf\",\n]\ncursor_bg = \"#3760bf\"\ncursor_border = \"#3760bf\"\ncursor_fg = \"#e1e2e7\"\nforeground = \"#3760bf\"\nselection_bg = \"#99a7df\"\nselection_fg = \"#3760bf\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"tokyonight-day\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"20230712-072601-f4abf8fd\"\n"), ("tokyonight-storm", "[colors]\nansi = [\n \"#1d202f\",\n \"#f7768e\",\n \"#9ece6a\",\n \"#e0af68\",\n \"#7aa2f7\",\n \"#bb9af7\",\n \"#7dcfff\",\n \"#a9b1d6\",\n]\nbackground = \"#24283b\"\nbrights = [\n \"#414868\",\n \"#f7768e\",\n \"#9ece6a\",\n \"#e0af68\",\n \"#7aa2f7\",\n \"#bb9af7\",\n \"#7dcfff\",\n \"#c0caf5\",\n]\ncursor_bg = \"#c0caf5\"\ncursor_border = \"#c0caf5\"\ncursor_fg = \"#1d202f\"\nforeground = \"#c0caf5\"\nselection_bg = \"#364a82\"\nselection_fg = \"#c0caf5\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"tokyonight-storm\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"20230712-072601-f4abf8fd\"\n"), -("tokyonight_day", "[colors]\nansi = [\n \"#e9e9ed\",\n \"#f52a65\",\n \"#587539\",\n \"#8c6c3e\",\n \"#2e7de9\",\n \"#9854f1\",\n \"#007197\",\n \"#6172b0\",\n]\nbackground = \"#e1e2e7\"\nbrights = [\n \"#a1a6c5\",\n \"#f52a65\",\n \"#587539\",\n \"#8c6c3e\",\n \"#2e7de9\",\n \"#9854f1\",\n \"#007197\",\n \"#3760bf\",\n]\ncompose_cursor = \"#b15c00\"\ncursor_bg = \"#3760bf\"\ncursor_border = \"#3760bf\"\ncursor_fg = \"#e1e2e7\"\nforeground = \"#3760bf\"\nscrollbar_thumb = \"#c4c8da\"\nselection_bg = \"#b6bfe2\"\nselection_fg = \"#3760bf\"\nsplit = \"#2e7de9\"\n\n[colors.indexed]\n\n[colors.tab_bar]\nbackground = \"#e1e2e7\"\ninactive_tab_edge = \"#e9e9ec\"\n\n[colors.tab_bar.active_tab]\nbg_color = \"#2e7de9\"\nfg_color = \"#e9e9ec\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.inactive_tab]\nbg_color = \"#c4c8da\"\nfg_color = \"#8990b3\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.inactive_tab_hover]\nbg_color = \"#c4c8da\"\nfg_color = \"#2e7de9\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.new_tab]\nbg_color = \"#e1e2e7\"\nfg_color = \"#2e7de9\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.new_tab_hover]\nbg_color = \"#e1e2e7\"\nfg_color = \"#2e7de9\"\nintensity = \"Bold\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[metadata]\naliases = [\"tokyonight-day\"]\nauthor = \"folke\"\nname = \"tokyonight_day\"\norigin_url = \"https://github.com/folke/tokyonight.nvim\"\nwezterm_version = \"Always\"\n"), +("tokyonight_day", "[colors]\nansi = [\n \"#b4b5b9\",\n \"#f52a65\",\n \"#587539\",\n \"#8c6c3e\",\n \"#2e7de9\",\n \"#9854f1\",\n \"#007197\",\n \"#6172b0\",\n]\nbackground = \"#e1e2e7\"\nbrights = [\n \"#a1a6c5\",\n \"#f52a65\",\n \"#587539\",\n \"#8c6c3e\",\n \"#2e7de9\",\n \"#9854f1\",\n \"#007197\",\n \"#3760bf\",\n]\ncompose_cursor = \"#b15c00\"\ncursor_bg = \"#3760bf\"\ncursor_border = \"#3760bf\"\ncursor_fg = \"#e1e2e7\"\nforeground = \"#3760bf\"\nscrollbar_thumb = \"#c4c8da\"\nselection_bg = \"#b7c1e3\"\nselection_fg = \"#3760bf\"\nsplit = \"#2e7de9\"\n\n[colors.indexed]\n\n[colors.tab_bar]\nbackground = \"#e1e2e7\"\ninactive_tab_edge = \"#d0d5e3\"\n\n[colors.tab_bar.active_tab]\nbg_color = \"#2e7de9\"\nfg_color = \"#d0d5e3\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.inactive_tab]\nbg_color = \"#c4c8da\"\nfg_color = \"#8990b3\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.inactive_tab_hover]\nbg_color = \"#c4c8da\"\nfg_color = \"#2e7de9\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.new_tab]\nbg_color = \"#e1e2e7\"\nfg_color = \"#2e7de9\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.new_tab_hover]\nbg_color = \"#e1e2e7\"\nfg_color = \"#2e7de9\"\nintensity = \"Bold\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[metadata]\naliases = [\"tokyonight-day\"]\nauthor = \"folke\"\nname = \"tokyonight_day\"\norigin_url = \"https://github.com/folke/tokyonight.nvim\"\nwezterm_version = \"Always\"\n"), ("tokyonight_moon", "[colors]\nansi = [\n \"#1b1d2b\",\n \"#ff757f\",\n \"#c3e88d\",\n \"#ffc777\",\n \"#82aaff\",\n \"#c099ff\",\n \"#86e1fc\",\n \"#828bb8\",\n]\nbackground = \"#222436\"\nbrights = [\n \"#444a73\",\n \"#ff757f\",\n \"#c3e88d\",\n \"#ffc777\",\n \"#82aaff\",\n \"#c099ff\",\n \"#86e1fc\",\n \"#c8d3f5\",\n]\ncompose_cursor = \"#ff966c\"\ncursor_bg = \"#c8d3f5\"\ncursor_border = \"#c8d3f5\"\ncursor_fg = \"#222436\"\nforeground = \"#c8d3f5\"\nscrollbar_thumb = \"#2f334d\"\nselection_bg = \"#2d3f76\"\nselection_fg = \"#c8d3f5\"\nsplit = \"#82aaff\"\n\n[colors.indexed]\n\n[colors.tab_bar]\nbackground = \"#222436\"\ninactive_tab_edge = \"#1e2030\"\n\n[colors.tab_bar.active_tab]\nbg_color = \"#82aaff\"\nfg_color = \"#1e2030\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.inactive_tab]\nbg_color = \"#2f334d\"\nfg_color = \"#545c7e\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.inactive_tab_hover]\nbg_color = \"#2f334d\"\nfg_color = \"#82aaff\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.new_tab]\nbg_color = \"#222436\"\nfg_color = \"#82aaff\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.new_tab_hover]\nbg_color = \"#222436\"\nfg_color = \"#82aaff\"\nintensity = \"Bold\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[metadata]\naliases = []\nauthor = \"folke\"\nname = \"tokyonight_moon\"\norigin_url = \"https://github.com/folke/tokyonight.nvim\"\nwezterm_version = \"20230320-124340-559cb7b0\"\n"), ("tokyonight_night", "[colors]\nansi = [\n \"#15161e\",\n \"#f7768e\",\n \"#9ece6a\",\n \"#e0af68\",\n \"#7aa2f7\",\n \"#bb9af7\",\n \"#7dcfff\",\n \"#a9b1d6\",\n]\nbackground = \"#1a1b26\"\nbrights = [\n \"#414868\",\n \"#f7768e\",\n \"#9ece6a\",\n \"#e0af68\",\n \"#7aa2f7\",\n \"#bb9af7\",\n \"#7dcfff\",\n \"#c0caf5\",\n]\ncompose_cursor = \"#ff9e64\"\ncursor_bg = \"#c0caf5\"\ncursor_border = \"#c0caf5\"\ncursor_fg = \"#1a1b26\"\nforeground = \"#c0caf5\"\nscrollbar_thumb = \"#292e42\"\nselection_bg = \"#283457\"\nselection_fg = \"#c0caf5\"\nsplit = \"#7aa2f7\"\n\n[colors.indexed]\n\n[colors.tab_bar]\nbackground = \"#1a1b26\"\ninactive_tab_edge = \"#16161e\"\n\n[colors.tab_bar.active_tab]\nbg_color = \"#7aa2f7\"\nfg_color = \"#16161e\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.inactive_tab]\nbg_color = \"#292e42\"\nfg_color = \"#545c7e\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.inactive_tab_hover]\nbg_color = \"#292e42\"\nfg_color = \"#7aa2f7\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.new_tab]\nbg_color = \"#1a1b26\"\nfg_color = \"#7aa2f7\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.new_tab_hover]\nbg_color = \"#1a1b26\"\nfg_color = \"#7aa2f7\"\nintensity = \"Bold\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[metadata]\naliases = [\"tokyonight\"]\nauthor = \"folke\"\nname = \"tokyonight_night\"\norigin_url = \"https://github.com/folke/tokyonight.nvim\"\nwezterm_version = \"Always\"\n"), ("tokyonight_storm", "[colors]\nansi = [\n \"#1d202f\",\n \"#f7768e\",\n \"#9ece6a\",\n \"#e0af68\",\n \"#7aa2f7\",\n \"#bb9af7\",\n \"#7dcfff\",\n \"#a9b1d6\",\n]\nbackground = \"#24283b\"\nbrights = [\n \"#414868\",\n \"#f7768e\",\n \"#9ece6a\",\n \"#e0af68\",\n \"#7aa2f7\",\n \"#bb9af7\",\n \"#7dcfff\",\n \"#c0caf5\",\n]\ncompose_cursor = \"#ff9e64\"\ncursor_bg = \"#c0caf5\"\ncursor_border = \"#c0caf5\"\ncursor_fg = \"#24283b\"\nforeground = \"#c0caf5\"\nscrollbar_thumb = \"#292e42\"\nselection_bg = \"#2e3c64\"\nselection_fg = \"#c0caf5\"\nsplit = \"#7aa2f7\"\n\n[colors.indexed]\n\n[colors.tab_bar]\nbackground = \"#24283b\"\ninactive_tab_edge = \"#1f2335\"\n\n[colors.tab_bar.active_tab]\nbg_color = \"#7aa2f7\"\nfg_color = \"#1f2335\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.inactive_tab]\nbg_color = \"#292e42\"\nfg_color = \"#545c7e\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.inactive_tab_hover]\nbg_color = \"#292e42\"\nfg_color = \"#7aa2f7\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.new_tab]\nbg_color = \"#24283b\"\nfg_color = \"#7aa2f7\"\nintensity = \"Normal\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[colors.tab_bar.new_tab_hover]\nbg_color = \"#24283b\"\nfg_color = \"#7aa2f7\"\nintensity = \"Bold\"\nitalic = false\nstrikethrough = false\nunderline = \"None\"\n\n[metadata]\naliases = [\"tokyonight-storm\"]\nauthor = \"folke\"\nname = \"tokyonight_storm\"\norigin_url = \"https://github.com/folke/tokyonight.nvim\"\nwezterm_version = \"Always\"\n"), @@ -946,6 +953,7 @@ pub const SCHEMES: [(&'static str, &'static str); 993] = [ ("Vag (Gogh)", "[colors]\nansi = [\n \"#303030\",\n \"#a87139\",\n \"#39a871\",\n \"#71a839\",\n \"#7139a8\",\n \"#a83971\",\n \"#3971a8\",\n \"#8a8a8a\",\n]\nbackground = \"#191f1d\"\nbrights = [\n \"#494949\",\n \"#b0763b\",\n \"#3bb076\",\n \"#76b03b\",\n \"#763bb0\",\n \"#b03b76\",\n \"#3b76b0\",\n \"#cfcfcf\",\n]\ncursor_bg = \"#d9e6f2\"\ncursor_border = \"#d9e6f2\"\ncursor_fg = \"#191f1d\"\nforeground = \"#d9e6f2\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Vag (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), ("Vaughn", "[colors]\nansi = [\n \"#25234f\",\n \"#705050\",\n \"#60b48a\",\n \"#dfaf8f\",\n \"#5555ff\",\n \"#f08cc3\",\n \"#8cd0d3\",\n \"#709080\",\n]\nbackground = \"#25234f\"\nbrights = [\n \"#709080\",\n \"#dca3a3\",\n \"#60b48a\",\n \"#f0dfaf\",\n \"#5555ff\",\n \"#ec93d3\",\n \"#93e0e3\",\n \"#ffffff\",\n]\ncursor_bg = \"#ff5555\"\ncursor_border = \"#ff5555\"\ncursor_fg = \"#ffffff\"\nforeground = \"#dcdccc\"\nselection_bg = \"#b5d5ff\"\nselection_fg = \"#000000\"\n\n[colors.indexed]\n\n[metadata]\naliases = [\"Vaughn (Gogh)\"]\nname = \"Vaughn\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("Vaughn (Gogh)", "[colors]\nansi = [\n \"#25234f\",\n \"#705050\",\n \"#60b48a\",\n \"#dfaf8f\",\n \"#5555ff\",\n \"#f08cc3\",\n \"#8cd0d3\",\n \"#709080\",\n]\nbackground = \"#25234f\"\nbrights = [\n \"#709080\",\n \"#dca3a3\",\n \"#60b48a\",\n \"#f0dfaf\",\n \"#5555ff\",\n \"#ec93d3\",\n \"#93e0e3\",\n \"#ffffff\",\n]\ncursor_bg = \"#dcdccc\"\ncursor_border = \"#dcdccc\"\ncursor_fg = \"#25234f\"\nforeground = \"#dcdccc\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Vaughn (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20230712-072601-f4abf8fd\"\n"), +("Vesper", "[colors]\nansi = [\n \"#101010\",\n \"#f5a191\",\n \"#90b99f\",\n \"#e6b99d\",\n \"#aca1cf\",\n \"#e29eca\",\n \"#ea83a5\",\n \"#a0a0a0\",\n]\nbackground = \"#101010\"\nbrights = [\n \"#7e7e7e\",\n \"#ff8080\",\n \"#99ffe4\",\n \"#ffc799\",\n \"#b9aeda\",\n \"#ecaad6\",\n \"#f591b2\",\n \"#ffffff\",\n]\ncursor_bg = \"#acb1ab\"\ncursor_border = \"#acb1ab\"\ncursor_fg = \"#ffffff\"\nforeground = \"#ffffff\"\nselection_bg = \"#988049\"\nselection_fg = \"#acb1ab\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Vesper\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"nightly builds only\"\n"), ("Vibrant Ink (Gogh)", "[colors]\nansi = [\n \"#878787\",\n \"#ff6600\",\n \"#ccff04\",\n \"#ffcc00\",\n \"#44b4cc\",\n \"#9933cc\",\n \"#44b4cc\",\n \"#f5f5f5\",\n]\nbackground = \"#000000\"\nbrights = [\n \"#555555\",\n \"#ff0000\",\n \"#00ff00\",\n \"#ffff00\",\n \"#0000ff\",\n \"#ff00ff\",\n \"#00ffff\",\n \"#e5e5e5\",\n]\ncursor_bg = \"#ffffff\"\ncursor_border = \"#ffffff\"\ncursor_fg = \"#000000\"\nforeground = \"#ffffff\"\n\n[colors.indexed]\n\n[metadata]\naliases = []\nname = \"Vibrant Ink (Gogh)\"\norigin_url = \"https://github.com/Gogh-Co/Gogh\"\nwezterm_version = \"20230712-072601-f4abf8fd\"\n"), ("VibrantInk", "[colors]\nansi = [\n \"#878787\",\n \"#ff6600\",\n \"#ccff04\",\n \"#ffcc00\",\n \"#44b4cc\",\n \"#9933cc\",\n \"#44b4cc\",\n \"#f5f5f5\",\n]\nbackground = \"#000000\"\nbrights = [\n \"#555555\",\n \"#ff0000\",\n \"#00ff00\",\n \"#ffff00\",\n \"#0000ff\",\n \"#ff00ff\",\n \"#00ffff\",\n \"#e5e5e5\",\n]\ncursor_bg = \"#ffffff\"\ncursor_border = \"#ffffff\"\ncursor_fg = \"#000000\"\nforeground = \"#ffffff\"\nselection_bg = \"#b5d5ff\"\nselection_fg = \"#000000\"\n\n[colors.indexed]\n\n[metadata]\naliases = [\"Vibrant Ink (Gogh)\"]\nname = \"VibrantInk\"\norigin_url = \"https://github.com/mbadolato/iTerm2-Color-Schemes\"\nwezterm_version = \"Always\"\n"), ("Vice Alt (base16)", "[colors]\nansi = [\n \"#1c1c1c\",\n \"#ff3d81\",\n \"#44ffdd\",\n \"#ffff73\",\n \"#2fb1d4\",\n \"#8265ff\",\n \"#00caff\",\n \"#555555\",\n]\nbackground = \"#1c1c1c\"\nbrights = [\n \"#323232\",\n \"#ff3d81\",\n \"#44ffdd\",\n \"#ffff73\",\n \"#2fb1d4\",\n \"#8265ff\",\n \"#00caff\",\n \"#d1d1d1\",\n]\ncursor_bg = \"#555555\"\ncursor_border = \"#555555\"\ncursor_fg = \"#1c1c1c\"\nforeground = \"#555555\"\nselection_bg = \"#555555\"\nselection_fg = \"#1c1c1c\"\n\n[colors.indexed]\n16 = \"#f67544\"\n17 = \"#f83d80\"\n18 = \"#282828\"\n19 = \"#2c2c2c\"\n20 = \"#3c3c3c\"\n21 = \"#b6b6b6\"\n\n[metadata]\naliases = []\nauthor = \"Thomas Leon Highbaugh\"\nname = \"Vice Alt (base16)\"\norigin_url = \"https://github.com/Thomashighbaugh/base16-vice-scheme\"\nwezterm_version = \"20220807-113146-c2fee766\"\n"), diff --git a/config/src/ssh.rs b/config/src/ssh.rs index e725800fd66..7fc0e31034c 100644 --- a/config/src/ssh.rs +++ b/config/src/ssh.rs @@ -119,6 +119,7 @@ impl SshDomain { name: format!("SSH:{host}"), remote_address: host.to_string(), multiplexing: SshMultiplexing::None, + local_echo_threshold_ms: default_local_echo_threshold_ms(), ..SshDomain::default() }); @@ -126,6 +127,7 @@ impl SshDomain { name: format!("SSHMUX:{host}"), remote_address: host.to_string(), multiplexing: SshMultiplexing::WezTerm, + local_echo_threshold_ms: default_local_echo_threshold_ms(), ..SshDomain::default() }); } diff --git a/deps/cairo/Cargo.toml b/deps/cairo/Cargo.toml index 20a7505d8a0..627cc86775a 100644 --- a/deps/cairo/Cargo.toml +++ b/deps/cairo/Cargo.toml @@ -22,6 +22,11 @@ pdf = [] svg = [] ps = [] script = [] +win32-surface = [] +xlib = [] +xcb = [] +freetype = [] +use_glib = [] [dependencies] libc = "0.2" diff --git a/deps/harfbuzz/harfbuzz b/deps/harfbuzz/harfbuzz index 63973005bc0..9c03576c49d 160000 --- a/deps/harfbuzz/harfbuzz +++ b/deps/harfbuzz/harfbuzz @@ -1 +1 @@ -Subproject commit 63973005bc07aba599b47fdd4cf788647b601ccd +Subproject commit 9c03576c49db6e7207d9bcdfe3abd170a809157f diff --git a/docs/changelog.md b/docs/changelog.md index 2f79dc5aa17..80ef62c9fcb 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -24,7 +24,7 @@ As features stabilize some brief notes about them will accumulate here. #### Changed * Wayland: currently being reimplemented, it maybe more unstable than usual. Please file GH issues for any problems you see. - Many thanks to @tzx! #4777 + Many thanks to @tzx and @tmccombs! #4777 #5781 * [show_update_window](config/lua/config/show_update_window.md) has been deprecated; it no longer has any effect and will be removed in a future release. @@ -34,6 +34,18 @@ As features stabilize some brief notes about them will accumulate here. drawing glyphs. See [custom_block_glyphs](config/lua/config/custom_block_glyphs.md) for more details. Thanks to @stribor14! #5051 #5169 +* Switched to the [nucleo](https://github.com/helix-editor/nucleo) fuzzy + matcher which produces matches that more closely match the popular `fzf` + program. #5532 +* The Copy Mode `Close` action no longer implicitly scrolls to the bottom. + This is to facilitate having a key assignment that closes copy mode without + adjusting the viewport position. You can compose multiple actions together using + `Multiple` if you wish; the default key assignments in Copy Mode use this technique + so that the effective behavior of the defaults remains unchanged. + Thanks to @LeszekSwirski! #4924 #3502 +* Improved startup performance on X11. Thanks to @blukai! #5923 #5802 +* There is now an upper bound of 999,999,999 for `scrollback_lines`. Thanks to + @x3ro! #5996 #### New * [wezterm.serde](config/lua/wezterm.serde/index.md) module for serialization @@ -48,6 +60,11 @@ As features stabilize some brief notes about them will accumulate here. to manage `SSH_AUTH_SOCK`. * Search mode: now supports richer line editing. Thanks to @Mrreadiness and @kenchou! #5416 #3087 +* [show_close_tab_button_in_tabs](config/lua/config/show_close_tab_button_in_tabs.md) + option for the fancy tab bar. Thanks to @zummenix! #3818 +* wezterm-ssh now supports `ProxyUseFdPass`. Thanks to @loops! #6103 #6093 +* `PromptInputLine` now supports a optional `prompt` and `initial_value` + parameters. Thanks to @mgpinf and @ekorchmar! #6054 #6007 #### Fixed * Race condition when very quickly adjusting font scale, and other improvements @@ -61,8 +78,8 @@ As features stabilize some brief notes about them will accumulate here. rather than the intended *starttime* field to decide which process was the youngest. Thanks to @crides! #5001 * Wayland: fixed startup on Hyprland >= 0.37.0. Thanks to @fioncat! #5264 #5103 -* Wayland: updated to SCTK 0.18. Thanks to @deviant! #5276 #5154 #5079 #5071 - #4604 #5209 +* Wayland: updated to SCTK 0.19. Thanks to @deviant and @tmccombs! #5276 #5154 #5079 #5071 + #4604 #5209 #5781 * Windows: Window buttons stopped working when using `win32_system_backdrop`. Thanks to @Kushagra2569! #5362 #5348 * `wezterm cli activate-pane` now respects `unzoom_on_switch_pane`. Thanks to @@ -78,16 +95,57 @@ As features stabilize some brief notes about them will accumulate here. * Render invalidation issue when closing tabs other than the last tab. Thanks to @Mrreadiness! #5441 #5304 * Search mode now accepts composed input from the IME. Thanks to @kenchou! #5564 +* Quick select mode will now accept unix paths with `//` in them. #5763 +* blob leases (for image rendering) could be removed by temporary directory + cleaners, resulting in issues with rendering. We no longer store these + in a pure temporary directory; they live in a cache dir, and if someone + does remove or truncate these files, we now convert that error case + into blank frame(s). #5422 #4657 +* PaneInformation object returned `pixel_width` when asked to return the + `pixel_height`. +* ssh: we now explicitly kill and reap the `ProxyCommand` associated + with an ssh session. Thanks to @daaku! #5494 #5479 +* `default_ssh_domains()` didn't use the default local echo threshold + for ssh domains. #5547 +* multiplexer: internal PKI certificate now supplements its list of + "Subject Alternative Names" with the list of canonical hostnames returned + for the local system via `getaddrinfo`. #5543 +* DECSLRM incorrectly clamped the left margin based on the terminal height + instead of the terminal width. Thanks to @j4james and @tmccombs! #5871 #5750 +* Scrollback position was incorrectly advanced when in alt-screen mode. + Thanks to @tbung! #6099 #4607 +* Wayland: Fixed potential panic on startup when monitors have changed are + in the process of hot plugging when wezterm starts. Thanks to @loops! #6084 +* macOS: explicitly set the window to sRGB colorspace to resolve incorrect + colors on non-sRGB monitors. Thanks to @rianmcguire! #6063 #5824 +* The bell would ring each window instead of just the window containing the + pane where the bell is ringing. Thanks to @loops! #6012 #5985 +* x11: transient errors in obtaining/setting the selection could cause + wezterm to exit. Thanks to @loops! #6135 #5482 #6128 +* Wayland: potential panic when working with the clipboard. Thanks to @rengare! + #5518 +* multiplexer: could lose track of delta updates if the display changed + while the current delta was being computed. Thanks to @loops! #5981 +* Plugins: normalize the plugin path to exclude trailing slashes. Thanks to + @joncrangle! #5883 +* zooming a tab might not work if you also recently used `pane:activate()`. + Thanks to @SpyMachine! #5964 #5928 +* `pane:current_working_dir.file_path` returned incorrect results for + paths that contained `#` or `?` characters. Thanks to @loops! #6158 #6171 +* wayland: issues with losing maximized or tiled state when switching between + applications. Thanks to @aliaksandr-trush! #4568 #5897 #### Updated * Bundled conpty.dll and OpenConsole.exe to build 1.19.240130002.nupkg -* Bundled harfbuzz to 8.4.0 +* Bundled harfbuzz to 9.0.0 * image crate to 0.25, which means that JPEG images are now decoded via [zune-jpeg](https://docs.rs/zune-jpeg/latest/zune_jpeg/), which improves handling of non-conforming jpeg images. #5365 -* Color schemes: +* Color schemes: [Astrodark (Gogh)](colorschemes/a/index.md#astrodark-gogh), [Blue Dolphin (Gogh)](colorschemes/b/index.md#blue-dolphin-gogh), + [Breadog (Gogh)](colorschemes/b/index.md#breadog-gogh), [Butrin (Gogh)](colorschemes/b/index.md#butrin-gogh), + [City Lights (Gogh)](colorschemes/c/index.md#city-lights-gogh), [CutiePro](colorschemes/c/index.md#cutiepro), [Ef-Dream](colorschemes/e/index.md#ef-dream), [Ef-Reverie](colorschemes/e/index.md#ef-reverie), @@ -99,7 +157,9 @@ As features stabilize some brief notes about them will accumulate here. [Everforest Light Medium (Gogh)](colorschemes/e/index.md#everforest-light-medium-gogh), [Everforest Light Soft (Gogh)](colorschemes/e/index.md#everforest-light-soft-gogh), [Github Light (Gogh)](colorschemes/g/index.md#github-light-gogh), + [Iceberg (Gogh)](colorschemes/i/index.md#iceberg-gogh), [Kanagawa Dragon (Gogh)](colorschemes/k/index.md#kanagawa-dragon-gogh), + [kurokula](colorschemes/k/index.md#kurokula), [Mellifluous](colorschemes/m/index.md#mellifluous), [Miramare (Gogh)](colorschemes/m/index.md#miramare-gogh), [Modus Operandi (Gogh)](colorschemes/m/index.md#modus-operandi-gogh), @@ -108,12 +168,15 @@ As features stabilize some brief notes about them will accumulate here. [Modus Vivendi Tinted (Gogh)](colorschemes/m/index.md#modus-vivendi-tinted-gogh), [NvimDark](colorschemes/n/index.md#nvimdark), [NvimLight](colorschemes/n/index.md#nvimlight), + [Paper (Gogh)](colorschemes/p/index.md#paper-gogh), [Quiet (Gogh)](colorschemes/q/index.md#quiet-gogh), [Selenized Black (Gogh)](colorschemes/s/index.md#selenized-black-gogh), [Selenized White (Gogh)](colorschemes/s/index.md#selenized-white-gogh), [Seoul256 (Gogh)](colorschemes/s/index.md#seoul256-gogh), [Seoul256 Light (Gogh)](colorschemes/s/index.md#seoul256-light-gogh), - [Sparky (Gogh)](colorschemes/s/index.md#sparky-gogh) + [Sparky (Gogh)](colorschemes/s/index.md#sparky-gogh), + [Sugarplum](colorschemes/s/index.md#sugarplum), + [Vesper](colorschemes/v/index.md#vesper) ### 20240203-110809-5046fc22 @@ -215,7 +278,7 @@ As features stabilize some brief notes about them will accumulate here. as a preprocessing step, and controlling the filtering and format used by the resizing, along with showing diagnostics around the resize operation. #3264 * Color schemes: [Aardvark Blue](colorschemes/a/index.md#aardvark-blue), - [alacritty](colorschemes/a/index.md#alacritty), + [alacritty](colorschemes/a/index.md), [Apple System Colors](colorschemes/a/index.md#apple-system-colors), [Bamboo Light](colorschemes/b/index.md#bamboo-light), [Campbell (Gogh)](colorschemes/c/index.md#campbell-gogh), @@ -259,7 +322,7 @@ As features stabilize some brief notes about them will accumulate here. [Moonfly (Gogh)](colorschemes/m/index.md#moonfly-gogh), [Nightfly (Gogh)](colorschemes/n/index.md#nightfly-gogh), [Oxocarbon Dark (Gogh)](colorschemes/o/index.md#oxocarbon-dark-gogh), - [Rosé Pine Moon (base16)](colorschemes/r/index.md#rosé-pine-moon-base16), + [Rosé Pine Moon (base16)](colorschemes/r/index.md#rose-pine-moon-base16), [Selenized Dark (Gogh)](colorschemes/s/index.md#selenized-dark-gogh), [Selenized Light (Gogh)](colorschemes/s/index.md#selenized-light-gogh), [Website (Gogh)](colorschemes/w/index.md#website-gogh) @@ -475,7 +538,7 @@ As features stabilize some brief notes about them will accumulate here. * Bundled freetype to 2.13.0 * Bundled Nerd Font Symbols font to v3.0.1. Note that there are several [breaking changes in v3](https://github.com/ryanoasis/nerd-fonts/releases/tag/v3.0.0). -* Color schemes: [3024 (dark) (terminal.sexy)](colorschemes/3/index.md#3024-dark-terminal-sexy), +* Color schemes: [3024 (dark) (terminal.sexy)](colorschemes/3/index.md#3024-dark-terminalsexy), [3024 Day (Gogh)](colorschemes/3/index.md#3024-day-gogh), [3024 Night (Gogh)](colorschemes/3/index.md#3024-night-gogh), [Adventure Time (Gogh)](colorschemes/a/index.md#adventure-time-gogh), @@ -483,45 +546,45 @@ As features stabilize some brief notes about them will accumulate here. [Apprentice (Gogh)](colorschemes/a/index.md#apprentice-gogh), [Argonaut (Gogh)](colorschemes/a/index.md#argonaut-gogh), [Arthur (Gogh)](colorschemes/a/index.md#arthur-gogh), - [Ashes (dark) (terminal.sexy)](colorschemes/a/index.md#ashes-dark-terminal-sexy), + [Ashes (dark) (terminal.sexy)](colorschemes/a/index.md#ashes-dark-terminalsexy), [Atom (Gogh)](colorschemes/a/index.md#atom-gogh), [Bamboo](colorschemes/b/index.md#bamboo), [Bamboo Multiplex](colorschemes/b/index.md#bamboo-multiplex), [Belafonte Day (Gogh)](colorschemes/b/index.md#belafonte-day-gogh), [Belafonte Night (Gogh)](colorschemes/b/index.md#belafonte-night-gogh), - [Bespin (dark) (terminal.sexy)](colorschemes/b/index.md#bespin-dark-terminal-sexy), + [Bespin (dark) (terminal.sexy)](colorschemes/b/index.md#bespin-dark-terminalsexy), [Birds Of Paradise (Gogh)](colorschemes/b/index.md#birds-of-paradise-gogh), [Blazer (Gogh)](colorschemes/b/index.md#blazer-gogh), [Borland (Gogh)](colorschemes/b/index.md#borland-gogh), - [Brewer (dark) (terminal.sexy)](colorschemes/b/index.md#brewer-dark-terminal-sexy), + [Brewer (dark) (terminal.sexy)](colorschemes/b/index.md#brewer-dark-terminalsexy), [Broadcast (Gogh)](colorschemes/b/index.md#broadcast-gogh), [Brogrammer (Gogh)](colorschemes/b/index.md#brogrammer-gogh), [C64 (Gogh)](colorschemes/c/index.md#c64-gogh), - [Catppuccin Frappé (Gogh)](colorschemes/c/index.md#catppuccin-frappé-gogh), + [Catppuccin Frappé (Gogh)](colorschemes/c/index.md#catppuccin-frappe-gogh), [Catppuccin Latte (Gogh)](colorschemes/c/index.md#catppuccin-latte-gogh), [Catppuccin Macchiato (Gogh)](colorschemes/c/index.md#catppuccin-macchiato-gogh), [Catppuccin Mocha (Gogh)](colorschemes/c/index.md#catppuccin-mocha-gogh), [catppuccin-frappe](colorschemes/c/index.md#catppuccin-frappe), [catppuccin-macchiato](colorschemes/c/index.md#catppuccin-macchiato), [catppuccin-mocha](colorschemes/c/index.md#catppuccin-mocha), - [Chalk (dark) (terminal.sexy)](colorschemes/c/index.md#chalk-dark-terminal-sexy), + [Chalk (dark) (terminal.sexy)](colorschemes/c/index.md#chalk-dark-terminalsexy), [Chalkboard (Gogh)](colorschemes/c/index.md#chalkboard-gogh), [Ciapre (Gogh)](colorschemes/c/index.md#ciapre-gogh), [Clrs (Gogh)](colorschemes/c/index.md#clrs-gogh), [Cobalt 2 (Gogh)](colorschemes/c/index.md#cobalt-2-gogh), [Cobalt Neon (Gogh)](colorschemes/c/index.md#cobalt-neon-gogh), - [Codeschool (dark) (terminal.sexy)](colorschemes/c/index.md#codeschool-dark-terminal-sexy), + [Codeschool (dark) (terminal.sexy)](colorschemes/c/index.md#codeschool-dark-terminalsexy), [Crayon Pony Fish (Gogh)](colorschemes/c/index.md#crayon-pony-fish-gogh), [Dark Pastel (Gogh)](colorschemes/d/index.md#dark-pastel-gogh), [Darkside (Gogh)](colorschemes/d/index.md#darkside-gogh), - [Default (dark) (terminal.sexy)](colorschemes/d/index.md#default-dark-terminal-sexy), + [Default (dark) (terminal.sexy)](colorschemes/d/index.md#default-dark-terminalsexy), [Desert (Gogh)](colorschemes/d/index.md#desert-gogh), [Dimmed Monokai (Gogh)](colorschemes/d/index.md#dimmed-monokai-gogh), [Earthsong (Gogh)](colorschemes/e/index.md#earthsong-gogh), [Ef-Tritanopia-Light](colorschemes/e/index.md#ef-tritanopia-light), - [Eighties (dark) (terminal.sexy)](colorschemes/e/index.md#eighties-dark-terminal-sexy), + [Eighties (dark) (terminal.sexy)](colorschemes/e/index.md#eighties-dark-terminalsexy), [Elemental (Gogh)](colorschemes/e/index.md#elemental-gogh), - [Embers (dark) (terminal.sexy)](colorschemes/e/index.md#embers-dark-terminal-sexy), + [Embers (dark) (terminal.sexy)](colorschemes/e/index.md#embers-dark-terminalsexy), [Espresso (Gogh)](colorschemes/e/index.md#espresso-gogh), [Espresso Libre (Gogh)](colorschemes/e/index.md#espresso-libre-gogh), [Everblush (Gogh)](colorschemes/e/index.md#everblush-gogh), @@ -531,13 +594,13 @@ As features stabilize some brief notes about them will accumulate here. [Frontend Fun Forrest (Gogh)](colorschemes/f/index.md#frontend-fun-forrest-gogh), [Frontend Galaxy (Gogh)](colorschemes/f/index.md#frontend-galaxy-gogh), [Github (Gogh)](colorschemes/g/index.md#github-gogh), - [Gnometerm (terminal.sexy)](colorschemes/g/index.md#gnometerm-terminal-sexy), - [Google (dark) (terminal.sexy)](colorschemes/g/index.md#google-dark-terminal-sexy), - [Gotham (terminal.sexy)](colorschemes/g/index.md#gotham-terminal-sexy), + [Gnometerm (terminal.sexy)](colorschemes/g/index.md#gnometerm-terminalsexy), + [Google (dark) (terminal.sexy)](colorschemes/g/index.md#google-dark-terminalsexy), + [Gotham (terminal.sexy)](colorschemes/g/index.md#gotham-terminalsexy), [Grape (Gogh)](colorschemes/g/index.md#grape-gogh), [Grass (Gogh)](colorschemes/g/index.md#grass-gogh), - [Grayscale (dark) (terminal.sexy)](colorschemes/g/index.md#grayscale-dark-terminal-sexy), - [Greenscreen (dark) (terminal.sexy)](colorschemes/g/index.md#greenscreen-dark-terminal-sexy), + [Grayscale (dark) (terminal.sexy)](colorschemes/g/index.md#grayscale-dark-terminalsexy), + [Greenscreen (dark) (terminal.sexy)](colorschemes/g/index.md#greenscreen-dark-terminalsexy), [Gruvbox Dark (Gogh)](colorschemes/g/index.md#gruvbox-dark-gogh), [Hardcore (Gogh)](colorschemes/h/index.md#hardcore-gogh), [hardhacker](colorschemes/h/index.md#hardhacker), @@ -551,7 +614,7 @@ As features stabilize some brief notes about them will accumulate here. [Hurtado (Gogh)](colorschemes/h/index.md#hurtado-gogh), [Ic Orange Ppl (Gogh)](colorschemes/i/index.md#ic-orange-ppl-gogh), [Idle Toes (Gogh)](colorschemes/i/index.md#idle-toes-gogh), - [Isotope (dark) (terminal.sexy)](colorschemes/i/index.md#isotope-dark-terminal-sexy), + [Isotope (dark) (terminal.sexy)](colorschemes/i/index.md#isotope-dark-terminalsexy), [Jackie Brown (Gogh)](colorschemes/j/index.md#jackie-brown-gogh), [Japanesque (Gogh)](colorschemes/j/index.md#japanesque-gogh), [Jellybeans (Gogh)](colorschemes/j/index.md#jellybeans-gogh), @@ -560,15 +623,15 @@ As features stabilize some brief notes about them will accumulate here. [Lavandula (Gogh)](colorschemes/l/index.md#lavandula-gogh), [Liquid Carbon (Gogh)](colorschemes/l/index.md#liquid-carbon-gogh), [Liquid Carbon Transparent (Gogh)](colorschemes/l/index.md#liquid-carbon-transparent-gogh), - [Londontube (dark) (terminal.sexy)](colorschemes/l/index.md#londontube-dark-terminal-sexy), + [Londontube (dark) (terminal.sexy)](colorschemes/l/index.md#londontube-dark-terminalsexy), [Man Page (Gogh)](colorschemes/m/index.md#man-page-gogh), - [Marrakesh (dark) (terminal.sexy)](colorschemes/m/index.md#marrakesh-dark-terminal-sexy), + [Marrakesh (dark) (terminal.sexy)](colorschemes/m/index.md#marrakesh-dark-terminalsexy), [Mathias (Gogh)](colorschemes/m/index.md#mathias-gogh), [Medallion (Gogh)](colorschemes/m/index.md#medallion-gogh), [Misterioso (Gogh)](colorschemes/m/index.md#misterioso-gogh), - [Mocha (dark) (terminal.sexy)](colorschemes/m/index.md#mocha-dark-terminal-sexy), + [Mocha (dark) (terminal.sexy)](colorschemes/m/index.md#mocha-dark-terminalsexy), [Mona Lisa (Gogh)](colorschemes/m/index.md#mona-lisa-gogh), - [Monokai (dark) (terminal.sexy)](colorschemes/m/index.md#monokai-dark-terminal-sexy), + [Monokai (dark) (terminal.sexy)](colorschemes/m/index.md#monokai-dark-terminalsexy), [Monokai Soda (Gogh)](colorschemes/m/index.md#monokai-soda-gogh), [N0Tch2K (Gogh)](colorschemes/n/index.md#n0tch2k-gogh), [Neopolitan (Gogh)](colorschemes/n/index.md#neopolitan-gogh), @@ -579,24 +642,24 @@ As features stabilize some brief notes about them will accumulate here. [Nord (Gogh)](colorschemes/n/index.md#nord-gogh), [Novel (Gogh)](colorschemes/n/index.md#novel-gogh), [Obsidian (Gogh)](colorschemes/o/index.md#obsidian-gogh), - [Ocean (dark) (terminal.sexy)](colorschemes/o/index.md#ocean-dark-terminal-sexy), + [Ocean (dark) (terminal.sexy)](colorschemes/o/index.md#ocean-dark-terminalsexy), [Oceanic Next (Gogh)](colorschemes/o/index.md#oceanic-next-gogh), [Ollie (Gogh)](colorschemes/o/index.md#ollie-gogh), [Paraiso (base16)](colorschemes/p/index.md#paraiso-base16), - [Paraiso (dark) (terminal.sexy)](colorschemes/p/index.md#paraiso-dark-terminal-sexy), + [Paraiso (dark) (terminal.sexy)](colorschemes/p/index.md#paraiso-dark-terminalsexy), [Paraiso Dark (Gogh)](colorschemes/p/index.md#paraiso-dark-gogh), [Pencil Dark (Gogh)](colorschemes/p/index.md#pencil-dark-gogh), [Pencil Light (Gogh)](colorschemes/p/index.md#pencil-light-gogh), [Pnevma (Gogh)](colorschemes/p/index.md#pnevma-gogh), [Pro (Gogh)](colorschemes/p/index.md#pro-gogh), - [Railscasts (dark) (terminal.sexy)](colorschemes/r/index.md#railscasts-dark-terminal-sexy), + [Railscasts (dark) (terminal.sexy)](colorschemes/r/index.md#railscasts-dark-terminalsexy), [Red Alert (Gogh)](colorschemes/r/index.md#red-alert-gogh), [Red Sands (Gogh)](colorschemes/r/index.md#red-sands-gogh), [Relaxed (Gogh)](colorschemes/r/index.md#relaxed-gogh), [Rippedcasts (Gogh)](colorschemes/r/index.md#rippedcasts-gogh), - [Rosé Pine (Gogh)](colorschemes/r/index.md#rosé-pine-gogh), - [Rosé Pine Dawn (Gogh)](colorschemes/r/index.md#rosé-pine-dawn-gogh), - [Rosé Pine Moon (Gogh)](colorschemes/r/index.md#rosé-pine-moon-gogh), + [Rosé Pine (Gogh)](colorschemes/r/index.md#rose-pine-gogh), + [Rosé Pine Dawn (Gogh)](colorschemes/r/index.md#rose-pine-dawn-gogh), + [Rosé Pine Moon (Gogh)](colorschemes/r/index.md#rose-pine-moon-gogh), [Royal (Gogh)](colorschemes/r/index.md#royal-gogh), [Sea Shells (Gogh)](colorschemes/s/index.md#sea-shells-gogh), [Seafoam Pastel (Gogh)](colorschemes/s/index.md#seafoam-pastel-gogh), @@ -625,7 +688,7 @@ As features stabilize some brief notes about them will accumulate here. [tokyonight-storm](colorschemes/t/index.md#tokyonight-storm), [Toy Chest (Gogh)](colorschemes/t/index.md#toy-chest-gogh), [Treehouse (Gogh)](colorschemes/t/index.md#treehouse-gogh), - [Twilight (dark) (terminal.sexy)](colorschemes/t/index.md#twilight-dark-terminal-sexy), + [Twilight (dark) (terminal.sexy)](colorschemes/t/index.md#twilight-dark-terminalsexy), [Twilight (Gogh)](colorschemes/t/index.md#twilight-gogh), [Urple (Gogh)](colorschemes/u/index.md#urple-gogh), [Vaughn (Gogh)](colorschemes/v/index.md#vaughn-gogh), @@ -867,8 +930,8 @@ As features stabilize some brief notes about them will accumulate here. [rose-pine](colorschemes/r/index.md#rose-pine), [rose-pine-dawn](colorschemes/r/index.md#rose-pine-dawn), [rose-pine-moon](colorschemes/r/index.md#rose-pine-moon), - [Solarized (dark) (terminal.sexy)](colorschemes/s/index.md#solarized-dark-terminal-sexy), - [tokyonight_moon](colorschemes/t/index.md#tokyonight-moon) + [Solarized (dark) (terminal.sexy)](colorschemes/s/index.md#solarized-dark-terminalsexy), + [tokyonight_moon](colorschemes/t/index.md) * [window:focus()](config/lua/window/focus.md), [ActivateWindow](config/lua/keyassignment/ActivateWindow.md), [ActivateWindowRelative](config/lua/keyassignment/ActivateWindowRelative.md), @@ -960,7 +1023,7 @@ As features stabilize some brief notes about them will accumulate here. reduces the render latency due to decoding frames; animations now render as soon as the first frame is decoded. [#3263](https://github.com/wez/wezterm/issues/3263) -* Improved compatiblity with the Kitty Image Protocol +* Improved compatibility with the Kitty Image Protocol [#2716](https://github.com/wez/wezterm/issues/2716) * [wezterm.time.call_after](config/lua/wezterm.time/call_after.md) would not work when used in an event callback. @@ -1210,7 +1273,7 @@ As features stabilize some brief notes about them will accumulate here. #### New -* Color schemes: [carbonfox](colorschemes/c/index.md#carbonfox), [DanQing Light (base16)](colorschemes/d/index.md#danqing-light-base16), [Dracula (Official)](colorschemes/d/index.md#dracula-official), [Poimandres](colorschemes/p/index.md#poimandres), [Poimandres Storm](colorschemes/p/index.md#poimandres-storm), [Sequoia Monochrome](colorschemes/s/index.md#sequoia-monochrome), [Sequoia Moonlight](colorschemes/s/index.md#sequoia-moonlight), [SynthwaveAlpha](colorschemes/s/index.md#synthwavealpha), [SynthwaveAlpha (Gogh)](colorschemes/s/index.md#synthwavealpha-gogh) +* Color schemes: [carbonfox](colorschemes/c/index.md#carbonfox), [DanQing Light (base16)](colorschemes/d/index.md#danqing-light-base16), [Dracula (Official)](colorschemes/d/index.md#dracula-official), [Poimandres](colorschemes/p/index.md#poimandres), [Poimandres Storm](colorschemes/p/index.md#poimandres-storm), [Sequoia Monochrome](colorschemes/s/index.md#sequoia-monochrome), [Sequoia Moonlight](colorschemes/s/index.md#sequoia-moonlight), [SynthwaveAlpha](colorschemes/s/index.md#synthwavealpha), [SynthwaveAlpha (Gogh)](colorschemes/s/index.md#synthwave-alpha-gogh) * [window_frame](config/lua/config/window_frame.md) now supports setting border size and color [#2417](https://github.com/wez/wezterm/issues/2417) * [CopyMode](copymode.md) now supports selecting and move by semantic zones. [#2346](https://github.com/wez/wezterm/issues/2346) * [max_fps](config/lua/config/max_fps.md) option to limit maximum frame rate [#2419](https://github.com/wez/wezterm/discussions/2419) @@ -1288,7 +1351,7 @@ As features stabilize some brief notes about them will accumulate here. * Internal scrollback datastructure improvements reduce per-cell overhead by up to ~40x depending on the composition of the line (lines with lots of varied attributes or image attachments will have more overhead). * Improved search performance * Quickselect: now defaults to searching 1000 lines above and below the current viewport, making it faster and the labels shorter for users with a larger scrollback. A new `scope_lines` parameter to [QuickSelectArgs](config/lua/keyassignment/QuickSelectArgs.md) allows controlling the search region explicitly. Thanks to [@yyogo](https://github.com/yyogo) for the initial PR! [#1317](https://github.com/wez/wezterm/pull/1317) -* OSC 10, 11 and 12 (Set Default Text Background, Default Text Foreground Color, and Text Cursor Color) now support setting the alpha component [#2313](https://github.com/wez/wezterm/issues/2313), and added [CSI 38:6](escape-sequences.md#csi-386---foreground-color-rgba), `CSI 48:6` and `CSI 58:6` extensions to allow setting full color RGB with Alpha channel for spans of text. +* OSC 10, 11 and 12 (Set Default Text Background, Default Text Foreground Color, and Text Cursor Color) now support setting the alpha component [#2313](https://github.com/wez/wezterm/issues/2313), and added [CSI 38:6](escape-sequences.md#csi-386-foreground-color-rgba), `CSI 48:6` and `CSI 58:6` extensions to allow setting full color RGB with Alpha channel for spans of text. * Copy Mode: setting the same selection mode a second time will now toggle off that mode and clear the selection, preserving the current position [#2246](https://github.com/wez/wezterm/discussions/2246) * Copy Mode: new default vim-style `y` "yank" key assignment will copy the selection and close copy mode @@ -1313,7 +1376,7 @@ As features stabilize some brief notes about them will accumulate here. * Mux: `wezterm.mux.set_active_workspace` didn't update the current window to match the newly activated workspace. [#2248](https://github.com/wez/wezterm/issues/2248) * Overlays such as debug and launcher menu now handle resize better * Shift-F1 through F4 generated different encoding than xterm [#2263](https://github.com/wez/wezterm/issues/2263) -* X11/Wayland: apps that extract the `Exec` field from wezterm.desktop (such as thunar, Dolphin and others) can now simply concatenate the command line they want to invoke, and it will spawn in the their current working directory. Thanks to [@Anomalocaridid](https://github.com/Anomalocaridid)! [#2271](https://github.com/wez/wezterm/pull/2271) [#2103](https://github.com/wez/wezterm/issues/2103) +* X11/Wayland: apps that extract the `Exec` field from wezterm.desktop (such as thunar, Dolphin and others) can now simply concatenate the command line they want to invoke, and it will spawn in the their current working directory. Thanks to [@Anomalocaridid](https://github.com/Anomalocaridid)! [#2271](https://github.com/wez/wezterm/pull/2271) [#2103](https://github.com/wez/wezterm/issues/2103) * [gui-startup](config/lua/gui-events/gui-startup.md) now passes a [SpawnCommand](config/lua/SpawnCommand.md) parameter representing the `wezterm start` command arguments. * Tab `x` button is no longer obscured by tab title text for long tab titles [#2269](https://github.com/wez/wezterm/issues/2269) * Cursor position could end up in the wrong place when rewrapping lines and the cursor was on the rewrap boundary [#2162](https://github.com/wez/wezterm/issues/2162) @@ -1348,11 +1411,11 @@ As features stabilize some brief notes about them will accumulate here. * In Copy Mode, `SHIFT-v` will enable line selection mode. Thanks to [@bew](https://github.com/bew)! [#2086](https://github.com/wez/wezterm/pull/2086) * In Copy Mode, `o` and `O` can be used to move the cursor to the other end of the selection, as in vim. Thanks to [@bew](https://github.com/bew)! [#2150](https://github.com/wez/wezterm/pull/2150) * Copy Mode: key assignments are [now configurable](copymode.md#configurable-key-assignments) [#993](https://github.com/wez/wezterm/issues/993) -* Search Mode: key assignments are [now configurable](scrollback.md#configurable-key-assignments) [#993](https://github.com/wez/wezterm/issues/993) +* Search Mode: key assignments are [now configurable](scrollback.md#configurable-search-mode-key-assignments) [#993](https://github.com/wez/wezterm/issues/993) * Search Mode: the default `CTRL-SHIFT-F` key assignment now defaults to the new `CurrentSelectionOrEmptyString` mode to search for the current selection text, if any. See [Search](config/lua/keyassignment/Search.md) for more info. * Copy Mode and Search Mode can be toggled and remember search results and cursor positioning, making it easier to locate and select text without using the mouse [#1592](https://github.com/wez/wezterm/issues/1592) * In the Launcher Menu, you may now use `CTRL-G` to cancel/exit the launcher [#1977](https://github.com/wez/wezterm/issues/1977) -* [cell_width](config/lua/config/cell_width.md) option to adjust the horizontal spacing when the availble font stretches are insufficient. [#1979](https://github.com/wez/wezterm/issues/1979) +* [cell_width](config/lua/config/cell_width.md) option to adjust the horizontal spacing when the available font stretches are insufficient. [#1979](https://github.com/wez/wezterm/issues/1979) * [min_scroll_bar_height](config/lua/config/min_scroll_bar_height.md) to control the minimum size of the scroll bar thumb [#1936](https://github.com/wez/wezterm/issues/1936) * [RotatePanes](config/lua/keyassignment/RotatePanes.md) key assignment for re-arranging the panes in a tab * [SplitPane](config/lua/keyassignment/SplitPane.md) key assignment that allows specifying the size and location of the split, as well as top-level (full width/height) splits. `wezterm cli split-pane --help` shows equivalent options you can use from the cli. [#578](https://github.com/wez/wezterm/issues/578) @@ -1362,7 +1425,7 @@ As features stabilize some brief notes about them will accumulate here. * [PaneSelect](config/lua/keyassignment/PaneSelect.md) key assignment to activate the pane selection UI to activate or swap the selected pane. [#1842](https://github.com/wez/wezterm/issues/1842) [#1975](https://github.com/wez/wezterm/issues/1975) * [window_background_gradient](config/lua/config/window_background_gradient.md) now also supports `Linear` gradients with an angle of your choice. Thanks to [@erf](https://github.com/erf)! [#2038](https://github.com/wez/wezterm/pull/2038) * RPM and DEB packages now install zsh and bash `wezterm` CLI completions -* Color schemes: [arcoiris](colorschemes/a/index.md#arcoiris), [duckbones](colorschemes/d/index.md#duckbones), [Grey-green](colorschemes/g/index.md#grey-green), [kanagawabones](colorschemes/k/index.md#kanagawabones), [Neon](colorschemes/n/index.md#neon), [neobones_dark](colorschemes/n/index.md#neobones_dark), [neobones_light](colorschemes/n/index.md#neobones_light), [seoulbones_dark](colorschemes/s/index.md#seoulbones_dark), [seoulbones_light](colorschemes/s/index.md#seoulbones_light), [tokyonight-day](colorschemes/t/index.md#tokyonight-day), [tokyonight-storm](colorschemes/t/index.md#tokyonight-storm), [tokyonight](colorschemes/t/index.md#tokyonight), [vimbones](colorschemes/v/index.md#vimbones), [zenbones](colorschemes/z/index.md#zenbones), [zenbones_dark](colorschemes/z/index.md#zenbones_dark), [zenbones_light](colorschemes/z/index.md#zenbones_light), [zenburned](colorschemes/z/index.md#zenburned), [zenwritten_dark](colorschemes/z/index.md#zenwritten_dark), [zenwritten_light](colorschemes/z/index.md#zenwritten_light) +* Color schemes: [arcoiris](colorschemes/a/index.md#arcoiris), [duckbones](colorschemes/d/index.md#duckbones), [Grey-green](colorschemes/g/index.md#grey-green), [kanagawabones](colorschemes/k/index.md#kanagawabones), [Neon](colorschemes/n/index.md#neon), [neobones_dark](colorschemes/n/index.md#neobones_dark), [neobones_light](colorschemes/n/index.md#neobones_light), [seoulbones_dark](colorschemes/s/index.md#seoulbones_dark), [seoulbones_light](colorschemes/s/index.md#seoulbones_light), [tokyonight-day](colorschemes/t/index.md#tokyonight-day), [tokyonight-storm](colorschemes/t/index.md#tokyonight-storm), [tokyonight](colorschemes/t/index.md#tokyonight), [vimbones](colorschemes/v/index.md#vimbones), [zenbones](colorschemes/z/index.md#zenbones), [zenbones_dark](colorschemes/z/index.md#zenbones_dark), [zenbones_light](colorschemes/z/index.md), [zenburned](colorschemes/z/index.md#zenburned), [zenwritten_dark](colorschemes/z/index.md#zenwritten_dark), [zenwritten_light](colorschemes/z/index.md#zenwritten_light) * [wezterm.GLOBAL](config/lua/wezterm/GLOBAL.md) for persisting lua data across config reloads * `wezterm show-keys` command to show key and mouse binding assignments [#2134](https://github.com/wez/wezterm/issues/2134) @@ -1444,7 +1507,7 @@ As features stabilize some brief notes about them will accumulate here. * X11: workaround i3-gaps not sending initial CONFIGURE_NOTIFY or FOCUS events, leading to weird initial window size and broken focus status. [#1710](https://github.com/wez/wezterm/issues/1710) [#1757](https://github.com/wez/wezterm/issues/1757) * Hyperlink rules with more captures than replacements could panic wezterm when text matched. [#1780](https://github.com/wez/wezterm/issues/1780) * Malformed XTGETTCAP response. [#1781](https://github.com/wez/wezterm/issues/1781) -* Multiplexer performance with images was unusuable for all but tiny images. [#1237](https://github.com/wez/wezterm/issues/1237) +* Multiplexer performance with images was unusable for all but tiny images. [#1237](https://github.com/wez/wezterm/issues/1237) * `CloseCurrentPane{confirm=false}` would leave behind a phantom tab/pane when used with the multiplexer. [#1277](https://github.com/wez/wezterm/issues/1277) * `CloseCurrentPane{confirm=true}` artifacts when used with the multiplexer. [#783](https://github.com/wez/wezterm/issues/783) * Scrollbar thumb could jump around/move out of bounds. Thanks to [@davidrios](https://github.com/davidrios)! [#1525](https://github.com/wez/wezterm/issues/1525) @@ -1539,7 +1602,7 @@ As features stabilize some brief notes about them will accumulate here. * [harfbuzz_features](config/font-shaping.md), [freetype_load_target](config/lua/config/freetype_load_target.md), [freetype_render_target](config/lua/config/freetype_render_target.md) and [freetype_load_flags](config/lua/config/freetype_load_flags.md) can now be overridden on a per-font basis as described in [wezterm.font](config/lua/wezterm/font.md) and [wezterm.font_with_fallback](config/lua/wezterm/font_with_fallback.md). * [ActivateTabRelativeNoWrap](config/lua/keyassignment/ActivateTabRelativeNoWrap.md) key assignment [#1414](https://github.com/wez/wezterm/issues/1414) * [QuickSelectArgs](config/lua/keyassignment/QuickSelectArgs.md) key assignment [#846](https://github.com/wez/wezterm/issues/846) [#1362](https://github.com/wez/wezterm/issues/1362) -* [wezterm.open_wth](config/lua/wezterm/open_with.md) function for opening URLs/documents with the default or a specific application [#1362](https://github.com/wez/wezterm/issues/1362) +* [wezterm.open_with](config/lua/wezterm/open_with.md) function for opening URLs/documents with the default or a specific application [#1362](https://github.com/wez/wezterm/issues/1362) * [pane:get_foreground_process_name()](config/lua/pane/get_foreground_process_name.md) method, [PaneInformation](config/lua/PaneInformation.md) now has `foreground_process_name` and `current_working_dir` fields, and [pane:get_current_working_dir](config/lua/pane/get_current_working_dir.md) is now supported on Windows for local processes, even without using OSC 7. [#1421](https://github.com/wez/wezterm/discussions/1421) [#915](https://github.com/wez/wezterm/issues/915) [#876](https://github.com/wez/wezterm/issues/876) * [ActivatePaneDirection](config/lua/keyassignment/ActivatePaneDirection.md) now also supports `"Next"` and `"Prev"` to cycle through panes [#976](https://github.com/wez/wezterm/issues/976) * [pane:get_logical_lines_as_text](config/lua/pane/get_logical_lines_as_text.md) to retrieve unwrapped logical lines from a pane [#1468](https://github.com/wez/wezterm/issues/1468) @@ -1844,7 +1907,7 @@ As features stabilize some brief notes about them will accumulate here. ### 20210314-114017-04b7cedd -* New: [tab_bar_style](config/lua/config/tab_bar_style.md) allows customizing the appearance of the rest of tha tab bar. +* New: [tab_bar_style](config/lua/config/tab_bar_style.md) allows customizing the appearance of the rest of the tab bar. * New: animated gif and png images displayed via `wezterm imgcat` (the iTerm2 image protocol), or attached to the window background via [window_background_image](config/appearance.md#window-background-image) will now animate while the window has focus. * New: added [foreground_text_hsb](config/lua/config/foreground_text_hsb.md) setting to adjust hue, saturation and brightness when text is rendered. * New: added [ResetFontAndWindowSize](config/lua/keyassignment/ResetFontAndWindowSize.md) key assignment. @@ -1861,7 +1924,7 @@ As features stabilize some brief notes about them will accumulate here. * New: [window:set_right_status](config/lua/window/set_right_status.md) allows setting additional status information in the tab bar. [#500](https://github.com/wez/wezterm/issues/500) * New: Search Mode: Added `CTRL-u` key assignment to clear the current search pattern. Thanks to [@bew](https://github.com/bew)! [#465](https://github.com/wez/wezterm/pull/465) * Fonts: `font_antialias` and `font_hinting` are now deprecated in favor of the new [freetype_load_target](config/lua/config/freetype_load_target.md) and [freetype_load_flags](config/lua/config/freetype_load_flags.md) options. The deprecated options have no effect and will be removed in a future release. The new options provide more direct control over how freetype rasterizes text. -* Fonts: when computing default `font_rules` for bold and italic fonts, strip italic and bold components from the family name. eg: if you set `font = wezterm.font("Source Code Pro Medium")` then the ` Medium` text will be stripped from the font name used to locate bold and italic variants so that we don't report an error loading a non-sensical `Source Code Pro Medium Bold`. [#456](https://github.com/wez/wezterm/issues/456) +* Fonts: when computing default `font_rules` for bold and italic fonts, strip italic and bold components from the family name. eg: if you set `font = wezterm.font("Source Code Pro Medium")` then the `Medium` text will be stripped from the font name used to locate bold and italic variants so that we don't report an error loading a non-sensical `Source Code Pro Medium Bold`. [#456](https://github.com/wez/wezterm/issues/456) * Fonts: fix a regression where bright windows behind wezterm could "shine through" on the alpha channel, and adjust the tinting operation to avoid anti-aliased dark fringes [#470](https://github.com/wez/wezterm/issues/470) [#491](https://github.com/wez/wezterm/issues/491) * Fonts: macOS: fix an issue where wezterm could hang when loading a font located via Core Text [#475](https://github.com/wez/wezterm/issues/475) * Fonts: Changed the default [font_size](config/lua/config/font_size.md) to 12 points. [#517](https://github.com/wez/wezterm/discussions/517) @@ -1935,7 +1998,7 @@ As features stabilize some brief notes about them will accumulate here. * macOS: Windows now have drop-shadows when they are opaque. These were disabled due transparency support was added. Thanks to [Rice](https://github.com/fanzeyi)! [#445](https://github.com/wez/wezterm/pull/445) * Unix: adjust font-config patterns to also match "dual spacing" fonts such as [Iosevka Term](https://typeof.net/Iosevka/). Thanks to [Leiser](https://github.com/leiserfg)! [#446](https://github.com/wez/wezterm/pull/446) * New: Added [alternate_buffer_wheel_scroll_speed](config/lua/config/alternate_buffer_wheel_scroll_speed.md) option to control how many cursor key presses are generated by the mouse wheel when the alternate screen is active. The new default for this is a faster-than-previous-releases 3 lines per wheel tick. [#432](https://github.com/wez/wezterm/issues/432) -* macOS: Dead Keys are now processed even when `use_ime=false`. [More details in the docs](config/keys.md#macos-left-and-right-option-key). [#410](https://github.com/wez/wezterm/issues/410). +* macOS: Dead Keys are now processed even when `use_ime=false`. [More details in the docs](config/keyboard-concepts.md#macos-left-and-right-option-key). [#410](https://github.com/wez/wezterm/issues/410). * X11: attempt to load cursors from the XCursor.theme resource specified on the root window [#524](https://github.com/wez/wezterm/issues/524) * Added `file://` URL matching to the default list of implicit hyperlink rules [#525](https://github.com/wez/wezterm/issues/525) diff --git a/docs/colorschemes/data.json b/docs/colorschemes/data.json index 31627f2a29a..ae75e351c48 100644 --- a/docs/colorschemes/data.json +++ b/docs/colorschemes/data.json @@ -1337,6 +1337,43 @@ "wezterm_version": "20220807-113146-c2fee766" } }, + { + "colors": { + "ansi": [ + "#111317", + "#f8747e", + "#75ad47", + "#d09214", + "#50a4e9", + "#cc83e3", + "#00b298", + "#adb0bb" + ], + "background": "#1a1d23", + "brights": [ + "#576176", + "#faa5ab", + "#a5cd84", + "#efbd58", + "#8dc3f1", + "#deaeed", + "#27ffdf", + "#caccd3" + ], + "cursor_bg": "#caccd3", + "cursor_border": "#caccd3", + "cursor_fg": "#1a1d23", + "foreground": "#9b9fa9", + "indexed": {} + }, + "metadata": { + "aliases": [], + "name": "Astrodark (Gogh)", + "origin_url": "https://github.com/Gogh-Co/Gogh", + "prefix": "a", + "wezterm_version": "nightly builds only" + } + }, { "colors": { "ansi": [ @@ -5037,6 +5074,43 @@ "wezterm_version": "20230712-072601-f4abf8fd" } }, + { + "colors": { + "ansi": [ + "#362c24", + "#b10b00", + "#007232", + "#8b4c00", + "#005cb4", + "#9b0097", + "#006a78", + "#d4c3b7" + ], + "background": "#f1ebe6", + "brights": [ + "#514337", + "#de1100", + "#008f40", + "#ae6000", + "#0074e1", + "#c300bd", + "#008697", + "#eae1da" + ], + "cursor_bg": "#362c24", + "cursor_border": "#362c24", + "cursor_fg": "#f1ebe6", + "foreground": "#362c24", + "indexed": {} + }, + "metadata": { + "aliases": [], + "name": "Breadog (Gogh)", + "origin_url": "https://github.com/Gogh-Co/Gogh", + "prefix": "b", + "wezterm_version": "nightly builds only" + } + }, { "colors": { "ansi": [ @@ -7670,6 +7744,43 @@ "wezterm_version": "20220807-113146-c2fee766" } }, + { + "colors": { + "ansi": [ + "#41505e", + "#d95468", + "#8bd49c", + "#ebbf83", + "#539afc", + "#b62d65", + "#70e1e8", + "#ffffff" + ], + "background": "#171d23", + "brights": [ + "#41505e", + "#d95468", + "#8bd49c", + "#ebbf83", + "#539afc", + "#b62d65", + "#70e1e8", + "#ffffff" + ], + "cursor_bg": "#008b94", + "cursor_border": "#008b94", + "cursor_fg": "#171d23", + "foreground": "#ffffff", + "indexed": {} + }, + "metadata": { + "aliases": [], + "name": "City Lights (Gogh)", + "origin_url": "https://github.com/Gogh-Co/Gogh", + "prefix": "c", + "wezterm_version": "nightly builds only" + } + }, { "colors": { "ansi": [ @@ -8643,7 +8754,7 @@ ], "background": "#181818", "brights": [ - "#373b41", + "#88847f", "#e5a1a3", "#e8d6a7", "#f1bb79", @@ -19309,6 +19420,43 @@ "wezterm_version": "Always" } }, + { + "colors": { + "ansi": [ + "#161821", + "#e27878", + "#b4be82", + "#e2a478", + "#84a0c6", + "#a093c7", + "#89b8c2", + "#c6c8d1" + ], + "background": "#161821", + "brights": [ + "#6b7089", + "#e98989", + "#c0ca8e", + "#e9b189", + "#91acd1", + "#ada0d3", + "#95c4ce", + "#d2d4de" + ], + "cursor_bg": "#d2d4de", + "cursor_border": "#d2d4de", + "cursor_fg": "#161821", + "foreground": "#c6c8d1", + "indexed": {} + }, + "metadata": { + "aliases": [], + "name": "Iceberg (Gogh)", + "origin_url": "https://github.com/Gogh-Co/Gogh", + "prefix": "i", + "wezterm_version": "nightly builds only" + } + }, { "colors": { "ansi": [ @@ -21091,6 +21239,45 @@ "wezterm_version": "Always" } }, + { + "colors": { + "ansi": [ + "#333333", + "#b66056", + "#85b1a9", + "#dbbb43", + "#6890d7", + "#887aa3", + "#837369", + "#ddd0c4" + ], + "background": "#141515", + "brights": [ + "#515151", + "#ffc663", + "#c1ffae", + "#fff700", + "#a1d9ff", + "#a994ff", + "#f9cfb9", + "#ffffff" + ], + "cursor_bg": "#702420", + "cursor_border": "#702420", + "cursor_fg": "#fefbf3", + "foreground": "#ddd0c4", + "indexed": {}, + "selection_bg": "#515151", + "selection_fg": "#ffc663" + }, + "metadata": { + "aliases": [], + "name": "kurokula", + "origin_url": "https://github.com/mbadolato/iTerm2-Color-Schemes", + "prefix": "k", + "wezterm_version": "nightly builds only" + } + }, { "colors": { "ansi": [ @@ -28040,6 +28227,43 @@ "wezterm_version": "20220807-113146-c2fee766" } }, + { + "colors": { + "ansi": [ + "#000000", + "#cc3e28", + "#216609", + "#b58900", + "#1e6fcc", + "#5c21a5", + "#158c86", + "#aaaaaa" + ], + "background": "#f2eede", + "brights": [ + "#555555", + "#cc3e28", + "#216609", + "#b58900", + "#1e6fcc", + "#5c21a5", + "#158c86", + "#aaaaaa" + ], + "cursor_bg": "#000000", + "cursor_border": "#000000", + "cursor_fg": "#f2eede", + "foreground": "#000000", + "indexed": {} + }, + "metadata": { + "aliases": [], + "name": "Paper (Gogh)", + "origin_url": "https://github.com/Gogh-Co/Gogh", + "prefix": "p", + "wezterm_version": "nightly builds only" + } + }, { "colors": { "ansi": [ @@ -34531,6 +34755,46 @@ "wezterm_version": "Always" } }, + { + "colors": { + "ansi": [ + "#111147", + "#5ca8dc", + "#53b397", + "#249a84", + "#db7ddd", + "#d0beee", + "#f9f3f9", + "#a175d4" + ], + "background": "#111147", + "brights": [ + "#111147", + "#5cb5dc", + "#52deb5", + "#01f5c7", + "#fa5dfd", + "#c6a5fd", + "#ffffff", + "#b577fd" + ], + "cursor_bg": "#53b397", + "cursor_border": "#53b397", + "cursor_fg": "#53b397", + "foreground": "#db7ddd", + "indexed": {}, + "selection_bg": "#5ca8dc", + "selection_fg": "#d0beee" + }, + "metadata": { + "aliases": [], + "author": "lemonlime0x3C33 (https://github.com/lemonlime0x3C33)", + "name": "Sugarplum", + "origin_url": "https://github.com/mbadolato/iTerm2-Color-Schemes", + "prefix": "s", + "wezterm_version": "nightly builds only" + } + }, { "colors": { "ansi": [ @@ -36799,7 +37063,7 @@ { "colors": { "ansi": [ - "#e9e9ed", + "#b4b5b9", "#f52a65", "#587539", "#8c6c3e", @@ -36826,13 +37090,13 @@ "foreground": "#3760bf", "indexed": {}, "scrollbar_thumb": "#c4c8da", - "selection_bg": "#b6bfe2", + "selection_bg": "#b7c1e3", "selection_fg": "#3760bf", "split": "#2e7de9", "tab_bar": { "active_tab": { "bg_color": "#2e7de9", - "fg_color": "#e9e9ec", + "fg_color": "#d0d5e3", "intensity": "Normal", "italic": false, "strikethrough": false, @@ -36847,7 +37111,7 @@ "strikethrough": false, "underline": "None" }, - "inactive_tab_edge": "#e9e9ec", + "inactive_tab_edge": "#d0d5e3", "inactive_tab_hover": { "bg_color": "#c4c8da", "fg_color": "#2e7de9", @@ -38671,6 +38935,45 @@ "wezterm_version": "20230712-072601-f4abf8fd" } }, + { + "colors": { + "ansi": [ + "#101010", + "#f5a191", + "#90b99f", + "#e6b99d", + "#aca1cf", + "#e29eca", + "#ea83a5", + "#a0a0a0" + ], + "background": "#101010", + "brights": [ + "#7e7e7e", + "#ff8080", + "#99ffe4", + "#ffc799", + "#b9aeda", + "#ecaad6", + "#f591b2", + "#ffffff" + ], + "cursor_bg": "#acb1ab", + "cursor_border": "#acb1ab", + "cursor_fg": "#ffffff", + "foreground": "#ffffff", + "indexed": {}, + "selection_bg": "#988049", + "selection_fg": "#acb1ab" + }, + "metadata": { + "aliases": [], + "name": "Vesper", + "origin_url": "https://github.com/mbadolato/iTerm2-Color-Schemes", + "prefix": "v", + "wezterm_version": "nightly builds only" + } + }, { "colors": { "ansi": [ diff --git a/docs/config/appearance.md b/docs/config/appearance.md index bd8955f8864..f3856f9edd8 100644 --- a/docs/config/appearance.md +++ b/docs/config/appearance.md @@ -222,7 +222,7 @@ builting color scheme. ### Defining a Color Scheme in a separate file If you'd like to factor your color schemes out into separate files, you -can create a file with a `[colors]` section; take a look at [one of +can create a [TOML format](https://toml.io/en/) file with a `[colors]` section; take a look at [one of the available color schemes for an example](https://github.com/wez/wezterm/tree/main/config/src/scheme_data.rs). It is recommended that you place your custom scheme in a directory @@ -410,7 +410,7 @@ To make it easier to see which pane is active, the inactive panes are dimmed and de-saturated slightly. You can specify your own transformation to the pane colors with a hue, -saturation, brightness (HSB) multipler. +saturation, brightness (HSB) multiplier. In this example, inactive panes will be slightly de-saturated and dimmed; this is the default configuration: @@ -481,8 +481,8 @@ config.window_background_image_hsb = { } ``` -See [Styling Inactive Panes](#style-inactive-panes) for more information -on hue, saturation, brigthness transformations. +See [Styling Inactive Panes](#styling-inactive-panes) for more information +on hue, saturation, brightness transformations. If you'd like to have control over scaling, tiling/repeating, scrolling behavior and more, take a look at the more powerful diff --git a/docs/config/keyboard-concepts.md b/docs/config/keyboard-concepts.md index 13729aa67d2..b0fee65f23e 100644 --- a/docs/config/keyboard-concepts.md +++ b/docs/config/keyboard-concepts.md @@ -121,7 +121,7 @@ WezTerm is now able to perform dead-key expansion when `use_ime = false`. Dead keys are treated as composition effects, so with the default settings of `send_composed_key_when_left_alt_is_pressed` and `send_composed_key_when_right_alt_is_pressed` above, in a US layout, `Left-Opt -n` will produce `Alt N` and `Right-Opt n` will will for a subsequent key press +n` will produce `Alt N` and `Right-Opt n` will for a subsequent key press before generating an event; `Right-Opt n SPACE` will emit `~` whereas `Right-Opt n n` will emit `ñ`. diff --git a/docs/config/lua/MuxTab/panes_with_info.md b/docs/config/lua/MuxTab/panes_with_info.md index f50676bb442..beb9f173f7c 100644 --- a/docs/config/lua/MuxTab/panes_with_info.md +++ b/docs/config/lua/MuxTab/panes_with_info.md @@ -8,7 +8,7 @@ contained by this tab. Each element is a lua table with the following fields: * `index` - the topological pane index -* `is_active` - a boolean indicating whether this is the active pane withing the tab +* `is_active` - a boolean indicating whether this is the active pane within the tab * `is_zoomed` - a boolean indicating whether this pane is zoomed * `left` - The offset from the top left corner of the containing tab to the top left corner of this pane, in cells. * `top` - The offset from the top left corner of the containing tab to the top left corner of this pane, in cells. @@ -17,5 +17,3 @@ Each element is a lua table with the following fields: * `pixel_width` - The width of this pane in pixels * `pixel_height` - The height of this pane in pixels * `pane` - The [Pane](../pane/index.md) object - - diff --git a/docs/config/lua/config/background.md b/docs/config/lua/config/background.md index cb041e40d93..16ae9eeff3c 100644 --- a/docs/config/lua/config/background.md +++ b/docs/config/lua/config/background.md @@ -59,7 +59,7 @@ A layer is a lua table with the following fields: * `"Right"` * `horizontal_offset` - like `vertical_offset` but applies to the x-direction. * `opacity` - a number in the range `0` through `1.0` inclusive that is multiplied with the alpha channel of the source to adjust the opacity of the layer. The default is `1.0` to use the source alpha channel as-is. Using a smaller value makes the layer less opaque/more transparent. -* `hsb` - a hue, saturation, brightness tranformation that can be used to adjust those attributes of the layer. See [foreground_text_hsb](foreground_text_hsb.md) for more information about this kind of transform. +* `hsb` - a hue, saturation, brightness transformation that can be used to adjust those attributes of the layer. See [foreground_text_hsb](foreground_text_hsb.md) for more information about this kind of transform. * `height` - controls the height of the image. The following values are accepted: * `"Cover"` (this is the default) - Scales the image, preserving aspect ratio, to the smallest possible size to fill the viewport, leaving no empty space. If the aspect ratio of the viewport differs from the image, the image is cropped. * `"Contain"` - Scales the image as large as possible without cropping or stretching. If the viewport is larger than the image, tiles the image unless `repeat_y` is set to `"NoRepeat"`. diff --git a/docs/config/lua/config/freetype_load_flags.md b/docs/config/lua/config/freetype_load_flags.md index d1ec0afb794..56484b55880 100644 --- a/docs/config/lua/config/freetype_load_flags.md +++ b/docs/config/lua/config/freetype_load_flags.md @@ -19,7 +19,7 @@ Available flags are: anti-aliased modes, but that was written for rasterizing direct to bitmaps. In the context of wezterm where we are rasterizing to a texture that is then sampled and applied to a framebuffer through vertices on the GPU, the hinting - process can be counter-productive and result in unexpect visual artifacts. + process can be counter-productive and result in unexpected visual artifacts. * `NO_BITMAP` - don't load any pre-rendered bitmap strikes * `FORCE_AUTOHINT` - Use the freetype auto-hinter rather than the font's native hinter. diff --git a/docs/config/lua/config/ime_preedit_rendering.md b/docs/config/lua/config/ime_preedit_rendering.md index eea7afe58e0..717188a7924 100644 --- a/docs/config/lua/config/ime_preedit_rendering.md +++ b/docs/config/lua/config/ime_preedit_rendering.md @@ -27,7 +27,7 @@ WezTerm supports the following IME preedit rendering. to avoid the truncated displaying of IME preedit but has a worse look and feel compared to "Builtin" rendering. -You can control IME preedit rendering in your configuraiton file: +You can control IME preedit rendering in your configuration file: ```lua config.ime_preedit_rendering = 'System' diff --git a/docs/config/lua/config/launch_menu.md b/docs/config/lua/config/launch_menu.md index a372647bab8..5f3188b0c4a 100644 --- a/docs/config/lua/config/launch_menu.md +++ b/docs/config/lua/config/launch_menu.md @@ -7,7 +7,7 @@ tags: {{since('20200503-171512-b13ef15f')}} -You can define your own entries for the [Launcher Menu](../../launch.md) +You can define your own entries for the [Launcher Menu](../../launch.md#the-launcher-menu) using this configuration setting. The snippet below adds two new entries to the menu; one that runs the `top` program to monitor process activity and a second one that explicitly launches the `bash` shell. diff --git a/docs/config/lua/config/quick_select_patterns.md b/docs/config/lua/config/quick_select_patterns.md index e0010659314..8b9d0d8a106 100644 --- a/docs/config/lua/config/quick_select_patterns.md +++ b/docs/config/lua/config/quick_select_patterns.md @@ -17,6 +17,12 @@ config.quick_select_patterns = { } ``` +!!! note + If you want to use capture groups in your patterns, you must use + non-capturing groups `(?:)` for them to work as you intend, as + the overall list of `quick_select_patterns` is compiled into a larger + alternation regex that itself uses capture groups. + {{since('20230408-112425-69ae8472', outline=True)}} The regex syntax now supports backreferences and look around assertions. See [Fancy Regex Syntax](https://docs.rs/fancy-regex/latest/fancy_regex/#syntax) diff --git a/docs/config/lua/config/serial_ports.md b/docs/config/lua/config/serial_ports.md index 07717d99ff7..e0904bd801d 100644 --- a/docs/config/lua/config/serial_ports.md +++ b/docs/config/lua/config/serial_ports.md @@ -13,7 +13,7 @@ Each entry defines a `SerialDomain` with the following fields: all multiplexer domains in your configuration. * `port` - the name of the serial device. On Windows systems this can be a name like `COM0`. On Posix systems this will be a device path something - like `/dev/ttyUSB0`. If omitted, the `name` field be be interpreted as + like `/dev/ttyUSB0`. If omitted, the `name` field be interpreted as the port name. * `baud` - the communication speed to assign to the port. If omitted, the default baud rate will be 9600. diff --git a/docs/config/lua/config/show_close_tab_button_in_tabs.md b/docs/config/lua/config/show_close_tab_button_in_tabs.md new file mode 100644 index 00000000000..56a2ca0c7a8 --- /dev/null +++ b/docs/config/lua/config/show_close_tab_button_in_tabs.md @@ -0,0 +1,16 @@ +--- +tags: + - appearance + - tab_bar +--- + +# `show_close_tab_button_in_tabs = true` + +{{since('nightly')}} + +When set to `false`, the close-tab button will not be drawn in tabs when the +fancy tab bar is in use. Default is `true`. + +```lua +config.show_close_tab_button_in_tabs = false +``` diff --git a/docs/config/lua/config/tab_bar_style.md b/docs/config/lua/config/tab_bar_style.md index 194a4959c04..cce670630bb 100644 --- a/docs/config/lua/config/tab_bar_style.md +++ b/docs/config/lua/config/tab_bar_style.md @@ -19,7 +19,7 @@ have been removed and replaced by the more flexible {{since('20210314-114017-04b7cedd')}} This config option allows styling the elements that appear in the tab bar. -This configuration supplements the [tab bar color](../../appearance.md#tab-bar-appearance--colors) +This configuration supplements the [tab bar color](../../appearance.md#tab-bar-appearance-colors) options. Styling in this context refers to how the edges of the tabs and the new tab button are rendered. diff --git a/docs/config/lua/config/window_background_gradient.md b/docs/config/lua/config/window_background_gradient.md index 9cd7b04afd4..3c9c6506695 100644 --- a/docs/config/lua/config/window_background_gradient.md +++ b/docs/config/lua/config/window_background_gradient.md @@ -91,7 +91,7 @@ that is moving from the top left corner down to the bottom right corner. ```lua config.window_background_gradient = { colors = { '#EEBD89', '#D13ABD' }, - -- Specifices a Linear gradient starting in the top left corner. + -- Specifies a Linear gradient starting in the top left corner. orientation = { Linear = { angle = -45.0 } }, } ``` diff --git a/docs/config/lua/config/window_decorations.md b/docs/config/lua/config/window_decorations.md index 23d09977a68..f668fc7b0f3 100644 --- a/docs/config/lua/config/window_decorations.md +++ b/docs/config/lua/config/window_decorations.md @@ -8,7 +8,7 @@ tags: Configures whether the window has a title bar and/or resizable border. -The value is a set of of flags: +The value is a set of flags: * `window_decorations = "NONE"` - disables titlebar and border (borderless mode), but causes problems with resizing and minimizing the window, so you diff --git a/docs/config/lua/gui-events/gui-startup.md b/docs/config/lua/gui-events/gui-startup.md index 52a0826e48c..8964918738a 100644 --- a/docs/config/lua/gui-events/gui-startup.md +++ b/docs/config/lua/gui-events/gui-startup.md @@ -97,7 +97,7 @@ wezterm.on('gui-startup', function(cmd) build_pane:send_text 'cargo build\n' -- A workspace for interacting with a local machine that - -- runs some docker containners for home automation + -- runs some docker containers for home automation local tab, pane, window = mux.spawn_window { workspace = 'automation', args = { 'ssh', 'vault' }, @@ -111,5 +111,6 @@ return config ``` See also: + * [wezterm.mux](../wezterm.mux/index.md) * [gui-attached](gui-attached.md). diff --git a/docs/config/lua/keyassignment/InputSelector.md b/docs/config/lua/keyassignment/InputSelector.md index bd6d9ca09bc..37a1e011697 100644 --- a/docs/config/lua/keyassignment/InputSelector.md +++ b/docs/config/lua/keyassignment/InputSelector.md @@ -15,8 +15,8 @@ upon the input. is itself a table with a `label` field and an optional `id` field. The label will be shown in the list, while the id can be a different string that is meaningful to your action. The label can be used together - with [wezterm.format](../wezterm/format.md) to produce styled test. -* `action` - and event callback registerd via `wezterm.action_callback`. The + with [wezterm.format](../wezterm/format.md) to produce styled text. +* `action` - and event callback registered via `wezterm.action_callback`. The callback's function signature is `(window, pane, id, label)` where `window` and `pane` are the [Window](../window/index.md) and [Pane](../pane/index.md) objects from the current pane and window, and `id` and `label` hold the diff --git a/docs/config/lua/keyassignment/PromptInputLine.md b/docs/config/lua/keyassignment/PromptInputLine.md index e571376d5c7..890bd63bd05 100644 --- a/docs/config/lua/keyassignment/PromptInputLine.md +++ b/docs/config/lua/keyassignment/PromptInputLine.md @@ -8,16 +8,21 @@ from the user. When the user enters the line, emits an event that allows you to act upon the input. -`PromptInputLine` accepts two fields: +`PromptInputLine` accepts four fields: * `description` - the text to show at the top of the display area. You may embed escape sequences and/or use [wezterm.format](../wezterm/format.md). -* `action` - and event callback registerd via `wezterm.action_callback`. The +* `action` - and event callback registered via `wezterm.action_callback`. The callback's function signature is `(window, pane, line)` where `window` and `pane` are the [Window](../window/index.md) and [Pane](../pane/index.md) objects from the current pane and window, and `line` is the text that the user entered. `line` may be `nil` if they hit Escape without entering anything, or CTRL-C to cancel the input. +* `prompt` - the text to show as the prompt. You may embed escape sequences + and/or use [wezterm.format](../wezterm/format.md). Defaults to: `"> "`. {{since('nightly', inline=True)}} +* `initial_value` - optional. If provided, the initial content of the input + field will be set to this value. The user may edit it prior to submitting + the input. {{since('nightly', inline=True)}} ## Example of interactively renaming the current tab @@ -32,6 +37,7 @@ config.keys = { mods = 'CTRL|SHIFT', action = act.PromptInputLine { description = 'Enter new name for tab', + initial_value = 'My Tab Name', action = wezterm.action_callback(function(window, pane, line) -- line will be `nil` if they hit escape without entering anything -- An empty string if they just hit enter diff --git a/docs/config/lua/wezterm/glob.md b/docs/config/lua/wezterm/glob.md index 938d4343494..c6f0a3c6b9f 100644 --- a/docs/config/lua/wezterm/glob.md +++ b/docs/config/lua/wezterm/glob.md @@ -9,7 +9,7 @@ tags: {{since('20200503-171512-b13ef15f')}} -This function evalutes the glob `pattern` and returns an array containing the +This function evaluates the glob `pattern` and returns an array containing the absolute file names of the matching results. Due to limitations in the lua bindings, all of the paths must be able to be represented as UTF-8 or this function will generate an error. diff --git a/docs/config/lua/window-events/augment-command-palette.md b/docs/config/lua/window-events/augment-command-palette.md index 9991352cdec..0c63ed8db54 100644 --- a/docs/config/lua/window-events/augment-command-palette.md +++ b/docs/config/lua/window-events/augment-command-palette.md @@ -39,6 +39,7 @@ wezterm.on('augment-command-palette', function(window, pane) action = act.PromptInputLine { description = 'Enter new name for tab', + initial_value = 'My Tab Name', action = wezterm.action_callback(function(window, pane, line) if line then window:active_tab():set_title(line) diff --git a/docs/escape-sequences.md b/docs/escape-sequences.md index b18ddee4311..ef07219d851 100644 --- a/docs/escape-sequences.md +++ b/docs/escape-sequences.md @@ -31,7 +31,7 @@ applied to the terminal display using the following rules: * If DEC line drawing mode is active, graphemes `j-n`, `q`, `t-x` are translated to equivalent line drawing graphemes and processing continues. * If prior output/actions require it, the cursor position may be moved to a new line - and the terminal display may be scrolled to make accomodate it. + and the terminal display may be scrolled to make accommodate it. * An appropriate number of cells, starting at the current cursor position, are allocated based on the column width of the current grapheme and are assigned to the grapheme. The current current graphics rendition state (such as colors diff --git a/docs/examples/default-copy-mode-key-table.markdown b/docs/examples/default-copy-mode-key-table.markdown index 8050f9d77c3..a70497b5dad 100644 --- a/docs/examples/default-copy-mode-key-table.markdown +++ b/docs/examples/default-copy-mode-key-table.markdown @@ -16,7 +16,14 @@ return { mods = 'NONE', action = act.CopyMode 'MoveToStartOfNextLine', }, - { key = 'Escape', mods = 'NONE', action = act.CopyMode 'Close' }, + { + key = 'Escape', + mods = 'NONE', + action = act.Multiple { + { CopyMode = 'ScrollToBottom' }, + { CopyMode = 'Close' }, + }, + }, { key = 'Space', mods = 'NONE', @@ -124,7 +131,14 @@ return { { key = 'b', mods = 'NONE', action = act.CopyMode 'MoveBackwardWord' }, { key = 'b', mods = 'ALT', action = act.CopyMode 'MoveBackwardWord' }, { key = 'b', mods = 'CTRL', action = act.CopyMode 'PageUp' }, - { key = 'c', mods = 'CTRL', action = act.CopyMode 'Close' }, + { + key = 'c', + mods = 'CTRL', + action = act.Multiple { + { CopyMode = 'ScrollToBottom' }, + { CopyMode = 'Close' }, + }, + }, { key = 'd', mods = 'CTRL', @@ -147,7 +161,14 @@ return { mods = 'NONE', action = act.CopyMode 'MoveToScrollbackTop', }, - { key = 'g', mods = 'CTRL', action = act.CopyMode 'Close' }, + { + key = 'g', + mods = 'CTRL', + action = act.Multiple { + { CopyMode = 'ScrollToBottom' }, + { CopyMode = 'Close' }, + }, + }, { key = 'h', mods = 'NONE', action = act.CopyMode 'MoveLeft' }, { key = 'j', mods = 'NONE', action = act.CopyMode 'MoveDown' }, { key = 'k', mods = 'NONE', action = act.CopyMode 'MoveUp' }, @@ -162,7 +183,14 @@ return { mods = 'NONE', action = act.CopyMode 'MoveToSelectionOtherEnd', }, - { key = 'q', mods = 'NONE', action = act.CopyMode 'Close' }, + { + key = 'q', + mods = 'NONE', + action = act.Multiple { + { CopyMode = 'ScrollToBottom' }, + { CopyMode = 'Close' }, + }, + }, { key = 't', mods = 'NONE', @@ -189,6 +217,7 @@ return { mods = 'NONE', action = act.Multiple { { CopyTo = 'ClipboardAndPrimarySelection' }, + { CopyMode = 'ScrollToBottom' }, { CopyMode = 'Close' }, }, }, diff --git a/docs/faq.md b/docs/faq.md index ed69e18c44c..f171d2f327f 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -371,13 +371,8 @@ and another other option is to explicitly set the PATH up: ```lua config.set_environment_variables = { - PATH = { - -- prepend the path to your utility - wezterm.home_dir - .. '/.local/bob/nvim-bin:' - -- and include the rest of the PATH - .. os.getenv 'PATH', - }, + -- prepend the path to your utility and include the rest of the PATH + PATH = wezterm.home_dir .. '/.local/bob/nvim-bin:' .. os.getenv 'PATH', } ``` diff --git a/docs/features.md b/docs/features.md index 127b4dd53f6..6f4bba995c2 100644 --- a/docs/features.md +++ b/docs/features.md @@ -7,7 +7,7 @@ hide: * Runs on Linux, macOS, Windows 10 and FreeBSD * [Multiplex terminal panes, tabs and windows on local and remote hosts, with native mouse and scrollback](multiplexing.md) -* Ligatures, Color Emoji and font fallback, with true color and [dynamic color schemes](config/appearance.md#colors). +* Ligatures, Color Emoji and font fallback, with true color and [dynamic color schemes](config/appearance.md). * [Hyperlinks](hyperlinks.md) * [Searchable Scrollback](scrollback.md) (use mouse wheel and `Shift-PageUp` and `Shift PageDown` to navigate, Ctrl-Shift-F to activate search mode) * xterm style selection of text with mouse; paste selection via `Shift-Insert` (bracketed paste is supported!) diff --git a/docs/index.md b/docs/index.md index ad360b78c37..143fb0e409c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -13,7 +13,7 @@ hide: * Runs on Linux, macOS, Windows 10 and FreeBSD * [Multiplex terminal panes, tabs and windows on local and remote hosts, with native mouse and scrollback](multiplexing.md) -* Ligatures, Color Emoji and font fallback, with true color and [dynamic color schemes](config/appearance.md#colors). +* Ligatures, Color Emoji and font fallback, with true color and [dynamic color schemes](config/appearance.md). * [Hyperlinks](hyperlinks.md) * [A full list of features can be found here](features.md) diff --git a/docs/install/linux.md b/docs/install/linux.md index d19b691713d..341cf0a1bda 100644 --- a/docs/install/linux.md +++ b/docs/install/linux.md @@ -100,8 +100,8 @@ hide: steps: ```console - $ curl -fsSL https://apt.fury.io/wez/gpg.key | sudo gpg --yes --dearmor -o /usr/share/keyrings/wezterm-fury.gpg - $ echo 'deb [signed-by=/usr/share/keyrings/wezterm-fury.gpg] https://apt.fury.io/wez/ * *' | sudo tee /etc/apt/sources.list.d/wezterm.list + $ curl -fsSL https://apt.fury.io/wez/gpg.key | sudo gpg --yes --dearmor -o /etc/apt/keyrings/wezterm-fury.gpg + $ echo 'deb [signed-by=/etc/apt/keyrings/wezterm-fury.gpg] https://apt.fury.io/wez/ * *' | sudo tee /etc/apt/sources.list.d/wezterm.list ``` Update your dependencies: @@ -139,6 +139,7 @@ hide: |------------|----------|--------|--------|------------| |Ubuntu20 |[amd64]({{ ubuntu20_deb_stable }}) ||[amd64]({{ ubuntu20_deb_nightly }})| | |Ubuntu22 |[amd64]({{ ubuntu22_deb_stable }}) |[arm64]({{ ubuntu22_arm64_deb_stable}})|[amd64]({{ ubuntu22_deb_nightly }})|[arm64]({{ ubuntu22_arm64_deb_nightly}})| + |Ubuntu24 |Nightly Only |Nightly Only |[amd64]({{ ubuntu24_deb_nightly }})|[arm64]({{ ubuntu24_arm64_deb_nightly}})| |Debian10 |[amd64]({{ debian10_deb_stable }}) ||[amd64]({{ debian10_deb_nightly }})| | |Debian11 |[amd64]({{ debian11_deb_stable }}) ||[amd64]({{ debian11_deb_nightly }})| | |Debian12 |[amd64]({{ debian12_deb_stable }}) |[arm64]({{ debian12_arm64_deb_stable }})|[amd64]({{ debian12_deb_nightly }})|[arm64]({{ debian12_arm64_deb_nightly }}) | @@ -286,6 +287,91 @@ hide: $ brew rm wezterm $ brew install --HEAD wezterm ``` +=== "Nix/NixOS" + + ## Nix + + WezTerm is available in nixpkgs as `wezterm`. + + ```nix + { + # configuration.nix + + environment.systemPackages = [ + pkgs.wezterm + ] + } + ``` + + ### Flake + + If you need a newer version use the flake. Use the cachix if you want to avoid building WezTerm from source. + + The flake is in the `nix` directory, so the url will be something like `github:wez/wezterm?dir=nix` + + Here's an example for NixOS configurations: + + ```nix + { + inputs.wezterm.url = "github:wez/wezterm?dir=nix"; + # ... + + outputs = inputs @ {nixpkgs, ...}:{ + nixosConfigurations.HOSTNAME = nixpkgs.lib.nixosSystem { + specialArgs = { inherit inputs; }; # Make sure you pass inputs through to your nixosConfiguration like this + modules = [ + # ... + ]; + }; + }; + } + ``` + And for home-manager you can do the following: + + ```nix + # flake.nix + + { + inputs.wezterm.url = "github:wez/wezterm?dir=nix"; + # ... + + outputs = inputs @ {nixpkgs, home-manager, ...}:{ + homeConfigurations."user@HOSTNAME" = home-manager.lib.homeManagerConfiguration { + pkgs = nixpkgs.legacyPackages.x86_64-linux; + extraSpecialArgs = { inherit inputs; }; # Pass inputs to homeManagerConfiguration + modules = [ + ./home.nix + ]; + }; + }; + } + ``` + ```nix + # home.nix + + {inputs, pkgs, ...}:{ + programs.wezterm = { + enable = true; + package = inputs.wezterm.packages.${pkgs.system}.default; + }; + } + ``` + + + ### Cachix + + Successful builds of the nightly nix action are pushed to this binary cache. + + ```nix + # nixosConfiguration module + { + nix.settings = { + substituters = ["https://wezterm.cachix.org"]; + trusted-public-keys = ["wezterm.cachix.org-1:kAbhjYUC9qvblTE+s7S+kl5XM1zVa4skO+E/1IDWdH0="]; + }; + } + ``` + === "Raw" ## Raw Linux Binary diff --git a/docs/install/macos.md b/docs/install/macos.md index 98e99936c3a..526a1f3503b 100644 --- a/docs/install/macos.md +++ b/docs/install/macos.md @@ -33,16 +33,30 @@ $ brew install --cask wezterm If you'd like to use a nightly build: ```console -$ brew tap homebrew/cask-versions -$ brew install --cask wezterm-nightly +$ brew install --cask wezterm@nightly ``` +!!! note + For users who have previously used the cask named `wezterm-nightly`, + homebrew has started issuing warnings: `Warning: Cask + homebrew/cask-versions/wezterm-nightly was renamed to wezterm@nightly`. We + recommend that you use `brew uninstall wezterm-nightly` to uninstall the + previously installed version, and then reinstall the new version using the + command above. + to upgrade to a newer nightly (normal `brew upgrade` will not upgrade it!): ```console -$ brew upgrade --cask wezterm-nightly --no-quarantine --greedy-latest +$ brew upgrade --cask wezterm@nightly --no-quarantine --greedy-latest ``` +!!! note + The `--greedy-latest` option in Homebrew forces the latest version of a + formula to be installed, even if a version satisfying the formula's + requirements is already installed. This can be useful when you want to + ensure you have the most up-to-date version of a package, regardless of + whether an older version meets the current dependency requirements. + ## MacPorts WezTerm is also available via [MacPorts](https://ports.macports.org/port/wezterm/summary): diff --git a/docs/install/windows.md b/docs/install/windows.md index 3574ad0085f..0352917e46c 100644 --- a/docs/install/windows.md +++ b/docs/install/windows.md @@ -65,7 +65,7 @@ $ scoop install wezterm ### For `Chocolatey` users If you prefer to use [Chocolatey](https://chocolatey.org) to manage software, -wezterm is availabe from the Community Repository. It can be installed like +wezterm is available from the Community Repository. It can be installed like so: ```console diff --git a/docs/multiplexing.md b/docs/multiplexing.md index aedf1d29095..b8a55d1805d 100644 --- a/docs/multiplexing.md +++ b/docs/multiplexing.md @@ -120,7 +120,7 @@ config.unix_domains = { -- The name; must be unique amongst all domains name = 'unix', - -- The path to the socket. If unspecified, a resonable default + -- The path to the socket. If unspecified, a reasonable default -- value will be computed. -- socket_path = "/some/path", diff --git a/docs/ssh.md b/docs/ssh.md index 26b287e0727..63b9ef1ef10 100644 --- a/docs/ssh.md +++ b/docs/ssh.md @@ -55,6 +55,10 @@ All other options are parsed but have no effect. Notably, neither `Match` or `Include` is now supported. +{{since('nightly')}} + +`ProxyUseFDpass` is now supported. (But not on Microsoft Windows). + ### CLI Overrides `wezterm ssh` CLI allows overriding config settings via the command line. This diff --git a/docs/what-is-a-terminal.md b/docs/what-is-a-terminal.md index a3aa9195908..c277189dfcf 100644 --- a/docs/what-is-a-terminal.md +++ b/docs/what-is-a-terminal.md @@ -32,7 +32,7 @@ The kernel doesn't know any details of the connected device as there isn't a defined way for it to do that; it only knows how to transmit data over that serial line. -To accomodate this the TTY interface in the kernel allows for some basic +To accommodate this the TTY interface in the kernel allows for some basic stream operations such as line-buffering and canonicalization of unix newlines to carriage-return-line-feed as was needed for printer style output to correctly move to the first column and move down a line. @@ -200,7 +200,7 @@ and continue. If your shell supports job control, the suspend signal that is typically associated with `CTRL-Z` will cause the foreground process to suspend which -in turn will wakup the shell in a similar way to that of the child getting +in turn will wakeup the shell in a similar way to that of the child getting terminated, but it can tell that it was suspended rather than terminated. ## Terminal Emulators and PTYs @@ -288,4 +288,3 @@ but what it means for wezterm users is that they may wish to bypass ConPTY in some cases by using `wezterm ssh` to directly communicate with a "real" unix pty either on a remote system or inside a WSL or VM running on the local machine. - diff --git a/lua-api-crates/color-funcs/src/image_colors.rs b/lua-api-crates/color-funcs/src/image_colors.rs index 8dc0b79eee2..2079cbfcca7 100644 --- a/lua-api-crates/color-funcs/src/image_colors.rs +++ b/lua-api-crates/color-funcs/src/image_colors.rs @@ -200,7 +200,7 @@ pub fn extract_colors_from_image<'lua>( } log::trace!("loading image {file_name}"); - let im = image::io::Reader::open(&file_name) + let im = image::ImageReader::open(&file_name) .map_err(|err| mlua::Error::external(format!("{err:#} while loading {file_name}")))? .decode() .map_err(|err| { diff --git a/lua-api-crates/plugin/src/lib.rs b/lua-api-crates/plugin/src/lib.rs index a582068c428..b83491915b8 100644 --- a/lua-api-crates/plugin/src/lib.rs +++ b/lua-api-crates/plugin/src/lib.rs @@ -35,6 +35,9 @@ fn compute_repo_dir(url: &str) -> String { c => dir.push_str(&format!("u{}", c as u32)), } } + if dir.ends_with("sZs") { + dir.truncate(dir.len() - 3); + } dir } diff --git a/mkdocs_macros.py b/mkdocs_macros.py index 05a9140b798..9a4c54aaba4 100644 --- a/mkdocs_macros.py +++ b/mkdocs_macros.py @@ -10,12 +10,15 @@ def define_env(env): @env.macro def since(vers, outline=False, inline=False): if vers == "nightly": + # Determine the relative path traversal to the root, + # so that we can emit the link to the install page + rel_root = "../" * (len(env.page.url.split('/')) - 1) first_line = "*Since: Nightly Builds Only*" expanded = "+" - blurb = """ + blurb = f""" The functionality described in this section requires a nightly build of wezterm. You can obtain a nightly build by following the instructions from the - [Download](/wezterm/installation.html) section. + [Download]({rel_root}installation.md) section. """ else: first_line = f"*Since: Version {vers}*" diff --git a/mux/src/localpane.rs b/mux/src/localpane.rs index 09f72878061..cc817178f7e 100644 --- a/mux/src/localpane.rs +++ b/mux/src/localpane.rs @@ -1045,17 +1045,14 @@ impl LocalPane { { let leader = self.get_leader(policy); if let Some(path) = &leader.current_working_dir { - return Url::parse(&format!("file://localhost{}", path.display())).ok(); + return Url::from_directory_path(path).ok(); } return None; } #[cfg(windows)] if let Some(fg) = self.divine_foreground_process(policy) { - // Since windows paths typically start with something like C:\, - // we cannot simply stick `localhost` on the front; we have to - // omit the hostname otherwise the url parser is unhappy. - return Url::parse(&format!("file://{}", fg.cwd.display())).ok(); + return Url::from_directory_path(fg.cwd).ok(); } #[allow(unreachable_code)] diff --git a/mux/src/ssh_agent.rs b/mux/src/ssh_agent.rs index 0c9b96b8a42..aea64898755 100644 --- a/mux/src/ssh_agent.rs +++ b/mux/src/ssh_agent.rs @@ -127,8 +127,10 @@ impl AgentProxy { std::thread::sleep(std::time::Duration::from_millis(100)); while receiver.try_recv().is_ok() {} - if let Some(agent) = &Mux::get().agent { - agent.update_now(); + if let Some(mux) = Mux::try_get() { + if let Some(agent) = &mux.agent { + agent.update_now(); + } } } } diff --git a/mux/src/tab.rs b/mux/src/tab.rs index 8eec504fb5f..03d48f159c0 100644 --- a/mux/src/tab.rs +++ b/mux/src/tab.rs @@ -1748,6 +1748,12 @@ impl TabInner { } fn set_active_pane(&mut self, pane: &Arc) { + let prior = self.get_active_pane(); + + if is_pane(pane, &prior.as_ref()) { + return; + } + if self.zoomed.is_some() { if !configuration().unzoom_on_switch_pane { return; @@ -1760,7 +1766,6 @@ impl TabInner { .iter() .find(|p| p.pane.pane_id() == pane.pane_id()) { - let prior = self.get_active_pane(); self.active = item.index; self.recency.tag(item.index); self.advise_focus_change(prior); diff --git a/nix/flake.lock b/nix/flake.lock index 1f0f0246978..006a6fc64a2 100644 --- a/nix/flake.lock +++ b/nix/flake.lock @@ -71,11 +71,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1718983919, - "narHash": "sha256-+1xgeIow4gJeiwo4ETvMRvWoircnvb0JOt7NS9kUhoM=", + "lastModified": 1726238386, + "narHash": "sha256-3//V84fYaGVncFImitM6lSAliRdrGayZLdxWlpcuGk0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "90338afd6177fc683a04d934199d693708c85a3b", + "rev": "01f064c99c792715054dc7a70e4c1626dbbec0c3", "type": "github" }, "original": { @@ -103,11 +103,11 @@ ] }, "locked": { - "lastModified": 1719022649, - "narHash": "sha256-ZDS8x9XpFeSBs9gMTHoujKWPn+i9ecqE9NWEUF07Yuc=", + "lastModified": 1726280639, + "narHash": "sha256-YfLRPlFZWrT2oRLNAoqf7G3+NnUTDdlIJk6tmBU7kXM=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "ff019b65a656d36dca3e57b43c40c44eec7852c5", + "rev": "e9f8641c92f26fd1e076e705edb12147c384171d", "type": "github" }, "original": { diff --git a/nix/flake.nix b/nix/flake.nix index 10661b8d532..58911cc078b 100644 --- a/nix/flake.nix +++ b/nix/flake.nix @@ -127,6 +127,13 @@ --add-needed "${pkgs.libGL}/lib/libEGL.so.1" \ --add-needed "${pkgs.vulkan-loader}/lib/libvulkan.so.1" \ $out/bin/wezterm-gui + '' + lib.optionalString stdenv.isDarwin '' + mkdir -p "$out/Applications" + OUT_APP="$out/Applications/WezTerm.app" + cp -r assets/macos/WezTerm.app "$OUT_APP" + rm $OUT_APP/*.dylib + cp -r assets/shell-integration/* "$OUT_APP" + ln -s $out/bin/{wezterm,wezterm-mux-server,wezterm-gui,strip-ansi-escapes} "$OUT_APP" ''; postInstall = '' @@ -156,6 +163,8 @@ tic -x -o $out/share/terminfo ${src}/termwiz/data/wezterm.terminfo ''; }; + + meta.mainProgram = "wezterm"; }; devShell = pkgs.mkShell { diff --git a/pty/src/unix.rs b/pty/src/unix.rs index 2fd7207a7a6..cc458ce9701 100644 --- a/pty/src/unix.rs +++ b/pty/src/unix.rs @@ -32,7 +32,7 @@ fn openpty(size: PtySize) -> anyhow::Result<(UnixMasterPty, UnixSlavePty)> { let result = unsafe { // BSDish systems may require mut pointers to some args - #[cfg_attr(feature = "cargo-clippy", allow(clippy::unnecessary_mut_passed))] + #[allow(clippy::unnecessary_mut_passed)] libc::openpty( &mut master, &mut slave, @@ -262,7 +262,7 @@ impl PtyFd { // type::from(), but the size and potentially signedness // are system dependent, which is why we're using `as _`. // Suppress this lint for this section of code. - #[cfg_attr(feature = "cargo-clippy", allow(clippy::cast_lossless))] + #[allow(clippy::cast_lossless)] if controlling_tty { // Set the pty as the controlling terminal. // Failure to do this means that delivery of diff --git a/sync-color-schemes/src/main.rs b/sync-color-schemes/src/main.rs index 018451198b9..6682b80955c 100644 --- a/sync-color-schemes/src/main.rs +++ b/sync-color-schemes/src/main.rs @@ -84,7 +84,9 @@ pub async fn fetch_url(url: &str) -> anyhow::Result> { } fn make_ident(key: &str) -> String { - let key = key.to_ascii_lowercase(); + let key = key + .to_ascii_lowercase() + .replace("terminal.sexy", "terminalsexy"); let fields: Vec<&str> = key .split(|c: char| !c.is_alphanumeric()) .filter(|c| !c.is_empty()) diff --git a/term/src/input.rs b/term/src/input.rs index cc2031fda42..748461b0c03 100644 --- a/term/src/input.rs +++ b/term/src/input.rs @@ -1,8 +1,5 @@ // clippy hates bitflags -#![cfg_attr( - feature = "cargo-clippy", - allow(clippy::suspicious_arithmetic_impl, clippy::redundant_field_names) -)] +#![allow(clippy::suspicious_arithmetic_impl, clippy::redundant_field_names)] use super::VisibleRowIndex; #[cfg(feature = "use_serde")] diff --git a/term/src/screen.rs b/term/src/screen.rs index 4ca3ff8a1e8..10a06077abc 100644 --- a/term/src/screen.rs +++ b/term/src/screen.rs @@ -1,4 +1,4 @@ -#![cfg_attr(feature = "cargo-clippy", allow(clippy::range_plus_one))] +#![allow(clippy::range_plus_one)] use super::*; use crate::config::BidiMode; use log::debug; @@ -724,7 +724,7 @@ impl Screen { self.lines.remove(remove_idx); } - if remove_idx == 0 { + if remove_idx == 0 && self.allow_scrollback { self.stable_row_index_offset += lines_removed; } @@ -754,7 +754,9 @@ impl Screen { let to_clear = len - self.physical_rows; for _ in 0..to_clear { self.lines.pop_front(); - self.stable_row_index_offset += 1; + if self.allow_scrollback { + self.stable_row_index_offset += 1; + } } } diff --git a/term/src/terminalstate/image.rs b/term/src/terminalstate/image.rs index 1965d1120f7..457a756d100 100644 --- a/term/src/terminalstate/image.rs +++ b/term/src/terminalstate/image.rs @@ -297,7 +297,7 @@ pub(crate) struct ImageInfo { } pub(crate) fn dimensions(data: &[u8]) -> anyhow::Result { - let reader = image::io::Reader::new(std::io::Cursor::new(data)).with_guessed_format()?; + let reader = image::ImageReader::new(std::io::Cursor::new(data)).with_guessed_format()?; let format = reader .format() .ok_or_else(|| anyhow::anyhow!("unknown format!?"))?; diff --git a/term/src/terminalstate/mod.rs b/term/src/terminalstate/mod.rs index 02d1690af72..c9a2d80eee4 100644 --- a/term/src/terminalstate/mod.rs +++ b/term/src/terminalstate/mod.rs @@ -1,6 +1,6 @@ // The range_plus_one lint can't see when the LHS is not compatible with // and inclusive range -#![cfg_attr(feature = "cargo-clippy", allow(clippy::range_plus_one))] +#![allow(clippy::range_plus_one)] use super::*; use crate::color::{ColorPalette, RgbColor}; use crate::config::{BidiMode, NewlineCanon}; @@ -2315,9 +2315,8 @@ impl TerminalState { // The terminal only recognizes this control function if vertical split // screen mode (DECLRMM) is set. if self.left_and_right_margin_mode { - let rows = self.screen().physical_rows as u32; let cols = self.screen().physical_cols as u32; - let left = left.as_zero_based().min(rows - 1).max(0) as usize; + let left = left.as_zero_based().min(cols - 1).max(0) as usize; let right = right.as_zero_based().min(cols - 1).max(0) as usize; // The value of the left margin (Pl) must be less than the right margin (Pr). diff --git a/termwiz/src/color.rs b/termwiz/src/color.rs index 51dbb0afdab..f8f5e2c5ff0 100644 --- a/termwiz/src/color.rs +++ b/termwiz/src/color.rs @@ -1,6 +1,6 @@ //! Colors for attributes // for FromPrimitive -#![cfg_attr(feature = "cargo-clippy", allow(clippy::useless_attribute))] +#![allow(clippy::useless_attribute)] use num_derive::*; #[cfg(feature = "use_serde")] diff --git a/termwiz/src/escape/mod.rs b/termwiz/src/escape/mod.rs index b5d359e0b54..47423787977 100644 --- a/termwiz/src/escape/mod.rs +++ b/termwiz/src/escape/mod.rs @@ -1,6 +1,6 @@ // suppress inscrutable useless_attribute clippy that shows up when // using derive(FromPrimitive) -#![cfg_attr(feature = "cargo-clippy", allow(clippy::useless_attribute))] +#![allow(clippy::useless_attribute)] #![allow(clippy::upper_case_acronyms)] //! This module provides the ability to parse escape sequences and attach //! semantic meaning to them. It can also encode the semantic values as diff --git a/termwiz/src/escape/osc.rs b/termwiz/src/escape/osc.rs index 564fa75de0e..d69b1beb8d9 100644 --- a/termwiz/src/escape/osc.rs +++ b/termwiz/src/escape/osc.rs @@ -1085,10 +1085,7 @@ impl ITermDimension { } impl ITermProprietary { - #[cfg_attr( - feature = "cargo-clippy", - allow(clippy::cyclomatic_complexity, clippy::cognitive_complexity) - )] + #[allow(clippy::cyclomatic_complexity, clippy::cognitive_complexity)] fn parse(osc: &[&[u8]]) -> Result { // iTerm has a number of different styles of OSC parameter // encodings, which makes this section of code a bit gnarly. diff --git a/termwiz/src/image.rs b/termwiz/src/image.rs index 5228998106c..e7f9ca7c0b0 100644 --- a/termwiz/src/image.rs +++ b/termwiz/src/image.rs @@ -30,7 +30,7 @@ where } #[cfg(feature = "use_serde")] -#[cfg_attr(feature = "cargo-clippy", allow(clippy::trivially_copy_pass_by_ref))] +#[allow(clippy::trivially_copy_pass_by_ref)] fn serialize_notnan(value: &NotNan, serializer: S) -> Result where S: Serializer, @@ -344,7 +344,7 @@ impl ImageDataType { pub fn dimensions(&self) -> Result<(u32, u32), InternalError> { fn dimensions_for_data(data: &[u8]) -> image::ImageResult<(u32, u32)> { let reader = - image::io::Reader::new(std::io::Cursor::new(data)).with_guessed_format()?; + image::ImageReader::new(std::io::Cursor::new(data)).with_guessed_format()?; let (width, height) = reader.into_dimensions()?; Ok((width, height)) diff --git a/termwiz/src/lineedit/mod.rs b/termwiz/src/lineedit/mod.rs index 8130a051b61..7980f17f987 100644 --- a/termwiz/src/lineedit/mod.rs +++ b/termwiz/src/lineedit/mod.rs @@ -299,6 +299,14 @@ impl<'term> LineEditor<'term> { /// accepted, or until an error is detected. /// Returns Ok(None) if the editor was cancelled eg: via CTRL-C. pub fn read_line(&mut self, host: &mut dyn LineEditorHost) -> Result> { + self.read_line_with_optional_initial_value(host, None) + } + + pub fn read_line_with_optional_initial_value( + &mut self, + host: &mut dyn LineEditorHost, + initial_value: Option<&str>, + ) -> Result> { ensure!( self.state == EditorState::Inactive, "recursive call to read_line!" @@ -311,7 +319,7 @@ impl<'term> LineEditor<'term> { self.terminal.set_raw_mode()?; self.state = EditorState::Editing; - let res = self.read_line_impl(host); + let res = self.read_line_impl(host, initial_value); self.state = EditorState::Inactive; if let Some(move_end) = self.move_to_editor_end.take() { @@ -810,8 +818,15 @@ impl<'term> LineEditor<'term> { Ok(()) } - fn read_line_impl(&mut self, host: &mut dyn LineEditorHost) -> Result> { + fn read_line_impl( + &mut self, + host: &mut dyn LineEditorHost, + initial_value: Option<&str>, + ) -> Result> { self.line.clear(); + if let Some(value) = initial_value { + self.line.set_line_and_cursor(value, value.len()); + } self.history_pos = None; self.bottom_line = None; self.clear_completion(); diff --git a/termwiz/src/render/terminfo.rs b/termwiz/src/render/terminfo.rs index 7b52b1bc604..41746fb2b05 100644 --- a/termwiz/src/render/terminfo.rs +++ b/termwiz/src/render/terminfo.rs @@ -48,7 +48,7 @@ impl TerminfoRenderer { }); } - #[cfg_attr(feature = "cargo-clippy", allow(clippy::cognitive_complexity))] + #[allow(clippy::cognitive_complexity)] fn flush_pending_attr(&mut self, out: &mut W) -> Result<()> { macro_rules! attr_on { ($cap:ident, $sgr:expr) => {{ @@ -330,10 +330,7 @@ impl TerminfoRenderer { Ok(()) } - #[cfg_attr( - feature = "cargo-clippy", - allow(clippy::cyclomatic_complexity, clippy::cognitive_complexity) - )] + #[allow(clippy::cyclomatic_complexity, clippy::cognitive_complexity)] pub fn render_to( &mut self, changes: &[Change], diff --git a/termwiz/src/widgets/mod.rs b/termwiz/src/widgets/mod.rs index fe91dcd198a..9f232429eab 100644 --- a/termwiz/src/widgets/mod.rs +++ b/termwiz/src/widgets/mod.rs @@ -400,7 +400,7 @@ impl<'widget> Ui<'widget> { let mut changed = false; // Clippy is dead wrong about this iterator being an identity_conversion - #[cfg_attr(feature = "cargo-clippy", allow(clippy::identity_conversion))] + #[allow(clippy::identity_conversion)] for result in layout.compute_constraints(width, height, root)? { let render_data = self.render.get_mut(&result.widget).unwrap(); let coords = ParentRelativeCoords::new(result.rect.x, result.rect.y); diff --git a/wezterm-blob-leases/src/error.rs b/wezterm-blob-leases/src/error.rs index 508c56e475d..324cb016382 100644 --- a/wezterm-blob-leases/src/error.rs +++ b/wezterm-blob-leases/src/error.rs @@ -1,4 +1,5 @@ use crate::ContentId; +use std::path::PathBuf; use thiserror::Error; #[derive(Error, Debug)] @@ -17,4 +18,7 @@ pub enum Error { #[error("Storage has not been initialized")] StorageNotInit, + + #[error("Storage location {0} may be corrupt: {1}")] + StorageDirIoError(PathBuf, std::io::Error), } diff --git a/wezterm-blob-leases/src/simple_tempdir.rs b/wezterm-blob-leases/src/simple_tempdir.rs index 1f504ccf907..bfbadc83358 100644 --- a/wezterm-blob-leases/src/simple_tempdir.rs +++ b/wezterm-blob-leases/src/simple_tempdir.rs @@ -4,7 +4,7 @@ use crate::{BlobStorage, BoxedReader, BufSeekRead, ContentId, Error, LeaseId}; use std::collections::HashMap; use std::fs::File; use std::io::{BufReader, Write}; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use std::sync::Mutex; use tempfile::TempDir; @@ -25,9 +25,23 @@ impl SimpleTempDir { }) } + pub fn new_in>(path: P) -> Result { + let path = path.as_ref(); + std::fs::create_dir_all(path)?; + let root = tempfile::Builder::new() + .prefix("wezterm-blob-lease-") + .rand_bytes(8) + .tempdir_in(path)?; + Ok(Self { + root, + refs: Mutex::new(HashMap::new()), + }) + } + fn path_for_content(&self, content_id: ContentId) -> Result { let path = self.root.path().join(format!("{content_id}")); - std::fs::create_dir_all(path.parent().unwrap())?; + std::fs::create_dir_all(path.parent().unwrap()) + .map_err(|err| Error::StorageDirIoError(path.clone(), err))?; Ok(path) } @@ -91,7 +105,7 @@ impl BlobStorage for SimpleTempDir { let _refs = self.refs.lock().unwrap(); let path = self.path_for_content(content_id)?; - Ok(std::fs::read(&path)?) + Ok(std::fs::read(&path).map_err(|err| Error::StorageDirIoError(path, err))?) } fn get_reader(&self, content_id: ContentId, lease_id: LeaseId) -> Result { diff --git a/wezterm-font/src/hbwrap.rs b/wezterm-font/src/hbwrap.rs index ca8bc9a09de..939155972ef 100644 --- a/wezterm-font/src/hbwrap.rs +++ b/wezterm-font/src/hbwrap.rs @@ -507,6 +507,7 @@ pub enum PaintOp { }, PopTransform, PushGlyphClip { + #[allow(unused)] glyph: hb_codepoint_t, draw: Vec, }, @@ -518,12 +519,15 @@ pub enum PaintOp { }, PopClip, PaintSolid { + #[allow(unused)] is_foreground: bool, color: hb_color_t, }, PaintImage { image: Blob, + #[allow(unused)] width: u32, + #[allow(unused)] height: u32, format: hb_tag_t, slant: f32, diff --git a/wezterm-font/src/rasterizer/harfbuzz.rs b/wezterm-font/src/rasterizer/harfbuzz.rs index c0b043c4018..8c298c8dc5c 100644 --- a/wezterm-font/src/rasterizer/harfbuzz.rs +++ b/wezterm-font/src/rasterizer/harfbuzz.rs @@ -243,7 +243,7 @@ fn record_to_cairo_surface(paint_ops: Vec) -> anyhow::Result<(Recording extents, } => { let image_surface = if format == IS_PNG { - let decoded = image::io::Reader::new(std::io::Cursor::new(image.as_slice())) + let decoded = image::ImageReader::new(std::io::Cursor::new(image.as_slice())) .with_guessed_format()? .decode()?; diff --git a/wezterm-gui/Cargo.toml b/wezterm-gui/Cargo.toml index b14e3d02d04..6fab17ed12b 100644 --- a/wezterm-gui/Cargo.toml +++ b/wezterm-gui/Cargo.toml @@ -53,7 +53,7 @@ filedescriptor = { version="0.8", path = "../filedescriptor" } finl_unicode = "1.2" frecency = { path = "../frecency" } futures = "0.3" -fuzzy-matcher = "0.3" +nucleo-matcher = "0.3" hdrhistogram = "7.1" http_req = "0.11" image = "0.25" @@ -105,7 +105,7 @@ wezterm-open-url = { path = "../wezterm-open-url" } wezterm-ssh = { path = "../wezterm-ssh" } wezterm-term = { path = "../term", features=["use_serde"] } wezterm-toast-notification = { path = "../wezterm-toast-notification" } -wgpu = "0.18" +wgpu = "22.1" window = { path = "../window" } window-funcs = { path = "../lua-api-crates/window-funcs" } diff --git a/wezterm-gui/src/glyphcache.rs b/wezterm-gui/src/glyphcache.rs index 535a0eb27a3..b394143fc69 100644 --- a/wezterm-gui/src/glyphcache.rs +++ b/wezterm-gui/src/glyphcache.rs @@ -9,9 +9,8 @@ use ::window::{Point, Rect}; use anyhow::Context; use config::{AllowSquareGlyphOverflow, TextStyle}; use euclid::num::Zero; -use image::io::Limits; use image::{ - AnimationDecoder, DynamicImage, Frame, Frames, ImageDecoder, ImageFormat, ImageResult, + AnimationDecoder, DynamicImage, Frame, Frames, ImageDecoder, ImageFormat, ImageResult, Limits, }; use lfucache::LfuCache; use once_cell::sync::Lazy; @@ -20,6 +19,7 @@ use std::cell::RefCell; use std::collections::HashMap; use std::io::Seek; use std::rc::Rc; +use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::mpsc::{sync_channel, Receiver, RecvTimeoutError, SyncSender, TryRecvError}; use std::sync::{Arc, MutexGuard}; use std::time::{Duration, Instant}; @@ -31,6 +31,20 @@ use wezterm_font::units::*; use wezterm_font::{FontConfiguration, GlyphInfo, LoadedFont, LoadedFontId}; use wezterm_term::Underline; +static FRAME_ERROR_REPORTED: AtomicBool = AtomicBool::new(false); + +/// We only want to report a frame error once at error level, because +/// if it is triggering it is likely in a animated image and will continue +/// to trigger multiple times per second as the frames are cycled. +fn report_frame_error>(message: S) { + if FRAME_ERROR_REPORTED.load(Ordering::Relaxed) { + log::debug!("{}", message.into()); + } else { + log::error!("{}", message.into()); + FRAME_ERROR_REPORTED.store(true, Ordering::Relaxed); + } +} + #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum LoadState { Loading, @@ -224,7 +238,7 @@ impl FrameDecoder { let (tx, rx) = sync_channel(2); let buf_reader = lease.get_reader().context("lease.get_reader()")?; - let reader = image::io::Reader::new(buf_reader) + let reader = image::ImageReader::new(buf_reader) .with_guessed_format() .context("guess format from lease")?; let format = reader @@ -246,7 +260,7 @@ impl FrameDecoder { } fn run_decoder_thread( - reader: image::io::Reader, + reader: image::ImageReader, format: ImageFormat, tx: SyncSender, ) -> anyhow::Result<()> { @@ -1025,14 +1039,35 @@ impl GlyphCache { return Ok((sprite.clone(), next, frames.load_state)); } + let expected_byte_size = + frames.current_frame.width * frames.current_frame.height * 4; + + let frame_data = match frames.current_frame.lease.get_data() { + Ok(data) => { + // If the size isn't right, ignore this frame and replace + // it with a blank one instead. This might happen if + // some process is truncating the files, or perhaps if + // the disk is full. + // We need to check for this because the consequence of + // a mismatched size is a panic in a layer where we + // cannot handle the error case. + if data.len() != expected_byte_size { + report_frame_error(format!("frame data is corrupted: expected size {expected_byte_size} but have {}", data.len())); + vec![0u8; expected_byte_size] + } else { + data + } + } + Err(err) => { + report_frame_error(format!("frame data error: {err:#}")); + vec![0u8; expected_byte_size] + } + }; + let frame = Image::from_raw( frames.current_frame.width, frames.current_frame.height, - frames - .current_frame - .lease - .get_data() - .context("frames.current_frame.lease.get_data")?, + frame_data, ); let sprite = atlas.allocate_with_padding(&frame, padding, scale_down)?; diff --git a/wezterm-gui/src/main.rs b/wezterm-gui/src/main.rs index f3b7688acdc..4d2829aa4c6 100644 --- a/wezterm-gui/src/main.rs +++ b/wezterm-gui/src/main.rs @@ -414,9 +414,8 @@ async fn async_run_terminal_gui( config::RUNTIME_DIR.join(format!("gui-sock-{}", unsafe { libc::getpid() })); std::env::set_var("WEZTERM_UNIX_SOCKET", unix_socket_path.clone()); wezterm_blob_leases::register_storage(Arc::new( - wezterm_blob_leases::simple_tempdir::SimpleTempDir::new()?, + wezterm_blob_leases::simple_tempdir::SimpleTempDir::new_in(&*config::CACHE_DIR)?, ))?; - if let Err(err) = spawn_mux_server(unix_socket_path, should_publish) { log::warn!("{:#}", err); } diff --git a/wezterm-gui/src/overlay/copy.rs b/wezterm-gui/src/overlay/copy.rs index 00ce464522f..dc2a6322e65 100644 --- a/wezterm-gui/src/overlay/copy.rs +++ b/wezterm-gui/src/overlay/copy.rs @@ -571,7 +571,6 @@ impl CopyRenderable { } fn close(&self) { - self.set_viewport(None); TermWindow::schedule_cancel_overlay_for_pane(self.window.clone(), self.delegate.pane_id()); } @@ -1684,28 +1683,35 @@ pub fn search_key_table() -> KeyTable { table } +fn scroll_to_bottom_and_close() -> KeyAssignment { + KeyAssignment::Multiple(vec![ + KeyAssignment::ScrollToBottom, + KeyAssignment::CopyMode(CopyModeAssignment::Close), + ]) +} + pub fn copy_key_table() -> KeyTable { let mut table = KeyTable::default(); for (key, mods, action) in [ ( WKeyCode::Char('c'), Modifiers::CTRL, - KeyAssignment::CopyMode(CopyModeAssignment::Close), + scroll_to_bottom_and_close(), ), ( WKeyCode::Char('g'), Modifiers::CTRL, - KeyAssignment::CopyMode(CopyModeAssignment::Close), + scroll_to_bottom_and_close(), ), ( WKeyCode::Char('q'), Modifiers::NONE, - KeyAssignment::CopyMode(CopyModeAssignment::Close), + scroll_to_bottom_and_close(), ), ( WKeyCode::Char('\x1b'), Modifiers::NONE, - KeyAssignment::CopyMode(CopyModeAssignment::Close), + scroll_to_bottom_and_close(), ), ( WKeyCode::Char('h'), @@ -1957,7 +1963,7 @@ pub fn copy_key_table() -> KeyTable { Modifiers::NONE, KeyAssignment::Multiple(vec![ KeyAssignment::CopyTo(ClipboardCopyDestination::ClipboardAndPrimarySelection), - KeyAssignment::CopyMode(CopyModeAssignment::Close), + scroll_to_bottom_and_close(), ]), ), ( diff --git a/wezterm-gui/src/overlay/launcher.rs b/wezterm-gui/src/overlay/launcher.rs index 748941ff17c..f1079921944 100644 --- a/wezterm-gui/src/overlay/launcher.rs +++ b/wezterm-gui/src/overlay/launcher.rs @@ -7,17 +7,16 @@ //! menus. use crate::commands::derive_command_from_key_assignment; use crate::inputmap::InputMap; +use crate::overlay::selector::{matcher_pattern, matcher_score}; use crate::termwindow::TermWindowNotif; use config::configuration; use config::keyassignment::{KeyAssignment, SpawnCommand, SpawnTabDomain}; -use fuzzy_matcher::skim::SkimMatcherV2; -use fuzzy_matcher::FuzzyMatcher; use mux::domain::{DomainId, DomainState}; use mux::pane::PaneId; -use mux::tab::TabId; use mux::termwiztermtab::TermWizTerminal; use mux::window::WindowId; use mux::Mux; +use rayon::prelude::*; use std::collections::BTreeMap; use termwiz::cell::{AttributeChange, CellAttributes}; use termwiz::color::ColorAttribute; @@ -37,7 +36,6 @@ struct Entry { pub struct LauncherTabEntry { pub title: String, - pub tab_id: TabId, pub tab_idx: usize, pub pane_count: Option, } @@ -102,7 +100,6 @@ impl LauncherArgs { }; LauncherTabEntry { title, - tab_id: tab.tab_id(), tab_idx, pane_count: tab.count_panes(), } @@ -186,19 +183,19 @@ impl LauncherState { self.filtered_entries.clear(); - let matcher = SkimMatcherV2::default(); + let pattern = matcher_pattern(&self.filter_term); struct MatchResult { row_idx: usize, - score: i64, + score: u32, } let mut scores: Vec = self .entries - .iter() + .par_iter() .enumerate() .filter_map(|(row_idx, entry)| { - let score = matcher.fuzzy_match(&entry.label, &self.filter_term)?; + let score = matcher_score(&pattern, &entry.label)?; Some(MatchResult { row_idx, score }) }) .collect(); diff --git a/wezterm-gui/src/overlay/prompt.rs b/wezterm-gui/src/overlay/prompt.rs index 91ef1ee6940..4c2449b8491 100644 --- a/wezterm-gui/src/overlay/prompt.rs +++ b/wezterm-gui/src/overlay/prompt.rs @@ -67,8 +67,9 @@ pub fn show_line_prompt_overlay( let mut host = PromptHost::new(); let mut editor = LineEditor::new(&mut term); - editor.set_prompt("> "); - let line = editor.read_line(&mut host)?; + editor.set_prompt(&args.prompt); + let line = + editor.read_line_with_optional_initial_value(&mut host, args.initial_value.as_deref())?; promise::spawn::spawn_into_main_thread(async move { trampoline(name, window, pane, line); diff --git a/wezterm-gui/src/overlay/quickselect.rs b/wezterm-gui/src/overlay/quickselect.rs index c5b0fcdc616..db631fbe897 100644 --- a/wezterm-gui/src/overlay/quickselect.rs +++ b/wezterm-gui/src/overlay/quickselect.rs @@ -27,7 +27,7 @@ const PATTERNS: [&str; 14] = [ // markdown_url r"\[[^]]*\]\(([^)]+)\)", // url - r"(?:https?://|git@|git://|ssh://|ftp://|file:///)\S+", + r"(?:https?://|git@|git://|ssh://|ftp://|file://)\S+", // diff_a r"--- a/(\S+)", // diff_b @@ -35,7 +35,7 @@ const PATTERNS: [&str; 14] = [ // docker r"sha256:([0-9a-f]{64})", // path - r"(?:[.\w\-@~]+)?(?:/[.\w\-@]+)+", + r"(?:[.\w\-@~]+)?(?:/+[.\w\-@]+)+", // color r"#[0-9a-fA-F]{6}", // uuid diff --git a/wezterm-gui/src/overlay/selector.rs b/wezterm-gui/src/overlay/selector.rs index 40d9f225029..cfc3db8ac8d 100644 --- a/wezterm-gui/src/overlay/selector.rs +++ b/wezterm-gui/src/overlay/selector.rs @@ -1,10 +1,12 @@ use super::quickselect; use crate::scripting::guiwin::GuiWin; use config::keyassignment::{InputSelector, InputSelectorEntry, KeyAssignment}; -use fuzzy_matcher::skim::SkimMatcherV2; -use fuzzy_matcher::FuzzyMatcher; use mux::termwiztermtab::TermWizTerminal; use mux_lua::MuxPane; +use nucleo_matcher::pattern::Pattern; +use nucleo_matcher::{Matcher, Utf32Str}; +use rayon::prelude::*; +use std::cell::RefCell; use std::rc::Rc; use termwiz::cell::{AttributeChange, CellAttributes}; use termwiz::color::ColorAttribute; @@ -15,6 +17,25 @@ use termwiz_funcs::truncate_right; const ROW_OVERHEAD: usize = 3; +thread_local! { + pub static MATCHER: RefCell = RefCell::new(Matcher::new(nucleo_matcher::Config::DEFAULT)); +} + +pub fn matcher_score(pattern: &Pattern, s: &str) -> Option { + MATCHER.with_borrow_mut(|matcher| { + let mut buf = vec![]; + pattern.score(Utf32Str::new(s, &mut buf), matcher) + }) +} + +pub fn matcher_pattern(s: &str) -> Pattern { + nucleo_matcher::pattern::Pattern::parse( + s, + nucleo_matcher::pattern::CaseMatching::Ignore, + nucleo_matcher::pattern::Normalization::Smart, + ) +} + struct SelectorState { active_idx: usize, max_items: usize, @@ -40,20 +61,20 @@ impl SelectorState { self.filtered_entries.clear(); - let matcher = SkimMatcherV2::default(); - struct MatchResult { row_idx: usize, - score: i64, + score: u32, } + let pattern = matcher_pattern(&self.filter_term); + let mut scores: Vec = self .args .choices - .iter() + .par_iter() .enumerate() .filter_map(|(row_idx, entry)| { - let score = matcher.fuzzy_match(&entry.label, &self.filter_term)?; + let score = matcher_score(&pattern, &entry.label)?; Some(MatchResult { row_idx, score }) }) .collect(); diff --git a/wezterm-gui/src/scripting/mod.rs b/wezterm-gui/src/scripting/mod.rs index bcb447b22bc..8867be45d57 100644 --- a/wezterm-gui/src/scripting/mod.rs +++ b/wezterm-gui/src/scripting/mod.rs @@ -88,6 +88,7 @@ pub fn register(lua: &Lua) -> anyhow::Result<()> { }); let gpus: Vec = instance .enumerate_adapters(backends) + .into_iter() .map(|adapter| { let info = adapter.get_info(); crate::termwindow::webgpu::adapter_info_to_gpu_info(info) diff --git a/wezterm-gui/src/selection.rs b/wezterm-gui/src/selection.rs index 6797b9698bc..53b2d62b302 100644 --- a/wezterm-gui/src/selection.rs +++ b/wezterm-gui/src/selection.rs @@ -1,6 +1,6 @@ // The range_plus_one lint can't see when the LHS is not compatible with // and inclusive range -#![cfg_attr(feature = "cargo-clippy", allow(clippy::range_plus_one))] +#![allow(clippy::range_plus_one)] use mux::pane::Pane; use std::cmp::Ordering; use std::ops::Range; diff --git a/wezterm-gui/src/termwindow/charselect.rs b/wezterm-gui/src/termwindow/charselect.rs index eae7bec9afd..ac4bb86add0 100644 --- a/wezterm-gui/src/termwindow/charselect.rs +++ b/wezterm-gui/src/termwindow/charselect.rs @@ -1,3 +1,4 @@ +use crate::overlay::selector::{matcher_pattern, matcher_score}; use crate::termwindow::box_model::*; use crate::termwindow::modal::Modal; use crate::termwindow::render::corners::{ @@ -13,8 +14,6 @@ use config::keyassignment::{ use config::Dimension; use emojis::{Emoji, Group}; use frecency::Frecency; -use fuzzy_matcher::skim::SkimMatcherV2; -use fuzzy_matcher::FuzzyMatcher; use rayon::prelude::*; use serde::{Deserialize, Serialize}; use std::borrow::Cow; @@ -244,18 +243,18 @@ fn build_aliases() -> Vec { #[derive(Debug, Copy, Clone)] struct MatchResult { row_idx: usize, - score: i64, + score: u32, } impl MatchResult { - fn new(row_idx: usize, score: i64, selection: &str, aliases: &[Alias]) -> Self { + fn new(row_idx: usize, score: u32, selection: &str, aliases: &[Alias]) -> Self { Self { row_idx, score: if aliases[row_idx].name == selection { // Pump up the score for an exact match, otherwise // the order may be undesirable if there are a lot // of candidates with the same score - i64::max_value() + u32::max_value() } else { score }, @@ -272,7 +271,7 @@ fn compute_matches(selection: &str, aliases: &[Alias], group: CharSelectGroup) - .map(|(idx, _a)| idx) .collect() } else { - let matcher = SkimMatcherV2::default(); + let pattern = matcher_pattern(selection); let numeric_selection = if selection.chars().all(|c| c.is_ascii_hexdigit()) { // Make this uppercase so that eg: `e1` matches `U+E1` rather @@ -285,14 +284,16 @@ fn compute_matches(selection: &str, aliases: &[Alias], group: CharSelectGroup) - None }; let start = std::time::Instant::now(); + let all_matches: Vec<(String, MatchResult)> = aliases .par_iter() .enumerate() .filter_map(|(row_idx, entry)| { let glyph = entry.glyph(); - let alias_result = matcher - .fuzzy_match(&entry.name, selection) + + let alias_result = matcher_score(&pattern, &entry.name) .map(|score| MatchResult::new(row_idx, score, selection, aliases)); + match &numeric_selection { Some(sel) => { let codepoints = entry.codepoints(); @@ -301,13 +302,12 @@ fn compute_matches(selection: &str, aliases: &[Alias], group: CharSelectGroup) - glyph, MatchResult { row_idx, - score: i64::max_value(), + score: u32::max_value(), }, )) } else { - let number_result = matcher - .fuzzy_match(&codepoints, &sel) - .map(|score| MatchResult::new(row_idx, score, sel, aliases)); + let number_result = matcher_score(&pattern, &codepoints) + .map(|score| MatchResult::new(row_idx, score, selection, aliases)); match (alias_result, number_result) { ( diff --git a/wezterm-gui/src/termwindow/mod.rs b/wezterm-gui/src/termwindow/mod.rs index 71ece24c2df..649bce5499f 100644 --- a/wezterm-gui/src/termwindow/mod.rs +++ b/wezterm-gui/src/termwindow/mod.rs @@ -1,4 +1,4 @@ -#![cfg_attr(feature = "cargo-clippy", allow(clippy::range_plus_one))] +#![allow(clippy::range_plus_one)] use super::renderstate::*; use super::utilsprites::RenderMetrics; use crate::colorease::ColorEase; @@ -283,7 +283,7 @@ impl UserData for PaneInformation { fields.add_field_method_get("width", |_, this| Ok(this.width)); fields.add_field_method_get("height", |_, this| Ok(this.height)); fields.add_field_method_get("pixel_width", |_, this| Ok(this.pixel_width)); - fields.add_field_method_get("pixel_height", |_, this| Ok(this.pixel_width)); + fields.add_field_method_get("pixel_height", |_, this| Ok(this.pixel_height)); fields.add_field_method_get("title", |_, this| Ok(this.title.clone())); fields.add_field_method_get("user_vars", |_, this| Ok(this.user_vars.clone())); fields.add_field_method_get("foreground_process_name", |_, this| { @@ -1223,6 +1223,10 @@ impl TermWindow { alert: Alert::Bell, pane_id, } => { + if !self.window_contains_pane(pane_id) { + return Ok(()); + } + match self.config.audible_bell { AudibleBell::SystemBeep => { Connection::get().expect("on main thread").beep(); @@ -1878,20 +1882,23 @@ impl TermWindow { self.update_title_impl(); } - fn emit_user_var_event(&mut self, pane_id: PaneId, name: String, value: String) { + fn window_contains_pane(&mut self, pane_id: PaneId) -> bool { let mux = Mux::get(); let (_domain, window_id, _tab_id) = match mux.resolve_pane_id(pane_id) { Some(tuple) => tuple, - None => return, + None => return false, }; - // We only want to emit the event for the window which contains - // this pane. - if window_id != self.mux_window_id { + return window_id == self.mux_window_id; + } + + fn emit_user_var_event(&mut self, pane_id: PaneId, name: String, value: String) { + if !self.window_contains_pane(pane_id) { return; } + let mux = Mux::get(); let window = GuiWin::new(self); let pane = match mux.get_pane(pane_id) { Some(pane) => mux_lua::MuxPane(pane.pane_id()), diff --git a/wezterm-gui/src/termwindow/palette.rs b/wezterm-gui/src/termwindow/palette.rs index 0522c130b59..da571ade040 100644 --- a/wezterm-gui/src/termwindow/palette.rs +++ b/wezterm-gui/src/termwindow/palette.rs @@ -1,4 +1,5 @@ use crate::commands::{CommandDef, ExpandedCommand}; +use crate::overlay::selector::{matcher_pattern, matcher_score}; use crate::termwindow::box_model::*; use crate::termwindow::modal::Modal; use crate::termwindow::render::corners::{ @@ -10,10 +11,9 @@ use crate::utilsprites::RenderMetrics; use config::keyassignment::KeyAssignment; use config::Dimension; use frecency::Frecency; -use fuzzy_matcher::skim::SkimMatcherV2; -use fuzzy_matcher::FuzzyMatcher; use luahelper::{from_lua_value_dynamic, impl_lua_conversion_dynamic}; use mux_lua::MuxPane; +use rayon::prelude::*; use serde::{Deserialize, Serialize}; use std::borrow::Cow; use std::cell::{Ref, RefCell}; @@ -172,18 +172,18 @@ fn build_commands( #[derive(Debug)] struct MatchResult { row_idx: usize, - score: i64, + score: u32, } impl MatchResult { - fn new(row_idx: usize, score: i64, selection: &str, commands: &[ExpandedCommand]) -> Self { + fn new(row_idx: usize, score: u32, selection: &str, commands: &[ExpandedCommand]) -> Self { Self { row_idx, score: if commands[row_idx].brief == selection { // Pump up the score for an exact match, otherwise // the order may be undesirable if there are a lot // of candidates with the same score - i64::max_value() + u32::max_value() } else { score }, @@ -195,17 +195,16 @@ fn compute_matches(selection: &str, commands: &[ExpandedCommand]) -> Vec if selection.is_empty() { commands.iter().enumerate().map(|(idx, _)| idx).collect() } else { - let matcher = SkimMatcherV2::default(); + let pattern = matcher_pattern(selection); let start = std::time::Instant::now(); let mut scores: Vec = commands - .iter() + .par_iter() .enumerate() .filter_map(|(row_idx, entry)| { let group = entry.menubar.join(" "); let text = format!("{group}: {}. {} {:?}", entry.brief, entry.doc, entry.action); - matcher - .fuzzy_match(&text, selection) + matcher_score(&pattern, &text) .map(|score| MatchResult::new(row_idx, score, selection, commands)) }) .collect(); diff --git a/wezterm-gui/src/termwindow/render/fancy_tab_bar.rs b/wezterm-gui/src/termwindow/render/fancy_tab_bar.rs index 180d9bb6692..ebf393686e8 100644 --- a/wezterm-gui/src/termwindow/render/fancy_tab_bar.rs +++ b/wezterm-gui/src/termwindow/render/fancy_tab_bar.rs @@ -7,6 +7,8 @@ use crate::termwindow::render::window_buttons::window_button_element; use crate::termwindow::{UIItem, UIItemType}; use crate::utilsprites::RenderMetrics; use config::{Dimension, DimensionContext, TabBarColors}; +use std::rc::Rc; +use wezterm_font::LoadedFont; use wezterm_term::color::{ColorAttribute, ColorPalette}; use window::{IntegratedTitleButtonAlignment, IntegratedTitleButtonStyle}; @@ -343,63 +345,9 @@ impl crate::TermWindow { ElementContent::Text(_) => unreachable!(), ElementContent::Poly { .. } => unreachable!(), ElementContent::Children(mut kids) => { - let x_button = Element::new( - &font, - ElementContent::Poly { - line_width: metrics.underline_height.max(2), - poly: SizedPoly { - poly: X_BUTTON, - width: Dimension::Pixels( - metrics.cell_size.height as f32 / 2., - ), - height: Dimension::Pixels( - metrics.cell_size.height as f32 / 2., - ), - }, - }, - ) - // Ensure that we draw our background over the - // top of the rest of the tab contents - .zindex(1) - .vertical_align(VerticalAlign::Middle) - .float(Float::Right) - .item_type(UIItemType::CloseTab(tab_idx)) - .hover_colors({ - let inactive_tab_hover = colors.inactive_tab_hover(); - let active_tab = colors.active_tab(); - - Some(ElementColors { - border: BorderColor::default(), - bg: (if active { - inactive_tab_hover.bg_color - } else { - active_tab.bg_color - }) - .to_linear() - .into(), - text: (if active { - inactive_tab_hover.fg_color - } else { - active_tab.fg_color - }) - .to_linear() - .into(), - }) - }) - .padding(BoxDimension { - left: Dimension::Cells(0.25), - right: Dimension::Cells(0.25), - top: Dimension::Cells(0.25), - bottom: Dimension::Cells(0.25), - }) - .margin(BoxDimension { - left: Dimension::Cells(0.5), - right: Dimension::Cells(0.), - top: Dimension::Cells(0.), - bottom: Dimension::Cells(0.), - }); - - kids.push(x_button); + if self.config.show_close_tab_button_in_tabs { + kids.push(make_x_button(&font, &metrics, &colors, tab_idx, active)); + } ElementContent::Children(kids) } }; @@ -522,3 +470,63 @@ impl crate::TermWindow { Ok(ui_items) } } + +fn make_x_button( + font: &Rc, + metrics: &RenderMetrics, + colors: &TabBarColors, + tab_idx: usize, + active: bool, +) -> Element { + Element::new( + &font, + ElementContent::Poly { + line_width: metrics.underline_height.max(2), + poly: SizedPoly { + poly: X_BUTTON, + width: Dimension::Pixels(metrics.cell_size.height as f32 / 2.), + height: Dimension::Pixels(metrics.cell_size.height as f32 / 2.), + }, + }, + ) + // Ensure that we draw our background over the + // top of the rest of the tab contents + .zindex(1) + .vertical_align(VerticalAlign::Middle) + .float(Float::Right) + .item_type(UIItemType::CloseTab(tab_idx)) + .hover_colors({ + let inactive_tab_hover = colors.inactive_tab_hover(); + let active_tab = colors.active_tab(); + + Some(ElementColors { + border: BorderColor::default(), + bg: (if active { + inactive_tab_hover.bg_color + } else { + active_tab.bg_color + }) + .to_linear() + .into(), + text: (if active { + inactive_tab_hover.fg_color + } else { + active_tab.fg_color + }) + .to_linear() + .into(), + }) + }) + .padding(BoxDimension { + left: Dimension::Cells(0.25), + right: Dimension::Cells(0.25), + top: Dimension::Cells(0.25), + bottom: Dimension::Cells(0.25), + }) + .margin(BoxDimension { + left: Dimension::Cells(0.5), + right: Dimension::Cells(0.), + top: Dimension::Cells(0.), + bottom: Dimension::Cells(0.), + }) +} diff --git a/wezterm-gui/src/termwindow/render/mod.rs b/wezterm-gui/src/termwindow/render/mod.rs index 5e7696d5410..7e164459b04 100644 --- a/wezterm-gui/src/termwindow/render/mod.rs +++ b/wezterm-gui/src/termwindow/render/mod.rs @@ -72,8 +72,6 @@ pub struct LineQuadCacheKey { } pub struct LineQuadCacheValue { - /// For resolving hash collisions - pub line: Line, pub expires: Option, pub layers: HeapQuadAllocator, // Only set if the line contains any hyperlinks, so @@ -86,9 +84,7 @@ pub struct LineToElementParams<'a> { pub line: &'a Line, pub config: &'a ConfigHandle, pub palette: &'a ColorPalette, - pub stable_line_idx: StableRowIndex, pub window_is_transparent: bool, - pub cursor: &'a StableCursorPosition, pub reverse_video: bool, pub shape_key: &'a Option, } @@ -110,8 +106,6 @@ pub struct LineToElementShapeItem { } pub struct LineToElementShape { - pub attrs: CellAttributes, - pub style: TextStyle, pub underline_tex_rect: TextureRect, pub fg_color: LinearRgba, pub bg_color: LinearRgba, diff --git a/wezterm-gui/src/termwindow/render/pane.rs b/wezterm-gui/src/termwindow/render/pane.rs index a7c5f797fb2..da273cc663e 100644 --- a/wezterm-gui/src/termwindow/render/pane.rs +++ b/wezterm-gui/src/termwindow/render/pane.rs @@ -537,7 +537,6 @@ impl crate::TermWindow { let quad_value = LineQuadCacheValue { layers: buf, expires, - line: (*line).clone(), invalidate_on_hover_change: render_result.invalidate_on_hover_change, current_highlight: if render_result.invalidate_on_hover_change { self.term_window.current_highlight.clone() diff --git a/wezterm-gui/src/termwindow/render/screen_line.rs b/wezterm-gui/src/termwindow/render/screen_line.rs index 4a34b40b4f1..f431a6d00d3 100644 --- a/wezterm-gui/src/termwindow/render/screen_line.rs +++ b/wezterm-gui/src/termwindow/render/screen_line.rs @@ -144,9 +144,7 @@ impl crate::TermWindow { let params = LineToElementParams { config: params.config, line: params.line, - cursor: params.cursor, palette: params.palette, - stable_line_idx: params.stable_line_idx.unwrap_or(0), window_is_transparent: params.window_is_transparent, reverse_video: params.dims.reverse_video, shape_key: ¶ms.shape_key, @@ -870,8 +868,6 @@ impl crate::TermWindow { .sum(); shaped.push(LineToElementShape { - attrs: style_params.attrs.clone(), - style: style_params.style.clone(), underline_tex_rect: style_params.underline_tex_rect, bg_color: style_params.bg_color, fg_color: style_params.fg_color, diff --git a/wezterm-gui/src/termwindow/webgpu.rs b/wezterm-gui/src/termwindow/webgpu.rs index 204259de715..92f9a08472d 100644 --- a/wezterm-gui/src/termwindow/webgpu.rs +++ b/wezterm-gui/src/termwindow/webgpu.rs @@ -6,7 +6,8 @@ use std::sync::Arc; use wgpu::util::DeviceExt; use window::bitmaps::Texture2d; use window::raw_window_handle::{ - HasRawDisplayHandle, HasRawWindowHandle, RawDisplayHandle, RawWindowHandle, + DisplayHandle, HandleError, HasDisplayHandle, HasWindowHandle, RawDisplayHandle, + RawWindowHandle, WindowHandle, }; use window::{BitmapImage, Dimensions, Rect, Window}; @@ -23,7 +24,7 @@ pub struct ShaderUniform { pub struct WebGpuState { pub adapter_info: wgpu::AdapterInfo, pub downlevel_caps: wgpu::DownlevelCapabilities, - pub surface: wgpu::Surface, + pub surface: wgpu::Surface<'static>, pub device: wgpu::Device, pub queue: Arc, pub config: RefCell, @@ -44,21 +45,21 @@ pub struct RawHandlePair { impl RawHandlePair { fn new(window: &Window) -> Self { Self { - window: window.raw_window_handle(), - display: window.raw_display_handle(), + window: window.window_handle().expect("window handle").as_raw(), + display: window.display_handle().expect("display handle").as_raw(), } } } -unsafe impl HasRawWindowHandle for RawHandlePair { - fn raw_window_handle(&self) -> RawWindowHandle { - self.window +impl HasWindowHandle for RawHandlePair { + fn window_handle(&self) -> Result { + unsafe { Ok(WindowHandle::borrow_raw(self.window)) } } } -unsafe impl HasRawDisplayHandle for RawHandlePair { - fn raw_display_handle(&self) -> RawDisplayHandle { - self.display +impl HasDisplayHandle for RawHandlePair { + fn display_handle(&self) -> Result { + unsafe { Ok(DisplayHandle::borrow_raw(self.display)) } } } @@ -194,6 +195,7 @@ fn compute_compatibility_list( ) -> Vec { instance .enumerate_adapters(backends) + .into_iter() .map(|a| { let info = adapter_info_to_gpu_info(a.get_info()); let compatible = a.is_surface_supported(&surface); @@ -226,7 +228,9 @@ impl WebGpuState { backends, ..Default::default() }); - let surface = unsafe { instance.create_surface(&handle)? }; + let surface = unsafe { + instance.create_surface_unsafe(wgpu::SurfaceTargetUnsafe::from_window(&handle)?)? + }; let mut adapter: Option = None; @@ -316,16 +320,17 @@ impl WebGpuState { let (device, queue) = adapter .request_device( &wgpu::DeviceDescriptor { - features: wgpu::Features::empty(), + required_features: wgpu::Features::empty(), // WebGL doesn't support all of wgpu's features, so if // we're building for the web we'll have to disable some. - limits: if cfg!(target_arch = "wasm32") { + required_limits: if cfg!(target_arch = "wasm32") { wgpu::Limits::downlevel_webgl2_defaults() } else { wgpu::Limits::downlevel_defaults() } .using_resolution(adapter.limits()), label: None, + memory_hints: Default::default(), }, None, // Trace path ) @@ -374,6 +379,7 @@ impl WebGpuState { wgpu::CompositeAlphaMode::Auto }, view_formats, + desired_maximum_frame_latency: 2, }; surface.configure(&device, &config); @@ -454,6 +460,7 @@ impl WebGpuState { module: &shader, entry_point: "vs_main", buffers: &[Vertex::desc()], + compilation_options: wgpu::PipelineCompilationOptions::default(), }, fragment: Some(wgpu::FragmentState { module: &shader, @@ -463,6 +470,7 @@ impl WebGpuState { blend: Some(wgpu::BlendState::ALPHA_BLENDING), write_mask: wgpu::ColorWrites::ALL, })], + compilation_options: wgpu::PipelineCompilationOptions::default(), }), primitive: wgpu::PrimitiveState { @@ -481,6 +489,7 @@ impl WebGpuState { alpha_to_coverage_enabled: false, }, multiview: None, + cache: None, }); Ok(Self { @@ -528,7 +537,7 @@ impl WebGpuState { #[cfg(windows)] RawWindowHandle::Win32(h) => { let mut rect = unsafe { std::mem::zeroed() }; - unsafe { winapi::um::winuser::GetClientRect(h.hwnd as _, &mut rect) }; + unsafe { winapi::um::winuser::GetClientRect(h.hwnd.get() as _, &mut rect) }; dims.pixel_width = (rect.right - rect.left) as usize; dims.pixel_height = (rect.bottom - rect.top) as usize; } diff --git a/wezterm-mux-server-impl/Cargo.toml b/wezterm-mux-server-impl/Cargo.toml index 228931e42d6..fba5c8f0315 100644 --- a/wezterm-mux-server-impl/Cargo.toml +++ b/wezterm-mux-server-impl/Cargo.toml @@ -13,9 +13,11 @@ async_ossl = { path = "../async_ossl" } async-io = "2.3" codec = { path = "../codec" } config = { path = "../config" } +dns-lookup = "2.0" futures = "0.3" hostname = "0.4" lazy_static = "1.4" +libc = "0.2" log = "0.4" mux = { path = "../mux" } portable-pty = { path = "../pty", features = ["serde_support"]} diff --git a/wezterm-mux-server-impl/src/pki.rs b/wezterm-mux-server-impl/src/pki.rs index ff3de9d816f..817c6d31f44 100644 --- a/wezterm-mux-server-impl/src/pki.rs +++ b/wezterm-mux-server-impl/src/pki.rs @@ -1,6 +1,10 @@ use anyhow::{anyhow, Context as _}; +#[cfg(unix)] +use libc::{AF_UNSPEC, AI_CANONNAME, SOCK_DGRAM}; use rcgen::{BasicConstraints, Certificate, CertificateParams, DistinguishedName, DnType, IsCa}; use std::path::PathBuf; +#[cfg(windows)] +use winapi::shared::ws2def::{AF_UNSPEC, AI_CANONNAME, SOCK_DGRAM}; /// A helper for managing keys for the TLS server component. /// Each time the server is started, a new CA is generated @@ -22,14 +26,35 @@ impl Pki { pub fn init() -> anyhow::Result { let pki_dir = config::pki_dir()?; std::fs::create_dir_all(&pki_dir)?; - log::error!("runtime dir is {}", pki_dir.display()); - - let alt_names = vec![ - hostname::get()? - .into_string() - .map_err(|_| anyhow!("hostname is not representable as unicode"))?, - "localhost".to_owned(), - ]; + log::debug!("pki dir is {}", pki_dir.display()); + + let hostname = hostname::get()? + .into_string() + .map_err(|_| anyhow!("hostname is not representable as unicode"))?; + + let mut alt_names = vec![hostname.clone(), "localhost".to_owned()]; + + let hints = dns_lookup::AddrInfoHints { + flags: AI_CANONNAME, + address: AF_UNSPEC, + socktype: SOCK_DGRAM, + protocol: 0, + }; + + if let Ok(iter) = dns_lookup::getaddrinfo(Some(&hostname), None, Some(hints)) { + for entry in iter { + if let Ok(entry) = entry { + if let Some(canon) = entry.canonname { + alt_names.push(canon); + } + } + } + } + + alt_names.sort(); + alt_names.dedup(); + log::debug!("generating cert with alt_names={alt_names:?}"); + let unix_name = config::username_from_env()?; // Create the CA certificate diff --git a/wezterm-mux-server-impl/src/sessionhandler.rs b/wezterm-mux-server-impl/src/sessionhandler.rs index a8a497cdf32..5c8e29577f4 100644 --- a/wezterm-mux-server-impl/src/sessionhandler.rs +++ b/wezterm-mux-server-impl/src/sessionhandler.rs @@ -80,9 +80,11 @@ impl PerPane { changed = true; } + let old_seqno = self.seqno; + self.seqno = pane.get_current_seqno(); let mut all_dirty_lines = pane.get_changed_since( 0..dims.physical_top + dims.viewport_rows as StableRowIndex, - self.seqno, + old_seqno, ); if !all_dirty_lines.is_empty() { changed = true; @@ -124,7 +126,6 @@ impl PerPane { self.working_dir = working_dir.clone(); self.dimensions = dims; self.mouse_grabbed = mouse_grabbed; - self.seqno = pane.get_current_seqno(); let bonus_lines = bonus_lines.into(); Some(GetPaneRenderChangesResponse { diff --git a/wezterm-mux-server/src/main.rs b/wezterm-mux-server/src/main.rs index b92c03ae51e..09f5aee072b 100644 --- a/wezterm-mux-server/src/main.rs +++ b/wezterm-mux-server/src/main.rs @@ -205,7 +205,7 @@ fn run() -> anyhow::Result<()> { } wezterm_blob_leases::register_storage(Arc::new( - wezterm_blob_leases::simple_tempdir::SimpleTempDir::new()?, + wezterm_blob_leases::simple_tempdir::SimpleTempDir::new_in(&*config::CACHE_DIR)?, ))?; let need_builder = !opts.prog.is_empty() || opts.cwd.is_some(); diff --git a/wezterm-ssh/Cargo.toml b/wezterm-ssh/Cargo.toml index bea299af985..57c24d6203c 100644 --- a/wezterm-ssh/Cargo.toml +++ b/wezterm-ssh/Cargo.toml @@ -40,6 +40,9 @@ wezterm-uds = { path = "../wezterm-uds" } # Not used directly, but is used to centralize the openssl vendor feature selection async_ossl = { path = "../async_ossl" } +[target.'cfg(unix)'.dependencies] +passfd = "0.1.6" + [dev-dependencies] assert_fs = "1.0.4" clap = {version="4.0", features=["derive"]} diff --git a/wezterm-ssh/src/sessioninner.rs b/wezterm-ssh/src/sessioninner.rs index bbc145a1572..f2536a78efe 100644 --- a/wezterm-ssh/src/sessioninner.rs +++ b/wezterm-ssh/src/sessioninner.rs @@ -205,8 +205,7 @@ impl SessionInner { sess.set_option(libssh_rs::SshOption::HostKeys(host_key.to_string()))?; } - let sock = - self.connect_to_host(&hostname, port, verbose, self.config.get("proxycommand"))?; + let (sock, _child) = self.connect_to_host(&hostname, port, verbose)?; let raw = { #[cfg(unix)] { @@ -288,8 +287,7 @@ impl SessionInner { )))) .context("notifying user of banner")?; - let sock = - self.connect_to_host(&hostname, port, verbose, self.config.get("proxycommand"))?; + let (sock, _child) = self.connect_to_host(&hostname, port, verbose)?; let mut sess = ssh2::Session::new()?; if verbose { @@ -331,19 +329,18 @@ impl SessionInner { hostname: &str, port: u16, verbose: bool, - proxy_command: Option<&String>, - ) -> anyhow::Result { - match proxy_command.map(|s| s.as_str()) { + ) -> anyhow::Result<(Socket, Option)> { + match self.config.get("proxycommand").map(|s| s.as_str()) { Some("none") | None => {} Some(proxy_command) => { let mut cmd; if cfg!(windows) { let comspec = std::env::var("COMSPEC").unwrap_or_else(|_| "cmd".to_string()); cmd = std::process::Command::new(comspec); - cmd.args(&["/c", proxy_command]); + cmd.args(["/c", proxy_command]); } else { cmd = std::process::Command::new("sh"); - cmd.args(&["-c", &format!("exec {}", proxy_command)]); + cmd.args(["-c", &format!("exec {}", proxy_command)]); } let (a, b) = socketpair()?; @@ -351,27 +348,37 @@ impl SessionInner { cmd.stdin(b.as_stdio()?); cmd.stdout(b.as_stdio()?); cmd.stderr(std::process::Stdio::inherit()); - let _child = cmd + let child = cmd .spawn() .with_context(|| format!("spawning ProxyCommand {}", proxy_command))?; #[cfg(unix)] unsafe { + use passfd::FdPassingExt; use std::os::unix::io::{FromRawFd, IntoRawFd}; - return Ok(Socket::from_raw_fd(a.into_raw_fd())); + + let raw = a.into_raw_fd(); + let dest = match self.config.get("proxyusefdpass").map(|s| s.as_str()) { + Some("yes") => raw.recv_fd()?, + _ => raw, + }; + + return Ok((Socket::from_raw_fd(dest), Some(KillOnDropChild(child)))); } #[cfg(windows)] unsafe { use std::os::windows::io::{FromRawSocket, IntoRawSocket}; - return Ok(Socket::from_raw_socket(a.into_raw_socket())); + return Ok(( + Socket::from_raw_socket(a.into_raw_socket()), + Some(KillOnDropChild(child)), + )); } } } let addr = (hostname, port) .to_socket_addrs()? - .filter(|addr| self.filter_sock_addr(addr)) - .next() + .find(|addr| self.filter_sock_addr(addr)) .with_context(|| format!("resolving address for {}", hostname))?; if verbose { log::info!("resolved {hostname}:{port} -> {addr:?}"); @@ -380,8 +387,7 @@ impl SessionInner { if let Some(bind_addr) = self.config.get("bindaddress") { let bind_addr = (bind_addr.as_str(), 0) .to_socket_addrs()? - .filter(|addr| self.filter_sock_addr(addr)) - .next() + .find(|addr| self.filter_sock_addr(addr)) .with_context(|| format!("resolving bind address {bind_addr:?}"))?; if verbose { log::info!("binding to {bind_addr:?}"); @@ -392,7 +398,7 @@ impl SessionInner { sock.connect(&addr.into()) .with_context(|| format!("Connecting to {hostname}:{port} ({addr:?})"))?; - Ok(sock) + Ok((sock, None)) } /// Used to restrict to_socket_addrs results to the address @@ -1086,3 +1092,17 @@ where } Ok(true) } + +/// A little helper to ensure the Child process is killed on Drop. +struct KillOnDropChild(std::process::Child); + +impl Drop for KillOnDropChild { + fn drop(&mut self) { + if let Err(err) = self.0.kill() { + log::error!("Error killing ProxyCommand: {}", err); + } + if let Err(err) = self.0.wait() { + log::error!("Error waiting for ProxyCommand to finish: {}", err); + } + } +} diff --git a/wezterm-ssh/tests/sshd.rs b/wezterm-ssh/tests/sshd.rs index 84dd454208c..df30791cca0 100644 --- a/wezterm-ssh/tests/sshd.rs +++ b/wezterm-ssh/tests/sshd.rs @@ -431,7 +431,7 @@ impl std::ops::DerefMut for SessionWithSshd { #[fixture] /// Stand up an sshd instance and then connect to it and perform authentication -pub async fn session(#[default(Config::new())] mut config: Config, sshd: Sshd) -> SessionWithSshd { +pub async fn session(#[default(Config::new())] config: Config, sshd: Sshd) -> SessionWithSshd { let port = sshd.port; // Do not add the default config files; they take the config of the diff --git a/wezterm/src/main.rs b/wezterm/src/main.rs index b9732ba1961..4ab10dac271 100644 --- a/wezterm/src/main.rs +++ b/wezterm/src/main.rs @@ -384,7 +384,7 @@ impl ImgCatCommand { } fn image_dimensions(data: &[u8]) -> anyhow::Result { - let reader = image::io::Reader::new(std::io::Cursor::new(data)).with_guessed_format()?; + let reader = image::ImageReader::new(std::io::Cursor::new(data)).with_guessed_format()?; let format = reader .format() .ok_or_else(|| anyhow::anyhow!("unknown image format!?"))?; diff --git a/window/Cargo.toml b/window/Cargo.toml index 5d205ae00d4..2ad3ac6b4c2 100644 --- a/window/Cargo.toml +++ b/window/Cargo.toml @@ -36,11 +36,11 @@ line_drawing = "0.8" log = "0.4" metrics = "0.23" promise = { path = "../promise" } -raw-window-handle = "0.5" +raw-window-handle = "0.6" resize = "0.5" serde = {version="1.0", features = ["rc", "derive"]} tiny-skia = "0.11" -glium = { version = "0.34", default-features = false } +glium = { version = "0.35", default-features = false } url = "2" wezterm-bidi = { path = "../bidi" } wezterm-color-types = { path = "../color-types" } @@ -81,8 +81,9 @@ xcb-imdkit = { version="0.3", git="https://github.com/wez/xcb-imdkit-rs.git", re zbus = "4.2" zvariant = "4.0" -smithay-client-toolkit = {version = "0.18", default-features=false, optional=true} -wayland-protocols = {version="0.31", optional=true} +smithay-client-toolkit = {version = "0.19", default-features=false, optional=true} +wayland-backend = {version="0.3.5", features=["client_system", "rwh_06"]} +wayland-protocols = {version="0.32", optional=true} wayland-client = {version="0.31", optional=true} wayland-egl = {version="0.32", optional=true} diff --git a/window/src/os/macos/window.rs b/window/src/os/macos/window.rs index 7576e72b637..316968ccec0 100644 --- a/window/src/os/macos/window.rs +++ b/window/src/os/macos/window.rs @@ -39,13 +39,14 @@ use objc::runtime::{Class, Object, Protocol, Sel}; use objc::*; use promise::Future; use raw_window_handle::{ - AppKitDisplayHandle, AppKitWindowHandle, HasRawDisplayHandle, HasRawWindowHandle, - RawDisplayHandle, RawWindowHandle, + AppKitDisplayHandle, AppKitWindowHandle, DisplayHandle, HandleError, HasDisplayHandle, + HasWindowHandle, RawDisplayHandle, RawWindowHandle, WindowHandle, }; use std::any::Any; use std::cell::RefCell; use std::ffi::c_void; use std::path::PathBuf; +use std::ptr::NonNull; use std::rc::Rc; use std::str::FromStr; use std::time::Instant; @@ -525,6 +526,10 @@ impl Window { window.setReleasedWhenClosed_(NO); window.setBackgroundColor_(cocoa::appkit::NSColor::clearColor(nil)); + // Tell Cocoa that we output in sRGB, so it handles color space + // conversion for non-sRGB displays. + window.setColorSpace_(cocoa::appkit::NSColorSpace::sRGBColorSpace(nil)); + // We could set this, but it makes the entire window, including // its titlebar, opaque to this fixed degree. // window.setAlphaValue_(0.4); @@ -661,18 +666,21 @@ impl Window { } } -unsafe impl HasRawDisplayHandle for Window { - fn raw_display_handle(&self) -> RawDisplayHandle { - RawDisplayHandle::AppKit(AppKitDisplayHandle::empty()) +impl HasDisplayHandle for Window { + fn display_handle(&self) -> Result { + unsafe { + Ok(DisplayHandle::borrow_raw(RawDisplayHandle::AppKit( + AppKitDisplayHandle::new(), + ))) + } } } -unsafe impl HasRawWindowHandle for Window { - fn raw_window_handle(&self) -> RawWindowHandle { - let mut handle = AppKitWindowHandle::empty(); - handle.ns_window = self.ns_window as *mut _; - handle.ns_view = self.ns_view as *mut _; - RawWindowHandle::AppKit(handle) +impl HasWindowHandle for Window { + fn window_handle(&self) -> Result { + let mut handle = + AppKitWindowHandle::new(NonNull::new(self.ns_view as *mut _).expect("non-null")); + unsafe { Ok(WindowHandle::borrow_raw(RawWindowHandle::AppKit(handle))) } } } @@ -865,18 +873,13 @@ impl WindowOps for Window { _config: &ConfigHandle, window_state: WindowState, ) -> anyhow::Result> { - let raw = self.raw_window_handle(); - // We implement this method primarily to provide Notch-avoidance for // systems with a notch. // We only need this for non-native full screen mode. - let native_full_screen = match raw { - RawWindowHandle::AppKit(raw) => { - let style_mask = unsafe { NSWindow::styleMask(raw.ns_window as *mut Object) }; - style_mask.contains(NSWindowStyleMask::NSFullScreenWindowMask) - } - _ => false, + let native_full_screen = { + let style_mask = unsafe { NSWindow::styleMask(self.ns_window) }; + style_mask.contains(NSWindowStyleMask::NSFullScreenWindowMask) }; let border_dimensions = diff --git a/window/src/os/wayland/connection.rs b/window/src/os/wayland/connection.rs index d657374b10f..80b1eb0113c 100644 --- a/window/src/os/wayland/connection.rs +++ b/window/src/os/wayland/connection.rs @@ -204,7 +204,10 @@ impl ConnectionOps for WaylandConnection { let output_state = &self.wayland_state.borrow().output; for output in output_state.outputs() { - let info = output_state.info(&output).unwrap(); + let info = match output_state.info(&output) { + Some(i) => i, + None => continue, + }; let name = match info.name { Some(n) => n.clone(), None => format!("{} {}", info.model, info.make), diff --git a/window/src/os/wayland/copy_and_paste.rs b/window/src/os/wayland/copy_and_paste.rs index fce9b75e7ba..ce309fbd3cb 100644 --- a/window/src/os/wayland/copy_and_paste.rs +++ b/window/src/os/wayland/copy_and_paste.rs @@ -102,12 +102,9 @@ impl CopyAndPaste { impl WaylandState { pub(super) fn resolve_copy_and_paste(&mut self) -> Option>> { let active_surface_id = self.active_surface_id.borrow(); - let active_surface_id = active_surface_id.as_ref().unwrap(); - if let Some(pending) = self.surface_to_pending.get(&active_surface_id) { - Some(Arc::clone(&pending.lock().unwrap().copy_and_paste)) - } else { - None - } + let active_surface_id = active_surface_id.as_ref()?; + let pending = self.surface_to_pending.get(&active_surface_id)?; + Some(Arc::clone(&pending.lock().unwrap().copy_and_paste)) } } diff --git a/window/src/os/wayland/data_device.rs b/window/src/os/wayland/data_device.rs index d2c9a570a61..caa285be5ee 100644 --- a/window/src/os/wayland/data_device.rs +++ b/window/src/os/wayland/data_device.rs @@ -4,6 +4,7 @@ use smithay_client_toolkit::data_device_manager::data_source::DataSourceHandler; use smithay_client_toolkit::data_device_manager::WritePipe; use smithay_client_toolkit::reexports::client::protocol::wl_data_device::WlDataDevice; use wayland_client::protocol::wl_data_device_manager::DndAction; +use wayland_client::protocol::wl_surface::WlSurface; use wayland_client::Proxy; use crate::wayland::drag_and_drop::SurfaceAndOffer; @@ -23,6 +24,9 @@ impl DataDeviceHandler for WaylandState { _conn: &wayland_client::Connection, _qh: &wayland_client::QueueHandle, data_device: &WlDataDevice, + _x: f64, + _y: f64, + _surface: &WlSurface, ) { let data = match self.data_device { Some(ref dv) if dv.inner() == data_device => dv.data(), @@ -86,6 +90,8 @@ impl DataDeviceHandler for WaylandState { _conn: &wayland_client::Connection, _qh: &wayland_client::QueueHandle, _data_device: &WlDataDevice, + _x: f64, + _y: f64, ) { } diff --git a/window/src/os/wayland/window.rs b/window/src/os/wayland/window.rs index 51a81a5551d..74ba5ae6b9f 100644 --- a/window/src/os/wayland/window.rs +++ b/window/src/os/wayland/window.rs @@ -6,6 +6,7 @@ use std::io::Read; use std::num::NonZeroU32; use std::os::fd::AsRawFd; use std::path::PathBuf; +use std::ptr::NonNull; use std::rc::Rc; use std::sync::{Arc, Mutex}; use std::time::{Duration, Instant}; @@ -16,8 +17,8 @@ use async_trait::async_trait; use config::ConfigHandle; use promise::{Future, Promise}; use raw_window_handle::{ - HasRawDisplayHandle, HasRawWindowHandle, RawDisplayHandle, RawWindowHandle, - WaylandDisplayHandle, WaylandWindowHandle, + DisplayHandle, HandleError, HasDisplayHandle, HasWindowHandle, RawWindowHandle, + WaylandWindowHandle, WindowHandle, }; use smithay_client_toolkit::compositor::{CompositorHandler, SurfaceData, SurfaceDataExt}; use smithay_client_toolkit::data_device_manager::ReadPipe; @@ -250,14 +251,13 @@ impl WaylandWindow { } window.set_min_size(Some((32, 32))); - let (w, h) = window_frame.add_borders( - dimensions.pixel_width as u32, - dimensions.pixel_height as u32, - ); let (x, y) = window_frame.location(); - window - .xdg_surface() - .set_window_geometry(x, y, w as i32, h as i32); + window.xdg_surface().set_window_geometry( + x, + y, + dimensions.pixel_width as i32, + dimensions.pixel_height as i32, + ); window.commit(); let copy_and_paste = CopyAndPaste::create(); @@ -359,7 +359,10 @@ impl WindowOps for WaylandWindow { } fn hide(&self) { - todo!() + WaylandConnection::with_window_inner(self.0, move |inner| { + inner.window.as_ref().unwrap().set_minimized(); + Ok(()) + }); } fn close(&self) { @@ -452,6 +455,17 @@ impl WindowOps for WaylandWindow { Ok(()) }); } + + fn toggle_fullscreen(&self) { + WaylandConnection::with_window_inner(self.0, move |inner| { + if inner.window_state.contains(WindowState::FULL_SCREEN) { + inner.window.as_ref().unwrap().unset_fullscreen(); + } else { + inner.window.as_ref().unwrap().set_fullscreen(None); + } + Ok(()) + }); + } } #[derive(Default, Clone, Debug)] pub(crate) struct PendingEvent { @@ -825,23 +839,20 @@ impl WaylandWindowInner { } log::trace!("Resizing frame"); - let (width, height) = self.window_frame.subtract_borders( - NonZeroU32::new(pixel_width as u32).unwrap(), - NonZeroU32::new(pixel_height as u32).unwrap(), - ); - // Clamp the size to at least one pixel. - let width = width.unwrap_or(NonZeroU32::new(1).unwrap()); - let height = height.unwrap_or(NonZeroU32::new(1).unwrap()); if !self.window_frame.is_hidden() { + // Clamp the size to at least one pixel. + let width = + NonZeroU32::new(pixel_width as u32).unwrap_or(NonZeroU32::new(1).unwrap()); + let height = + NonZeroU32::new(pixel_height as u32).unwrap_or(NonZeroU32::new(1).unwrap()); self.window_frame.resize(width, height); } let (x, y) = self.window_frame.location(); - let outer_size = self.window_frame.add_borders(width.get(), height.get()); self.window .as_mut() .unwrap() .xdg_surface() - .set_window_geometry(x, y, outer_size.0 as i32, outer_size.1 as i32); + .set_window_geometry(x, y, pixel_width, pixel_height); // Compute the new pixel dimensions let new_dimensions = Dimensions { pixel_width: pixel_width.try_into().unwrap(), @@ -1212,6 +1223,7 @@ impl WaylandState { .window_by_id(window_id) .expect("Inner Window should exist"); + let is_frame_hidden = window_inner.borrow().window_frame.is_hidden(); let p = window_inner.borrow().pending_event.clone(); let mut pending_event = p.lock().unwrap(); @@ -1244,15 +1256,35 @@ impl WaylandState { if configure.state.contains(SCTKWindowState::FULLSCREEN) { state |= WindowState::FULL_SCREEN; } - let fs_bits = SCTKWindowState::MAXIMIZED - | SCTKWindowState::TILED_LEFT - | SCTKWindowState::TILED_RIGHT - | SCTKWindowState::TILED_TOP - | SCTKWindowState::TILED_BOTTOM; - if !((configure.state & fs_bits).is_empty()) { + if configure.state.contains(SCTKWindowState::MAXIMIZED) { state |= WindowState::MAXIMIZED; } + // For MAXIMIZED and FULL_SCREEN window configure contains Windowed size. + // Replacing it with Wayland suggested bounds. + if state.intersects(WindowState::MAXIMIZED | WindowState::FULL_SCREEN) { + if let Some((w, h)) = configure.suggested_bounds { + pending_event.configure.replace((w, h)); + } + } else if configure + .state + .contains(SCTKWindowState::TILED_TOP | SCTKWindowState::TILED_BOTTOM) + && is_frame_hidden + { + // Tiled window without borders will take exactly half of the screen. + if let Some((w, h)) = configure.suggested_bounds { + pending_event.configure.replace((w / 2, h)); + } + } else if configure + .state + .contains(SCTKWindowState::TILED_LEFT | SCTKWindowState::TILED_RIGHT) + && is_frame_hidden + { + // Tiled window without borders will take exactly half of the screen. + if let Some((w, h)) = configure.suggested_bounds { + pending_event.configure.replace((w, h / 2)); + } + } log::debug!( "Config: self.window_state={:?}, states: {:?} {:?}", pending_event.window_state, @@ -1314,6 +1346,24 @@ impl CompositorHandler for WaylandState { ) { // TODO: do we need to do anything here? } + + fn surface_enter( + &mut self, + _conn: &WConnection, + _qh: &wayland_client::QueueHandle, + _surface: &wayland_client::protocol::wl_surface::WlSurface, + _output: &wayland_client::protocol::wl_output::WlOutput, + ) { + } + + fn surface_leave( + &mut self, + _conn: &WConnection, + _qh: &wayland_client::QueueHandle, + _surface: &wayland_client::protocol::wl_surface::WlSurface, + _output: &wayland_client::protocol::wl_output::WlOutput, + ) { + } } impl WindowHandler for WaylandState { @@ -1359,26 +1409,35 @@ impl SurfaceDataExt for SurfaceUserData { } } -unsafe impl HasRawWindowHandle for WaylandWindowInner { - fn raw_window_handle(&self) -> RawWindowHandle { - let mut handle = WaylandWindowHandle::empty(); - let surface = self.surface(); - handle.surface = surface.id().as_ptr() as *mut _; - RawWindowHandle::Wayland(handle) +impl HasDisplayHandle for WaylandWindowInner { + fn display_handle(&self) -> Result { + let conn = WaylandConnection::get().unwrap().wayland(); + let backend = conn.connection.backend(); + let handle = backend.display_handle()?; + Ok(unsafe { DisplayHandle::borrow_raw(handle.as_raw()) }) + } +} + +impl HasWindowHandle for WaylandWindowInner { + fn window_handle(&self) -> Result { + let handle = WaylandWindowHandle::new( + NonNull::new(self.surface().id().as_ptr() as _).expect("non-null"), + ); + unsafe { Ok(WindowHandle::borrow_raw(RawWindowHandle::Wayland(handle))) } } } -unsafe impl HasRawDisplayHandle for WaylandWindow { - fn raw_display_handle(&self) -> RawDisplayHandle { - let mut handle = WaylandDisplayHandle::empty(); +impl HasDisplayHandle for WaylandWindow { + fn display_handle(&self) -> Result { let conn = WaylandConnection::get().unwrap().wayland(); - handle.display = conn.connection.backend().display_ptr() as *mut _; - RawDisplayHandle::Wayland(handle) + let backend = conn.connection.backend(); + let handle = backend.display_handle()?; + Ok(unsafe { DisplayHandle::borrow_raw(handle.as_raw()) }) } } -unsafe impl HasRawWindowHandle for WaylandWindow { - fn raw_window_handle(&self) -> RawWindowHandle { +impl HasWindowHandle for WaylandWindow { + fn window_handle(&self) -> Result { let conn = Connection::get().expect("raw_window_handle only callable on main thread"); let handle = conn .wayland() @@ -1386,6 +1445,7 @@ unsafe impl HasRawWindowHandle for WaylandWindow { .expect("window handle invalid!?"); let inner = handle.borrow(); - inner.raw_window_handle() + let handle = inner.window_handle()?; + unsafe { Ok(WindowHandle::borrow_raw(handle.as_raw())) } } } diff --git a/window/src/os/windows/window.rs b/window/src/os/windows/window.rs index 58053344991..21dfa522d88 100644 --- a/window/src/os/windows/window.rs +++ b/window/src/os/windows/window.rs @@ -13,8 +13,8 @@ use config::{ConfigHandle, ImePreeditRendering, SystemBackdrop}; use lazy_static::lazy_static; use promise::Future; use raw_window_handle::{ - HasRawDisplayHandle, HasRawWindowHandle, RawDisplayHandle, RawWindowHandle, Win32WindowHandle, - WindowsDisplayHandle, + DisplayHandle, HandleError, HasDisplayHandle, HasWindowHandle, RawDisplayHandle, + RawWindowHandle, Win32WindowHandle, WindowHandle, WindowsDisplayHandle, }; use shared_library::shared_library; use std::any::Any; @@ -23,6 +23,7 @@ use std::collections::HashMap; use std::convert::TryInto; use std::ffi::OsString; use std::io::{self, Error as IoError}; +use std::num::NonZeroIsize; use std::os::windows::ffi::OsStringExt; use std::path::PathBuf; use std::ptr::{null, null_mut}; @@ -200,18 +201,22 @@ fn callback_behavior() -> glium::debug::DebugCallbackBehavior { } } -unsafe impl HasRawDisplayHandle for WindowInner { - fn raw_display_handle(&self) -> RawDisplayHandle { - RawDisplayHandle::Windows(WindowsDisplayHandle::empty()) +impl HasDisplayHandle for WindowInner { + fn display_handle(&self) -> Result { + unsafe { + Ok(DisplayHandle::borrow_raw(RawDisplayHandle::Windows( + WindowsDisplayHandle::new(), + ))) + } } } -unsafe impl HasRawWindowHandle for WindowInner { - fn raw_window_handle(&self) -> RawWindowHandle { - let mut handle = Win32WindowHandle::empty(); - handle.hwnd = self.hwnd.0 as *mut _; - handle.hinstance = unsafe { GetModuleHandleW(null()) } as _; - RawWindowHandle::Win32(handle) +impl HasWindowHandle for WindowInner { + fn window_handle(&self) -> Result { + let mut handle = + Win32WindowHandle::new(NonZeroIsize::new(self.hwnd.0 as _).expect("non-zero")); + handle.hinstance = NonZeroIsize::new(unsafe { GetModuleHandleW(null()) } as _); + unsafe { Ok(WindowHandle::borrow_raw(RawWindowHandle::Win32(handle))) } } } @@ -729,19 +734,24 @@ impl WindowInner { } } -unsafe impl HasRawDisplayHandle for Window { - fn raw_display_handle(&self) -> RawDisplayHandle { - RawDisplayHandle::Windows(WindowsDisplayHandle::empty()) +impl HasDisplayHandle for Window { + fn display_handle(&self) -> Result { + unsafe { + Ok(DisplayHandle::borrow_raw(RawDisplayHandle::Windows( + WindowsDisplayHandle::new(), + ))) + } } } -unsafe impl HasRawWindowHandle for Window { - fn raw_window_handle(&self) -> RawWindowHandle { +impl HasWindowHandle for Window { + fn window_handle(&self) -> Result { let conn = Connection::get().expect("raw_window_handle only callable on main thread"); let handle = conn.get_window(self.0).expect("window handle invalid!?"); let inner = handle.borrow(); - inner.raw_window_handle() + let handle = inner.window_handle()?; + unsafe { Ok(WindowHandle::borrow_raw(handle.as_raw())) } } } diff --git a/window/src/os/x11/connection.rs b/window/src/os/x11/connection.rs index 3f078b82f08..eacf9dbecd6 100644 --- a/window/src/os/x11/connection.rs +++ b/window/src/os/x11/connection.rs @@ -19,6 +19,34 @@ use x11::xlib; use xcb::x::Atom; use xcb::{dri2, Raw, Xid}; +enum ScreenResources { + Current(xcb::randr::GetScreenResourcesCurrentReply), + All(xcb::randr::GetScreenResourcesReply), +} + +impl ScreenResources { + fn outputs(&self) -> &[xcb::randr::Output] { + match self { + Self::Current(cur) => cur.outputs(), + Self::All(all) => all.outputs(), + } + } + + fn config_timestamp(&self) -> xcb::x::Timestamp { + match self { + Self::Current(cur) => cur.config_timestamp(), + Self::All(all) => all.config_timestamp(), + } + } + + pub fn modes(&self) -> &[xcb::randr::ModeInfo] { + match self { + Self::Current(cur) => cur.modes(), + Self::All(all) => all.modes(), + } + } +} + pub struct XConnection { pub conn: xcb::Connection, default_dpi: RefCell, @@ -236,9 +264,24 @@ impl ConnectionOps for XConnection { let config = config::configuration(); - let res = self - .send_and_wait_request(&xcb::randr::GetScreenResources { window: self.root }) - .context("get_screen_resources")?; + // NOTE: GetScreenResourcesCurrent is fast, but may sometimes return nothing. In this case, + // fallback to slow GetScreenResources. + // + // references: + // - https://github.com/qt/qtbase/blob/c234700c836777d08db6229fdc997cc7c99e45fb/src/plugins/platforms/xcb/qxcbscreen.cpp#L963 + // - https://github.com/qt/qtbase/blob/c234700c836777d08db6229fdc997cc7c99e45fb/src/plugins/platforms/xcb/qxcbconnection_screens.cpp#L390 + // + // related issue: https://github.com/wez/wezterm/issues/5802 + let res = match self + .send_and_wait_request(&xcb::randr::GetScreenResourcesCurrent { window: self.root }) + .context("get_screen_resources_current") + { + Ok(cur) if cur.outputs().len() > 0 => ScreenResources::Current(cur), + _ => ScreenResources::All( + self.send_and_wait_request(&xcb::randr::GetScreenResources { window: self.root }) + .context("get_screen_resources")?, + ), + }; let mut virtual_rect: ScreenRect = euclid::rect(0, 0, 0, 0); let mut by_name = HashMap::new(); diff --git a/window/src/os/x11/window.rs b/window/src/os/x11/window.rs index 58ec4f8936f..88abd3929e2 100644 --- a/window/src/os/x11/window.rs +++ b/window/src/os/x11/window.rs @@ -13,12 +13,14 @@ use async_trait::async_trait; use config::ConfigHandle; use promise::{Future, Promise}; use raw_window_handle::{ - HasRawDisplayHandle, HasRawWindowHandle, RawDisplayHandle, RawWindowHandle, XcbDisplayHandle, - XcbWindowHandle, + DisplayHandle, HandleError, HasDisplayHandle, HasWindowHandle, RawDisplayHandle, + RawWindowHandle, WindowHandle, XcbDisplayHandle, XcbWindowHandle, }; use std::any::Any; use std::convert::TryInto; +use std::num::NonZeroU32; use std::path::PathBuf; +use std::ptr::NonNull; use std::rc::{Rc, Weak}; use std::sync::{Arc, Mutex}; use url::Url; @@ -134,24 +136,24 @@ impl Drop for XWindowInner { } } -unsafe impl HasRawDisplayHandle for XWindowInner { - fn raw_display_handle(&self) -> RawDisplayHandle { - let mut handle = XcbDisplayHandle::empty(); +impl HasDisplayHandle for XWindowInner { + fn display_handle(&self) -> Result, HandleError> { if let Some(conn) = self.conn.upgrade() { - handle.connection = conn.conn.get_raw_conn() as _; - handle.screen = conn.screen_num; + let handle = + XcbDisplayHandle::new(NonNull::new(conn.conn.get_raw_conn() as _), conn.screen_num); + unsafe { Ok(DisplayHandle::borrow_raw(RawDisplayHandle::Xcb(handle))) } + } else { + Err(HandleError::Unavailable) } - - RawDisplayHandle::Xcb(handle) } } -unsafe impl HasRawWindowHandle for XWindowInner { - fn raw_window_handle(&self) -> RawWindowHandle { - let mut handle = XcbWindowHandle::empty(); - handle.window = self.child_id.resource_id(); - handle.visual_id = self.conn.upgrade().unwrap().visual.visual_id(); - RawWindowHandle::Xcb(handle) +impl HasWindowHandle for XWindowInner { + fn window_handle(&self) -> Result, HandleError> { + let mut handle = + XcbWindowHandle::new(NonZeroU32::new(self.child_id.resource_id()).expect("non-zero")); + handle.visual_id = NonZeroU32::new(self.conn.upgrade().unwrap().visual.visual_id()); + unsafe { Ok(WindowHandle::borrow_raw(RawWindowHandle::Xcb(handle))) } } } @@ -795,13 +797,21 @@ impl XWindowInner { conn.child_to_parent_id.borrow_mut().remove(&self.child_id); } Event::X(xcb::x::Event::SelectionClear(e)) => { - self.selection_clear(e)?; + if let Err(err) = self.selection_clear(e) { + log::error!("Error handling SelectionClear: {err:#}"); + } } Event::X(xcb::x::Event::SelectionRequest(e)) => { - self.selection_request(e)?; + if let Err(err) = self.selection_request(e) { + // Don't propagate this, as it is not worth exiting the program over it. + // + log::error!("Error handling SelectionRequest: {err:#}"); + } } Event::X(xcb::x::Event::SelectionNotify(e)) => { - self.selection_notify(e)?; + if let Err(err) = self.selection_notify(e) { + log::error!("Error handling SelectionNotify: {err:#}"); + } } Event::X(xcb::x::Event::PropertyNotify(msg)) => { let atom_name = conn.atom_name(msg.atom()); @@ -1909,29 +1919,28 @@ impl XWindowInner { } } -unsafe impl HasRawDisplayHandle for XWindow { - fn raw_display_handle(&self) -> RawDisplayHandle { +impl HasDisplayHandle for XWindow { + fn display_handle(&self) -> Result, HandleError> { let conn = Connection::get() - .expect("raw_window_handle only callable on main thread") + .expect("display_handle only callable on main thread") .x11(); - let mut handle = XcbDisplayHandle::empty(); - handle.connection = conn.get_raw_conn() as _; - handle.screen = conn.screen_num; + let handle = XcbDisplayHandle::new(NonNull::new(conn.get_raw_conn() as _), conn.screen_num); - RawDisplayHandle::Xcb(handle) + unsafe { Ok(DisplayHandle::borrow_raw(RawDisplayHandle::Xcb(handle))) } } } -unsafe impl HasRawWindowHandle for XWindow { - fn raw_window_handle(&self) -> RawWindowHandle { - let conn = Connection::get().expect("raw_window_handle only callable on main thread"); +impl HasWindowHandle for XWindow { + fn window_handle(&self) -> Result, HandleError> { + let conn = Connection::get().expect("window_handle only callable on main thread"); let handle = conn .x11() .window_by_id(self.0) .expect("window handle invalid!?"); let inner = handle.lock().unwrap(); - inner.raw_window_handle() + let handle = inner.window_handle()?; + unsafe { Ok(WindowHandle::borrow_raw(handle.as_raw())) } } } diff --git a/window/src/os/x_and_wayland.rs b/window/src/os/x_and_wayland.rs index d785feced80..b66d18d8201 100644 --- a/window/src/os/x_and_wayland.rs +++ b/window/src/os/x_and_wayland.rs @@ -16,7 +16,7 @@ use async_trait::async_trait; use config::ConfigHandle; use promise::*; use raw_window_handle::{ - HasRawDisplayHandle, HasRawWindowHandle, RawDisplayHandle, RawWindowHandle, + DisplayHandle, HandleError, HasDisplayHandle, HasWindowHandle, WindowHandle, }; use std::any::Any; use std::rc::Rc; @@ -202,22 +202,22 @@ impl Window { } } -unsafe impl HasRawDisplayHandle for Window { - fn raw_display_handle(&self) -> RawDisplayHandle { +impl HasDisplayHandle for Window { + fn display_handle(&self) -> Result, HandleError> { match self { - Self::X11(x) => x.raw_display_handle(), + Self::X11(x) => x.display_handle(), #[cfg(feature = "wayland")] - Self::Wayland(w) => w.raw_display_handle(), + Self::Wayland(w) => w.display_handle(), } } } -unsafe impl HasRawWindowHandle for Window { - fn raw_window_handle(&self) -> RawWindowHandle { +impl HasWindowHandle for Window { + fn window_handle(&self) -> Result, HandleError> { match self { - Self::X11(x) => x.raw_window_handle(), + Self::X11(x) => x.window_handle(), #[cfg(feature = "wayland")] - Self::Wayland(w) => w.raw_window_handle(), + Self::Wayland(w) => w.window_handle(), } } }