mirror of
https://github.com/wez/wezterm.git
synced 2024-10-04 02:08:07 +03:00
Merge branch 'wez:main' into nix-add-overlay
This commit is contained in:
commit
e7ac13d03d
@ -3,11 +3,11 @@ env:
|
||||
CIRRUS_CLONE_DEPTH: 1
|
||||
|
||||
task:
|
||||
name: freebsd-13
|
||||
name: freebsd-14
|
||||
|
||||
compute_engine_instance:
|
||||
image_project: freebsd-org-cloud-dev
|
||||
image: family/freebsd-13-2
|
||||
image: family/freebsd-14-0
|
||||
platform: freebsd
|
||||
cpu: 4
|
||||
memory: 8G
|
||||
|
2
.github/workflows/gen_centos9.yml
vendored
2
.github/workflows/gen_centos9.yml
vendored
@ -60,7 +60,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_centos9_continuous.yml
vendored
2
.github/workflows/gen_centos9_continuous.yml
vendored
@ -63,7 +63,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_centos9_tag.yml
vendored
2
.github/workflows/gen_centos9_tag.yml
vendored
@ -43,7 +43,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_debian10.3.yml
vendored
2
.github/workflows/gen_debian10.3.yml
vendored
@ -63,7 +63,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
@ -66,7 +66,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_debian10.3_tag.yml
vendored
2
.github/workflows/gen_debian10.3_tag.yml
vendored
@ -46,7 +46,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_debian11.yml
vendored
2
.github/workflows/gen_debian11.yml
vendored
@ -63,7 +63,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
@ -66,7 +66,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_debian11_tag.yml
vendored
2
.github/workflows/gen_debian11_tag.yml
vendored
@ -46,7 +46,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_debian12.yml
vendored
2
.github/workflows/gen_debian12.yml
vendored
@ -63,7 +63,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
@ -66,7 +66,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_debian12_tag.yml
vendored
2
.github/workflows/gen_debian12_tag.yml
vendored
@ -46,7 +46,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_fedora38.yml
vendored
2
.github/workflows/gen_fedora38.yml
vendored
@ -57,7 +57,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
@ -60,7 +60,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_fedora38_tag.yml
vendored
2
.github/workflows/gen_fedora38_tag.yml
vendored
@ -40,7 +40,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_fedora39.yml
vendored
2
.github/workflows/gen_fedora39.yml
vendored
@ -57,7 +57,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
@ -60,7 +60,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_fedora39_tag.yml
vendored
2
.github/workflows/gen_fedora39_tag.yml
vendored
@ -40,7 +40,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_fedora40.yml
vendored
2
.github/workflows/gen_fedora40.yml
vendored
@ -57,7 +57,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
@ -60,7 +60,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_fedora40_tag.yml
vendored
2
.github/workflows/gen_fedora40_tag.yml
vendored
@ -40,7 +40,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
9
.github/workflows/gen_macos.yml
vendored
9
.github/workflows/gen_macos.yml
vendored
@ -19,7 +19,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: "macos-11"
|
||||
runs-on: "macos-latest"
|
||||
|
||||
env:
|
||||
CARGO_INCREMENTAL: "0"
|
||||
@ -32,13 +32,14 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: "recursive"
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Install Rust (ARM)"
|
||||
shell: bash
|
||||
run: "rustup target add aarch64-apple-darwin"
|
||||
- name: "Install Rust (Intel)"
|
||||
shell: bash
|
||||
run: "rustup target add x86_64-apple-darwin"
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
9
.github/workflows/gen_macos_continuous.yml
vendored
9
.github/workflows/gen_macos_continuous.yml
vendored
@ -21,7 +21,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: "macos-11"
|
||||
runs-on: "macos-latest"
|
||||
|
||||
env:
|
||||
BUILD_REASON: "Schedule"
|
||||
@ -35,13 +35,14 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: "recursive"
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Install Rust (ARM)"
|
||||
shell: bash
|
||||
run: "rustup target add aarch64-apple-darwin"
|
||||
- name: "Install Rust (Intel)"
|
||||
shell: bash
|
||||
run: "rustup target add x86_64-apple-darwin"
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
9
.github/workflows/gen_macos_tag.yml
vendored
9
.github/workflows/gen_macos_tag.yml
vendored
@ -7,7 +7,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: "macos-11"
|
||||
runs-on: "macos-latest"
|
||||
|
||||
env:
|
||||
CARGO_INCREMENTAL: "0"
|
||||
@ -20,13 +20,14 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: "recursive"
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Install Rust (ARM)"
|
||||
shell: bash
|
||||
run: "rustup target add aarch64-apple-darwin"
|
||||
- name: "Install Rust (Intel)"
|
||||
shell: bash
|
||||
run: "rustup target add x86_64-apple-darwin"
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_ubuntu20.04.yml
vendored
2
.github/workflows/gen_ubuntu20.04.yml
vendored
@ -68,7 +68,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
@ -71,7 +71,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_ubuntu20.04_tag.yml
vendored
2
.github/workflows/gen_ubuntu20.04_tag.yml
vendored
@ -48,7 +48,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_ubuntu22.04.yml
vendored
2
.github/workflows/gen_ubuntu22.04.yml
vendored
@ -63,7 +63,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
@ -66,7 +66,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_ubuntu22.04_tag.yml
vendored
2
.github/workflows/gen_ubuntu22.04_tag.yml
vendored
@ -46,7 +46,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
@ -1,4 +1,4 @@
|
||||
name: centos8
|
||||
name: ubuntu24.04
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
@ -8,7 +8,7 @@ on:
|
||||
- "**/*.rs"
|
||||
- "**/Cargo.lock"
|
||||
- "**/Cargo.toml"
|
||||
- ".github/workflows/gen_centos8.yml"
|
||||
- ".github/workflows/gen_ubuntu24.04.yml"
|
||||
- "assets/fonts/**/*"
|
||||
- "assets/icon/*"
|
||||
- "assets/open-wezterm-here"
|
||||
@ -25,31 +25,34 @@ on:
|
||||
jobs:
|
||||
build:
|
||||
runs-on: "ubuntu-latest"
|
||||
container: "quay.io/centos/centos:stream8"
|
||||
container: "ubuntu:24.04"
|
||||
env:
|
||||
CARGO_INCREMENTAL: "0"
|
||||
SCCACHE_GHA_ENABLED: "true"
|
||||
RUSTC_WRAPPER: "sccache"
|
||||
|
||||
steps:
|
||||
- name: "Install config manager"
|
||||
- name: "set APT to non-interactive"
|
||||
shell: bash
|
||||
run: "dnf install -y 'dnf-command(config-manager)'"
|
||||
- name: "Enable PowerTools"
|
||||
run: "echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections"
|
||||
- name: "Update APT"
|
||||
shell: bash
|
||||
run: "dnf config-manager --set-enabled powertools"
|
||||
run: "apt update"
|
||||
- name: "Install git"
|
||||
shell: bash
|
||||
run: "yum install -y git"
|
||||
run: "apt-get install -y git"
|
||||
- name: "Install curl"
|
||||
shell: bash
|
||||
run: "yum install -y curl"
|
||||
run: "apt-get install -y curl"
|
||||
- name: "Update APT"
|
||||
shell: bash
|
||||
run: "apt update"
|
||||
- name: "Ensure /run/sshd exists"
|
||||
shell: bash
|
||||
run: "mkdir -p /run/sshd"
|
||||
- name: "Install openssh-server"
|
||||
shell: bash
|
||||
run: "yum install -y openssh-server"
|
||||
run: "apt-get install -y openssh-server"
|
||||
- name: "Workaround git permissions issue"
|
||||
shell: bash
|
||||
run: "git config --global --add safe.directory /__w/wezterm/wezterm"
|
||||
@ -60,7 +63,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
@ -92,18 +95,17 @@ jobs:
|
||||
uses: baptiste0928/cargo-install@v3
|
||||
with:
|
||||
crate: "cargo-nextest"
|
||||
cache-key: "centos8"
|
||||
cache-key: "ubuntu24.04"
|
||||
- name: "Test"
|
||||
shell: bash
|
||||
run: "cargo nextest run --all --no-fail-fast"
|
||||
- name: "Package"
|
||||
shell: bash
|
||||
run: "bash ci/deploy.sh"
|
||||
- name: "Move RPM"
|
||||
shell: bash
|
||||
run: "mv ~/rpmbuild/RPMS/*/*.rpm ."
|
||||
- name: "Upload artifact"
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: "centos8"
|
||||
path: "wezterm-*.rpm"
|
||||
name: "ubuntu24.04"
|
||||
path: |
|
||||
wezterm-*.deb
|
||||
wezterm-*.xz
|
@ -1,4 +1,4 @@
|
||||
name: centos8_continuous
|
||||
name: ubuntu24.04_continuous
|
||||
|
||||
on:
|
||||
schedule:
|
||||
@ -10,7 +10,7 @@ on:
|
||||
- "**/*.rs"
|
||||
- "**/Cargo.lock"
|
||||
- "**/Cargo.toml"
|
||||
- ".github/workflows/gen_centos8_continuous.yml"
|
||||
- ".github/workflows/gen_ubuntu24.04_continuous.yml"
|
||||
- "assets/fonts/**/*"
|
||||
- "assets/icon/*"
|
||||
- "assets/open-wezterm-here"
|
||||
@ -27,7 +27,7 @@ on:
|
||||
jobs:
|
||||
build:
|
||||
runs-on: "ubuntu-latest"
|
||||
container: "quay.io/centos/centos:stream8"
|
||||
container: "ubuntu:24.04"
|
||||
env:
|
||||
BUILD_REASON: "Schedule"
|
||||
CARGO_INCREMENTAL: "0"
|
||||
@ -35,24 +35,27 @@ jobs:
|
||||
RUSTC_WRAPPER: "sccache"
|
||||
|
||||
steps:
|
||||
- name: "Install config manager"
|
||||
- name: "set APT to non-interactive"
|
||||
shell: bash
|
||||
run: "dnf install -y 'dnf-command(config-manager)'"
|
||||
- name: "Enable PowerTools"
|
||||
run: "echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections"
|
||||
- name: "Update APT"
|
||||
shell: bash
|
||||
run: "dnf config-manager --set-enabled powertools"
|
||||
run: "apt update"
|
||||
- name: "Install git"
|
||||
shell: bash
|
||||
run: "yum install -y git"
|
||||
run: "apt-get install -y git"
|
||||
- name: "Install curl"
|
||||
shell: bash
|
||||
run: "yum install -y curl"
|
||||
run: "apt-get install -y curl"
|
||||
- name: "Update APT"
|
||||
shell: bash
|
||||
run: "apt update"
|
||||
- name: "Ensure /run/sshd exists"
|
||||
shell: bash
|
||||
run: "mkdir -p /run/sshd"
|
||||
- name: "Install openssh-server"
|
||||
shell: bash
|
||||
run: "yum install -y openssh-server"
|
||||
run: "apt-get install -y openssh-server"
|
||||
- name: "Workaround git permissions issue"
|
||||
shell: bash
|
||||
run: "git config --global --add safe.directory /__w/wezterm/wezterm"
|
||||
@ -63,7 +66,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
@ -95,21 +98,20 @@ jobs:
|
||||
uses: baptiste0928/cargo-install@v3
|
||||
with:
|
||||
crate: "cargo-nextest"
|
||||
cache-key: "centos8"
|
||||
cache-key: "ubuntu24.04"
|
||||
- name: "Test"
|
||||
shell: bash
|
||||
run: "cargo nextest run --all --no-fail-fast"
|
||||
- name: "Package"
|
||||
shell: bash
|
||||
run: "bash ci/deploy.sh"
|
||||
- name: "Move RPM"
|
||||
shell: bash
|
||||
run: "mv ~/rpmbuild/RPMS/*/*.rpm wezterm-nightly-centos8.rpm"
|
||||
- name: "Upload artifact"
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: "centos8"
|
||||
path: "wezterm-*.rpm"
|
||||
name: "ubuntu24.04"
|
||||
path: |
|
||||
wezterm-*.deb
|
||||
wezterm-*.xz
|
||||
retention-days: 5
|
||||
|
||||
upload:
|
||||
@ -125,12 +127,12 @@ jobs:
|
||||
- name: "Download artifact"
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: "centos8"
|
||||
name: "ubuntu24.04"
|
||||
- name: "Checksum"
|
||||
shell: bash
|
||||
run: "for f in wezterm-*.rpm ; do sha256sum $f > $f.sha256 ; done"
|
||||
run: "for f in wezterm-*.deb wezterm-*.xz ; do sha256sum $f > $f.sha256 ; done"
|
||||
- name: "Upload to Nightly Release"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
shell: bash
|
||||
run: "bash ci/retry.sh gh release upload --clobber nightly wezterm-*.rpm *.sha256"
|
||||
run: "bash ci/retry.sh gh release upload --clobber nightly wezterm-*.deb wezterm-*.xz *.sha256"
|
@ -1,4 +1,4 @@
|
||||
name: centos8_tag
|
||||
name: ubuntu24.04_tag
|
||||
|
||||
on:
|
||||
push:
|
||||
@ -8,31 +8,34 @@ on:
|
||||
jobs:
|
||||
build:
|
||||
runs-on: "ubuntu-latest"
|
||||
container: "quay.io/centos/centos:stream8"
|
||||
container: "ubuntu:24.04"
|
||||
env:
|
||||
CARGO_INCREMENTAL: "0"
|
||||
SCCACHE_GHA_ENABLED: "true"
|
||||
RUSTC_WRAPPER: "sccache"
|
||||
|
||||
steps:
|
||||
- name: "Install config manager"
|
||||
- name: "set APT to non-interactive"
|
||||
shell: bash
|
||||
run: "dnf install -y 'dnf-command(config-manager)'"
|
||||
- name: "Enable PowerTools"
|
||||
run: "echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections"
|
||||
- name: "Update APT"
|
||||
shell: bash
|
||||
run: "dnf config-manager --set-enabled powertools"
|
||||
run: "apt update"
|
||||
- name: "Install git"
|
||||
shell: bash
|
||||
run: "yum install -y git"
|
||||
run: "apt-get install -y git"
|
||||
- name: "Install curl"
|
||||
shell: bash
|
||||
run: "yum install -y curl"
|
||||
run: "apt-get install -y curl"
|
||||
- name: "Update APT"
|
||||
shell: bash
|
||||
run: "apt update"
|
||||
- name: "Ensure /run/sshd exists"
|
||||
shell: bash
|
||||
run: "mkdir -p /run/sshd"
|
||||
- name: "Install openssh-server"
|
||||
shell: bash
|
||||
run: "yum install -y openssh-server"
|
||||
run: "apt-get install -y openssh-server"
|
||||
- name: "Workaround git permissions issue"
|
||||
shell: bash
|
||||
run: "git config --global --add safe.directory /__w/wezterm/wezterm"
|
||||
@ -43,7 +46,7 @@ jobs:
|
||||
- name: "Install Rust"
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
@ -75,21 +78,20 @@ jobs:
|
||||
uses: baptiste0928/cargo-install@v3
|
||||
with:
|
||||
crate: "cargo-nextest"
|
||||
cache-key: "centos8"
|
||||
cache-key: "ubuntu24.04"
|
||||
- name: "Test"
|
||||
shell: bash
|
||||
run: "cargo nextest run --all --no-fail-fast"
|
||||
- name: "Package"
|
||||
shell: bash
|
||||
run: "bash ci/deploy.sh"
|
||||
- name: "Move RPM"
|
||||
shell: bash
|
||||
run: "mv ~/rpmbuild/RPMS/*/*.rpm ."
|
||||
- name: "Upload artifact"
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: "centos8"
|
||||
path: "wezterm-*.rpm"
|
||||
name: "ubuntu24.04"
|
||||
path: |
|
||||
wezterm-*.deb
|
||||
wezterm-*.xz
|
||||
|
||||
upload:
|
||||
runs-on: ubuntu-latest
|
||||
@ -104,10 +106,10 @@ jobs:
|
||||
- name: "Download artifact"
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: "centos8"
|
||||
name: "ubuntu24.04"
|
||||
- name: "Checksum"
|
||||
shell: bash
|
||||
run: "for f in wezterm-*.rpm ; do sha256sum $f > $f.sha256 ; done"
|
||||
run: "for f in wezterm-*.deb wezterm-*.xz ; do sha256sum $f > $f.sha256 ; done"
|
||||
- name: "Create pre-release"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@ -117,4 +119,4 @@ jobs:
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
shell: bash
|
||||
run: "bash ci/retry.sh gh release upload --clobber $(ci/tag-name.sh) wezterm-*.rpm *.sha256"
|
||||
run: "bash ci/retry.sh gh release upload --clobber $(ci/tag-name.sh) wezterm-*.deb wezterm-*.xz *.sha256"
|
2
.github/workflows/gen_windows.yml
vendored
2
.github/workflows/gen_windows.yml
vendored
@ -35,7 +35,7 @@ jobs:
|
||||
with:
|
||||
target: "x86_64-pc-windows-msvc"
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_windows_continuous.yml
vendored
2
.github/workflows/gen_windows_continuous.yml
vendored
@ -38,7 +38,7 @@ jobs:
|
||||
with:
|
||||
target: "x86_64-pc-windows-msvc"
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
2
.github/workflows/gen_windows_tag.yml
vendored
2
.github/workflows/gen_windows_tag.yml
vendored
@ -25,7 +25,7 @@ jobs:
|
||||
with:
|
||||
target: "x86_64-pc-windows-msvc"
|
||||
- name: "Compile with sccache"
|
||||
uses: mozilla-actions/sccache-action@v0.0.4
|
||||
uses: mozilla-actions/sccache-action@v0.0.5
|
||||
- name: "Cache Rust Dependencies"
|
||||
uses: actions/cache@v4
|
||||
id: cache-cargo-vendor
|
||||
|
1132
Cargo.lock
generated
1132
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -136,7 +136,7 @@ class CacheStep(ActionStep):
|
||||
|
||||
class SccacheStep(ActionStep):
|
||||
def __init__(self, name):
|
||||
super().__init__(name, action="mozilla-actions/sccache-action@v0.0.4")
|
||||
super().__init__(name, action="mozilla-actions/sccache-action@v0.0.5")
|
||||
|
||||
|
||||
class CheckoutStep(ActionStep):
|
||||
@ -379,6 +379,17 @@ rustup default {toolchain}
|
||||
""",
|
||||
),
|
||||
]
|
||||
elif "macos" in self.name:
|
||||
steps += [
|
||||
RunStep(
|
||||
name="Install Rust (ARM)",
|
||||
run="rustup target add aarch64-apple-darwin",
|
||||
),
|
||||
RunStep(
|
||||
name="Install Rust (Intel)",
|
||||
run="rustup target add x86_64-apple-darwin",
|
||||
)
|
||||
]
|
||||
else:
|
||||
steps += [
|
||||
ActionStep(
|
||||
@ -387,13 +398,6 @@ rustup default {toolchain}
|
||||
params=params,
|
||||
),
|
||||
]
|
||||
if "macos" in self.name:
|
||||
steps += [
|
||||
RunStep(
|
||||
name="Install Rust (ARM)",
|
||||
run="rustup target add aarch64-apple-darwin",
|
||||
)
|
||||
]
|
||||
if cache:
|
||||
steps += [
|
||||
SccacheStep(name="Compile with sccache"),
|
||||
@ -994,6 +998,7 @@ rustup default {toolchain}
|
||||
TARGETS = [
|
||||
Target(container="ubuntu:20.04", continuous_only=True, app_image=True),
|
||||
Target(container="ubuntu:22.04", continuous_only=True),
|
||||
Target(container="ubuntu:24.04", continuous_only=True),
|
||||
# debian 8's wayland libraries are too old for wayland-client
|
||||
# Target(container="debian:8.11", continuous_only=True, bootstrap_git=True),
|
||||
# harfbuzz's C++ is too new for debian 9's toolchain
|
||||
@ -1001,9 +1006,8 @@ TARGETS = [
|
||||
Target(container="debian:10.3", continuous_only=True),
|
||||
Target(container="debian:11", continuous_only=True),
|
||||
Target(container="debian:12", continuous_only=True),
|
||||
Target(name="centos8", container="quay.io/centos/centos:stream8"),
|
||||
Target(name="centos9", container="quay.io/centos/centos:stream9"),
|
||||
Target(name="macos", os="macos-11"),
|
||||
Target(name="macos", os="macos-latest"),
|
||||
# https://fedoraproject.org/wiki/End_of_life?rd=LifeCycle/EOL
|
||||
Target(container="fedora:38"),
|
||||
Target(container="fedora:39"),
|
||||
|
@ -12,7 +12,7 @@ anyhow = "1.0"
|
||||
config = { path = "../config" }
|
||||
leb128 = "0.2"
|
||||
log = "0.4"
|
||||
metrics = "0.22"
|
||||
metrics = "0.23"
|
||||
mux = { path = "../mux" }
|
||||
portable-pty = { path = "../pty", features = ["serde_support"]}
|
||||
rangeset = { path = "../rangeset" }
|
||||
|
@ -5,6 +5,7 @@ use syn::{
|
||||
Result, Type,
|
||||
};
|
||||
|
||||
#[allow(unused)]
|
||||
pub struct ContainerInfo {
|
||||
pub into: Option<Path>,
|
||||
pub try_from: Option<Path>,
|
||||
@ -67,6 +68,7 @@ pub enum DefValue {
|
||||
Path(Path),
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
pub struct FieldInfo<'a> {
|
||||
pub field: &'a Field,
|
||||
pub type_name: String,
|
||||
|
@ -469,6 +469,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)]
|
||||
@ -1673,6 +1676,14 @@ fn default_font_size() -> f64 {
|
||||
12.0
|
||||
}
|
||||
|
||||
pub(crate) fn compute_cache_dir() -> anyhow::Result<PathBuf> {
|
||||
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<PathBuf> {
|
||||
if let Some(runtime) = dirs_next::data_dir() {
|
||||
return Ok(runtime.join("wezterm"));
|
||||
|
@ -67,6 +67,7 @@ lazy_static! {
|
||||
pub static ref CONFIG_DIRS: Vec<PathBuf> = 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<Option<PathBuf>> = Mutex::new(None);
|
||||
static ref CONFIG_SKIP: AtomicBool = AtomicBool::new(false);
|
||||
|
@ -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"),
|
||||
|
@ -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()
|
||||
});
|
||||
}
|
||||
|
2
deps/harfbuzz/harfbuzz
vendored
2
deps/harfbuzz/harfbuzz
vendored
@ -1 +1 @@
|
||||
Subproject commit 63973005bc07aba599b47fdd4cf788647b601ccd
|
||||
Subproject commit 9c03576c49db6e7207d9bcdfe3abd170a809157f
|
@ -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,15 @@ 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
|
||||
|
||||
#### New
|
||||
* [wezterm.serde](config/lua/wezterm.serde/index.md) module for serialization
|
||||
@ -46,6 +55,10 @@ As features stabilize some brief notes about them will accumulate here.
|
||||
?988 #1647
|
||||
* [default_ssh_auth_sock](config/lua/config/default_ssh_auth_sock.md) option
|
||||
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
|
||||
|
||||
#### Fixed
|
||||
* Race condition when very quickly adjusting font scale, and other improvements
|
||||
@ -59,8 +72,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
|
||||
@ -71,16 +84,40 @@ As features stabilize some brief notes about them will accumulate here.
|
||||
#3283
|
||||
* Wayland: hang when launched under ChromeOS Crostini. Thanks to @dberlin!
|
||||
#5393 #5397
|
||||
* macOS: Fixed notch avoidance padding in full screen mode. Thanks to @mbaird!
|
||||
#5515 #3807
|
||||
* 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
|
||||
|
||||
#### 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),
|
||||
@ -92,7 +129,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),
|
||||
@ -101,12 +140,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
|
||||
|
||||
@ -208,7 +250,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),
|
||||
@ -252,7 +294,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)
|
||||
@ -468,7 +510,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),
|
||||
@ -476,45 +518,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),
|
||||
@ -524,13 +566,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),
|
||||
@ -544,7 +586,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),
|
||||
@ -553,15 +595,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),
|
||||
@ -572,24 +614,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),
|
||||
@ -618,7 +660,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),
|
||||
@ -860,8 +902,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),
|
||||
@ -1203,7 +1245,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)
|
||||
@ -1281,7 +1323,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
|
||||
|
||||
@ -1341,7 +1383,7 @@ 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)
|
||||
@ -1355,7 +1397,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)
|
||||
|
||||
@ -1928,7 +1970,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)
|
||||
|
||||
|
@ -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": [
|
||||
|
@ -223,7 +223,7 @@ builting color scheme.
|
||||
|
||||
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
|
||||
the available color schemes for an example](https://github.com/wez/wezterm/config/src/scheme_data.rs).
|
||||
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
|
||||
named `$HOME/.config/wezterm/colors` if you're on a POSIX system.
|
||||
@ -481,7 +481,7 @@ config.window_background_image_hsb = {
|
||||
}
|
||||
```
|
||||
|
||||
See [Styling Inactive Panes](#style-inactive-panes) for more information
|
||||
See [Styling Inactive Panes](#styling-inactive-panes) for more information
|
||||
on hue, saturation, brigthness transformations.
|
||||
|
||||
If you'd like to have control over scaling, tiling/repeating, scrolling
|
||||
|
@ -146,23 +146,53 @@ return config
|
||||
|
||||
## Example: docker domains
|
||||
|
||||
Fully working example is yet to be completely fleshed out (volunteers welcome!) but the
|
||||
gist of it is:
|
||||
This example shows how to add each running docker container as a domain,
|
||||
so that you can spawn a shell into it and/or split it:
|
||||
|
||||
{% raw %}
|
||||
```lua
|
||||
local wezterm = require 'wezterm'
|
||||
local config = {}
|
||||
local config = wezterm.config_builder()
|
||||
|
||||
function docker_list()
|
||||
-- Use wezterm.run_child_process to run
|
||||
-- `docker container ls --format '{{.ID}}:{{.Names}}'` and parse
|
||||
-- the output and return a mapping from ID -> name
|
||||
local docker_list = {}
|
||||
local success, stdout, stderr = wezterm.run_child_process {
|
||||
'docker',
|
||||
'container',
|
||||
'ls',
|
||||
'--format',
|
||||
'{{.ID}}:{{.Names}}',
|
||||
}
|
||||
for _, line in ipairs(wezterm.split_by_newlines(stdout)) do
|
||||
local id, name = line:match '(.-):(.+)'
|
||||
if id and name then
|
||||
docker_list[id] = name
|
||||
end
|
||||
end
|
||||
return docker_list
|
||||
end
|
||||
|
||||
function make_docker_label_func(id)
|
||||
return function(name)
|
||||
local success, stdout, stderr = wezterm.run_child_process {
|
||||
'docker',
|
||||
'inspect',
|
||||
'--format',
|
||||
'{{.State.Running}}',
|
||||
id,
|
||||
}
|
||||
local running = stdout == 'true\n'
|
||||
local color = running and 'Green' or 'Red'
|
||||
return wezterm.format {
|
||||
{ Foreground = { AnsiColor = color } },
|
||||
{ Text = 'docker container named ' .. name },
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
function make_docker_fixup_func(id)
|
||||
return function(cmd)
|
||||
cmd.args = cmd.args or { '/bin/bash' }
|
||||
cmd.args = cmd.args or { '/bin/sh' }
|
||||
local wrapped = {
|
||||
'docker',
|
||||
'exec',
|
||||
@ -178,32 +208,23 @@ function make_docker_fixup_func(id)
|
||||
end
|
||||
end
|
||||
|
||||
function make_docker_label_func(id)
|
||||
return function(name)
|
||||
-- TODO: query the container state and show info about
|
||||
-- whether it is running or stopped.
|
||||
-- If it stopped, you may wish to change the color to red
|
||||
-- to make it stand out
|
||||
return wezterm.format {
|
||||
{ Foreground = { AnsiColor = 'Red' } },
|
||||
{ Text = 'docker container named ' .. name },
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
local exec_domains = {}
|
||||
for id, name in pairs(docker_list()) do
|
||||
table.insert(
|
||||
exec_domains,
|
||||
wezterm.exec_domain(
|
||||
'docker: ' .. name,
|
||||
make_docker_fixup_func(id),
|
||||
make_docker_label_func(id)
|
||||
function compute_exec_domains()
|
||||
local exec_domains = {}
|
||||
for id, name in pairs(docker_list()) do
|
||||
table.insert(
|
||||
exec_domains,
|
||||
wezterm.exec_domain(
|
||||
'docker:' .. name,
|
||||
make_docker_fixup_func(id),
|
||||
make_docker_label_func(id)
|
||||
)
|
||||
)
|
||||
)
|
||||
end
|
||||
return exec_domains
|
||||
end
|
||||
|
||||
config.exec_domains = exec_domains
|
||||
config.exec_domains = compute_exec_domains()
|
||||
|
||||
return config
|
||||
```
|
||||
{% endraw %}
|
||||
|
@ -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)
|
||||
|
16
docs/config/lua/config/show_close_tab_button_in_tabs.md
Normal file
16
docs/config/lua/config/show_close_tab_button_in_tabs.md
Normal file
@ -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
|
||||
```
|
@ -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.
|
||||
|
@ -11,7 +11,7 @@ to take the surrounding semantic zone.
|
||||
|
||||
In this example, the triple-left-click mouse action is set to
|
||||
automatically select the entire command output when clicking
|
||||
on any character withing that region:
|
||||
on any character within that region:
|
||||
|
||||
```lua
|
||||
config.mouse_bindings = {
|
||||
|
@ -12,7 +12,7 @@ for the sake of simplicity.
|
||||
|
||||
A Pane object is typically passed to your code via an event callback. A Pane
|
||||
object is a handle to a live instance of a Pane that is known to the wezterm
|
||||
process. A Pane object tracks the psuedo terminal (or real serial terminal)
|
||||
process. A Pane object tracks the pseudo terminal (or real serial terminal)
|
||||
and associated process(es) and the parsed screen and scrollback.
|
||||
|
||||
A Pane object can be used to send input to the associated processes and
|
||||
|
@ -16,7 +16,10 @@ 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 +127,10 @@ 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 +153,10 @@ 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 +171,10 @@ 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 +201,7 @@ return {
|
||||
mods = 'NONE',
|
||||
action = act.Multiple {
|
||||
{ CopyTo = 'ClipboardAndPrimarySelection' },
|
||||
{ CopyMode = 'ScrollToBottom' },
|
||||
{ CopyMode = 'Close' },
|
||||
},
|
||||
},
|
||||
|
@ -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)
|
||||
* <a href="https://github.com/tonsky/FiraCode#fira-code-monospaced-font-with-programming-ligatures">Ligatures</a>, Color Emoji and font fallback, with true color and [dynamic color schemes](config/appearance.md#colors).
|
||||
* <a href="https://github.com/tonsky/FiraCode#fira-code-monospaced-font-with-programming-ligatures">Ligatures</a>, 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!)
|
||||
|
@ -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)
|
||||
* <a href="https://github.com/tonsky/FiraCode#fira-code-monospaced-font-with-programming-ligatures">Ligatures</a>, Color Emoji and font fallback, with true color and [dynamic color schemes](config/appearance.md#colors).
|
||||
* <a href="https://github.com/tonsky/FiraCode#fira-code-monospaced-font-with-programming-ligatures">Ligatures</a>, 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)
|
||||
|
||||
|
@ -103,7 +103,7 @@ hide:
|
||||
$ 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
|
||||
```
|
||||
|
||||
|
||||
Update your dependencies:
|
||||
|
||||
```console
|
||||
@ -167,19 +167,34 @@ hide:
|
||||
available in Copr for `x86_64` and `aarch64`:
|
||||
|
||||
* Centos Stream 8 and 9
|
||||
* Fedora 38, 39, rawhide
|
||||
* OpenSUSE Leap 15.5
|
||||
* OpenSUSE Tumbleweed
|
||||
* Fedora 38, 39, 40, rawhide
|
||||
* openSUSE Leap 15.5
|
||||
* openSUSE Tumbleweed
|
||||
* RHEL 8, 9
|
||||
|
||||
|
||||
To perform initial installation:
|
||||
|
||||
```console
|
||||
$ sudo dnf copr enable wezfurlong/wezterm-nightly
|
||||
$ sudo dnf install wezterm
|
||||
```
|
||||
## openSUSE specific
|
||||
|
||||
To update:
|
||||
To perform initial installation:
|
||||
|
||||
```console
|
||||
$ sudo zypper in dnf
|
||||
$ sudo dnf copr enable wezfurlong/wezterm-nightly <repository>
|
||||
```
|
||||
where `<repository>` is one of the following, depending on the flavor and architecture:
|
||||
`opensuse-tumbleweed-x86_64`, `opensuse-tumbleweed-aarch64`, `opensuse-leap-15.5-x86_64`, `opensuse-leap-15.5-aarch64`.
|
||||
|
||||
```console
|
||||
$ sudo dnf install wezterm
|
||||
```
|
||||
|
||||
## Update
|
||||
|
||||
```console
|
||||
$ sudo dnf update wezterm
|
||||
@ -199,11 +214,12 @@ hide:
|
||||
|
||||
|Distro | Stable | Nightly |
|
||||
|------------|------------------|---------------------|
|
||||
|CentOS8 |[{{ centos8_rpm_stable_asset }}]({{ centos8_rpm_stable }}) |[{{ centos8_rpm_nightly_asset }}]({{ centos8_rpm_nightly }})|
|
||||
|CentOS8 |[{{ centos8_rpm_stable_asset }}]({{ centos8_rpm_stable }}) |No longer supported|
|
||||
|CentOS9 |[{{ centos9_rpm_stable_asset }}]({{ centos9_rpm_stable }})|[{{ centos9_rpm_nightly_asset }}]({{ centos9_rpm_nightly }})|
|
||||
|Fedora37 |[{{ fedora37_rpm_stable_asset }}]({{ fedora37_rpm_stable }})|[{{ fedora37_rpm_nightly_asset }}]({{ fedora37_rpm_nightly }})|
|
||||
|Fedora37 |[{{ fedora37_rpm_stable_asset }}]({{ fedora37_rpm_stable }})|No longer supported|
|
||||
|Fedora38 |[{{ fedora38_rpm_stable_asset }}]({{ fedora38_rpm_stable }})|[{{ fedora38_rpm_nightly_asset }}]({{ fedora38_rpm_nightly }})|
|
||||
|Fedora39 |[{{ fedora39_rpm_stable_asset }}]({{ fedora39_rpm_stable }})|[{{ fedora39_rpm_nightly_asset }}]({{ fedora39_rpm_nightly }})|
|
||||
|Fedora40 |Nightly only|[{{ fedora40_rpm_nightly_asset }}]({{ fedora40_rpm_nightly }})|
|
||||
|
||||
To download and install from the CLI you can use something like this, which
|
||||
shows how to install the Fedora 39 package:
|
||||
@ -212,24 +228,24 @@ hide:
|
||||
$ sudo dnf install -y {{ fedora39_rpm_stable }}
|
||||
```
|
||||
|
||||
=== "SUSE"
|
||||
## SUSE Linux
|
||||
=== "openSUSE"
|
||||
## openSUSE
|
||||
|
||||
!!! note
|
||||
It is recommended that you install via Copr so that it is easiest
|
||||
to stay up to date as future versions of wezterm are released.
|
||||
|
||||
WezTerm is also available in the official Factory repo in openSUSE
|
||||
Tumbleweed. To install from Factory instead of Copr:
|
||||
## openSUSE Tumbleweed/Slowroll
|
||||
|
||||
The stable version of WezTerm is available in the official repositories.
|
||||
|
||||
```console
|
||||
$ zypper addrepo https://download.opensuse.org/repositories/openSUSE:Factory/standard/openSUSE:Factory.repo
|
||||
$ zypper refresh
|
||||
$ zypper install wezterm
|
||||
```
|
||||
|
||||
* The package installs `/usr/bin/wezterm` and `/usr/share/applications/org.wezfurlong.wezterm.desktop`
|
||||
* Configuration instructions can be [found here](../config/files.md)
|
||||
## openSUSE Leap
|
||||
|
||||
Use Copr or build if from source.
|
||||
|
||||
=== "Arch"
|
||||
## Arch Linux
|
||||
|
@ -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):
|
||||
|
@ -5,14 +5,14 @@ for yourself. WezTerm should run on any modern unix as well as Windows 10 and
|
||||
macOS.
|
||||
|
||||
* Install `rustup` to get the `rust` compiler installed on your system.
|
||||
[Install rustup](https://www.rust-lang.org/en-US/install.html)
|
||||
[Install rustup](https://www.rust-lang.org/en-US/install.html).
|
||||
* Rust version 1.71 or later is required
|
||||
* Build in release mode: `cargo build --release`
|
||||
* Run it via either `cargo run --release --bin wezterm` or `target/release/wezterm`
|
||||
|
||||
You will need a collection of support libraries; the [`get-deps`](https://github.com/wez/wezterm/blob/main/get-deps) script will
|
||||
attempt to install them for you. If it doesn't know about your system,
|
||||
[please contribute instructions!](https://github.com/wez/wezterm/blob/main/CONTRIBUTING.md)
|
||||
[please contribute instructions!](https://github.com/wez/wezterm/blob/main/CONTRIBUTING.md).
|
||||
|
||||
If you don't plan to submit a pull request to the wezterm repo, you can
|
||||
download a smaller source tarball using these steps:
|
||||
@ -53,3 +53,19 @@ $ cargo build --release --no-default-features --features vendored-fonts
|
||||
```
|
||||
|
||||
Building without X11 is not supported.
|
||||
|
||||
### Building on Windows
|
||||
|
||||
When installing Rust, you must use select the MSVC version of Rust. It is the
|
||||
only supported way to build wezterm.
|
||||
|
||||
On Windows, instead of using `get-deps`, the only other dependency that you need is
|
||||
[Strawberry Perl](https://strawberryperl.com). You must ensure that you have
|
||||
your `PATH` environment set up to find that particular `perl.exe` ahead of any
|
||||
other perl that you may have installed on your system. This particular version
|
||||
of perl is required to build openssl on Windows.
|
||||
|
||||
```console
|
||||
$ set PATH=c:\Strawberry\perl\bin;%PATH%
|
||||
```
|
||||
|
||||
|
1
get-deps
1
get-deps
@ -115,7 +115,6 @@ suse_deps() {
|
||||
if [ "${CI}" == "yes" ] ; then
|
||||
RESOLVE="--allow-downgrade"
|
||||
fi
|
||||
$ZYPPER install $RESOLVE -yl 'perl-FindBin' 'perl-File-Compare' || true
|
||||
$ZYPPER install $RESOLVE -yl \
|
||||
'make' \
|
||||
'gcc' \
|
||||
|
@ -11,7 +11,7 @@ ahash = "0.8"
|
||||
config = { path = "../config" }
|
||||
fnv = "1.0"
|
||||
intrusive-collections = "0.9"
|
||||
metrics = "0.22"
|
||||
metrics = "0.23"
|
||||
|
||||
[dev-dependencies]
|
||||
k9 = "0.12"
|
||||
|
@ -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| {
|
||||
|
@ -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}*"
|
||||
|
@ -25,7 +25,7 @@ lazy_static = "1.4"
|
||||
libc = "0.2"
|
||||
log = "0.4"
|
||||
luahelper = { path = "../luahelper" }
|
||||
metrics = "0.22"
|
||||
metrics = "0.23"
|
||||
mlua = "0.9"
|
||||
names = { version = "0.12", default-features = false }
|
||||
nix = {version="0.28", features=["term"]}
|
||||
|
@ -87,6 +87,23 @@ impl std::ops::DerefMut for Pattern {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
|
||||
pub enum PatternType {
|
||||
CaseSensitiveString,
|
||||
CaseInSensitiveString,
|
||||
Regex,
|
||||
}
|
||||
|
||||
impl From<&Pattern> for PatternType {
|
||||
fn from(value: &Pattern) -> Self {
|
||||
match value {
|
||||
Pattern::CaseSensitiveString(_) => PatternType::CaseSensitiveString,
|
||||
Pattern::CaseInSensitiveString(_) => PatternType::CaseInSensitiveString,
|
||||
Pattern::Regex(_) => PatternType::Regex,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Why a close request is being made
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
|
||||
pub enum CloseReason {
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -131,6 +131,8 @@ impl Window {
|
||||
|
||||
if len > 0 && self.active >= len {
|
||||
self.set_active_without_saving(len - 1);
|
||||
} else {
|
||||
self.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5,11 +5,11 @@
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1705309234,
|
||||
"narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
|
||||
"lastModified": 1710146030,
|
||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
|
||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -71,11 +71,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1705403940,
|
||||
"narHash": "sha256-bl7E3w35Bleiexg01WsN0RuAQEL23HaQeNBC2zjt+9w=",
|
||||
"lastModified": 1721466660,
|
||||
"narHash": "sha256-pFSxgSZqZ3h+5Du0KvEL1ccDZBwu4zvOil1zzrPNb3c=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "f0326542989e1bdac955ad6269b334a8da4b0c95",
|
||||
"rev": "6e14bbce7bea6c4efd7adfa88a40dac750d80100",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -98,19 +98,16 @@
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"flake-utils": [
|
||||
"flake-utils"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1705457855,
|
||||
"narHash": "sha256-5cCHQtP/PEHK1YNTQyZN9v8ehpLTjc723ZSKAP3Tva8=",
|
||||
"lastModified": 1721441897,
|
||||
"narHash": "sha256-gYGX9/22tPNeF7dR6bWN5rsrpU4d06GnQNNgZ6ZiXz0=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "a854609265af0e9f48c92e497679edf8fab9e690",
|
||||
"rev": "b7996075da11a2d441cfbf4e77c2939ce51506fd",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -6,10 +6,7 @@
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
rust-overlay = {
|
||||
url = "github:oxalica/rust-overlay";
|
||||
inputs = {
|
||||
nixpkgs.follows = "nixpkgs";
|
||||
flake-utils.follows = "flake-utils";
|
||||
};
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
# NOTE: @2024-05 Nix flakes does not support getting git submodules of 'self'.
|
||||
@ -159,6 +156,8 @@
|
||||
tic -x -o $out/share/terminfo ${src}/termwiz/data/wezterm.terminfo
|
||||
'';
|
||||
};
|
||||
|
||||
meta.mainProgram = "wezterm";
|
||||
};
|
||||
|
||||
devShell = pkgs.mkShell {
|
||||
|
@ -84,7 +84,9 @@ pub async fn fetch_url(url: &str) -> anyhow::Result<Vec<u8>> {
|
||||
}
|
||||
|
||||
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())
|
||||
|
@ -297,7 +297,7 @@ pub(crate) struct ImageInfo {
|
||||
}
|
||||
|
||||
pub(crate) fn dimensions(data: &[u8]) -> anyhow::Result<ImageInfo> {
|
||||
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!?"))?;
|
||||
|
@ -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).
|
||||
|
@ -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))
|
||||
|
189
termwiz/src/lineedit/buffer.rs
Normal file
189
termwiz/src/lineedit/buffer.rs
Normal file
@ -0,0 +1,189 @@
|
||||
use unicode_segmentation::GraphemeCursor;
|
||||
|
||||
use super::actions::Movement;
|
||||
|
||||
pub struct LineEditBuffer {
|
||||
line: String,
|
||||
/// byte index into the UTF-8 string data of the insertion
|
||||
/// point. This is NOT the number of graphemes!
|
||||
cursor: usize,
|
||||
}
|
||||
|
||||
impl Default for LineEditBuffer {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
line: String::new(),
|
||||
cursor: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl LineEditBuffer {
|
||||
pub fn new(line: &str, cursor: usize) -> Self {
|
||||
let mut buffer = Self::default();
|
||||
buffer.set_line_and_cursor(line, cursor);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
pub fn get_line(&self) -> &str {
|
||||
return &self.line;
|
||||
}
|
||||
|
||||
pub fn get_cursor(&self) -> usize {
|
||||
return self.cursor;
|
||||
}
|
||||
|
||||
pub fn insert_char(&mut self, c: char) {
|
||||
self.line.insert(self.cursor, c);
|
||||
let mut cursor = GraphemeCursor::new(self.cursor, self.line.len(), false);
|
||||
if let Ok(Some(pos)) = cursor.next_boundary(&self.line, 0) {
|
||||
self.cursor = pos;
|
||||
}
|
||||
}
|
||||
|
||||
pub fn insert_text(&mut self, text: &str) {
|
||||
self.line.insert_str(self.cursor, text);
|
||||
self.cursor += text.len();
|
||||
}
|
||||
|
||||
/// The cursor position is the byte index into the line UTF-8 bytes.
|
||||
/// Panics: the cursor must be the first byte in a UTF-8 code point
|
||||
/// sequence or the end of the provided line.
|
||||
pub fn set_line_and_cursor(&mut self, line: &str, cursor: usize) {
|
||||
assert!(
|
||||
line.is_char_boundary(cursor),
|
||||
"cursor {} is not a char boundary of the new line {}",
|
||||
cursor,
|
||||
line
|
||||
);
|
||||
self.line = line.to_string();
|
||||
self.cursor = cursor;
|
||||
}
|
||||
|
||||
pub fn kill_text(&mut self, kill_movement: Movement, move_movement: Movement) {
|
||||
let kill_pos = self.eval_movement(kill_movement);
|
||||
let new_cursor = self.eval_movement(move_movement);
|
||||
|
||||
let (lower, upper) = if kill_pos < self.cursor {
|
||||
(kill_pos, self.cursor)
|
||||
} else {
|
||||
(self.cursor, kill_pos)
|
||||
};
|
||||
|
||||
self.line.replace_range(lower..upper, "");
|
||||
|
||||
// Clamp to the line length, otherwise a kill to end of line
|
||||
// command will leave the cursor way off beyond the end of
|
||||
// the line.
|
||||
self.cursor = new_cursor.min(self.line.len());
|
||||
}
|
||||
|
||||
pub fn clear(&mut self) {
|
||||
self.line.clear();
|
||||
self.cursor = 0;
|
||||
}
|
||||
|
||||
pub fn exec_movement(&mut self, movement: Movement) {
|
||||
self.cursor = self.eval_movement(movement);
|
||||
}
|
||||
|
||||
/// Compute the cursor position after applying movement
|
||||
fn eval_movement(&self, movement: Movement) -> usize {
|
||||
match movement {
|
||||
Movement::BackwardChar(rep) => {
|
||||
let mut position = self.cursor;
|
||||
for _ in 0..rep {
|
||||
let mut cursor = GraphemeCursor::new(position, self.line.len(), false);
|
||||
if let Ok(Some(pos)) = cursor.prev_boundary(&self.line, 0) {
|
||||
position = pos;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
position
|
||||
}
|
||||
Movement::BackwardWord(rep) => {
|
||||
let char_indices: Vec<(usize, char)> = self.line.char_indices().collect();
|
||||
if char_indices.is_empty() {
|
||||
return self.cursor;
|
||||
}
|
||||
let mut char_position = char_indices
|
||||
.iter()
|
||||
.position(|(idx, _)| *idx == self.cursor)
|
||||
.unwrap_or(char_indices.len() - 1);
|
||||
|
||||
for _ in 0..rep {
|
||||
if char_position == 0 {
|
||||
break;
|
||||
}
|
||||
|
||||
let mut found = None;
|
||||
for prev in (0..char_position - 1).rev() {
|
||||
if char_indices[prev].1.is_whitespace() {
|
||||
found = Some(prev + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
char_position = found.unwrap_or(0);
|
||||
}
|
||||
char_indices[char_position].0
|
||||
}
|
||||
Movement::ForwardWord(rep) => {
|
||||
let char_indices: Vec<(usize, char)> = self.line.char_indices().collect();
|
||||
if char_indices.is_empty() {
|
||||
return self.cursor;
|
||||
}
|
||||
let mut char_position = char_indices
|
||||
.iter()
|
||||
.position(|(idx, _)| *idx == self.cursor)
|
||||
.unwrap_or_else(|| char_indices.len());
|
||||
|
||||
for _ in 0..rep {
|
||||
// Skip any non-whitespace characters
|
||||
while char_position < char_indices.len()
|
||||
&& !char_indices[char_position].1.is_whitespace()
|
||||
{
|
||||
char_position += 1;
|
||||
}
|
||||
|
||||
// Skip any whitespace characters
|
||||
while char_position < char_indices.len()
|
||||
&& char_indices[char_position].1.is_whitespace()
|
||||
{
|
||||
char_position += 1;
|
||||
}
|
||||
|
||||
// We are now on the start of the next word
|
||||
}
|
||||
char_indices
|
||||
.get(char_position)
|
||||
.map(|(i, _)| *i)
|
||||
.unwrap_or_else(|| self.line.len())
|
||||
}
|
||||
Movement::ForwardChar(rep) => {
|
||||
let mut position = self.cursor;
|
||||
for _ in 0..rep {
|
||||
let mut cursor = GraphemeCursor::new(position, self.line.len(), false);
|
||||
if let Ok(Some(pos)) = cursor.next_boundary(&self.line, 0) {
|
||||
position = pos;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
position
|
||||
}
|
||||
Movement::StartOfLine => 0,
|
||||
Movement::EndOfLine => {
|
||||
let mut cursor =
|
||||
GraphemeCursor::new(self.line.len().saturating_sub(1), self.line.len(), false);
|
||||
if let Ok(Some(pos)) = cursor.next_boundary(&self.line, 0) {
|
||||
pos
|
||||
} else {
|
||||
self.cursor
|
||||
}
|
||||
}
|
||||
Movement::None => self.cursor,
|
||||
}
|
||||
}
|
||||
}
|
@ -43,12 +43,13 @@ use crate::surface::change::ChangeSequence;
|
||||
use crate::surface::{Change, Position};
|
||||
use crate::terminal::{new_terminal, Terminal};
|
||||
use crate::{bail, ensure, Result};
|
||||
use unicode_segmentation::GraphemeCursor;
|
||||
|
||||
mod actions;
|
||||
mod buffer;
|
||||
mod history;
|
||||
mod host;
|
||||
pub use actions::{Action, Movement, RepeatCount};
|
||||
pub use buffer::LineEditBuffer;
|
||||
pub use history::*;
|
||||
pub use host::*;
|
||||
|
||||
@ -71,10 +72,7 @@ pub use host::*;
|
||||
pub struct LineEditor<'term> {
|
||||
terminal: &'term mut dyn Terminal,
|
||||
prompt: String,
|
||||
line: String,
|
||||
/// byte index into the UTF-8 string data of the insertion
|
||||
/// point. This is NOT the number of graphemes!
|
||||
cursor: usize,
|
||||
line: LineEditBuffer,
|
||||
|
||||
history_pos: Option<usize>,
|
||||
bottom_line: Option<String>,
|
||||
@ -155,8 +153,7 @@ impl<'term> LineEditor<'term> {
|
||||
Self {
|
||||
terminal,
|
||||
prompt: "> ".to_owned(),
|
||||
line: String::new(),
|
||||
cursor: 0,
|
||||
line: LineEditBuffer::default(),
|
||||
history_pos: None,
|
||||
bottom_line: None,
|
||||
completion: None,
|
||||
@ -185,8 +182,8 @@ impl<'term> LineEditor<'term> {
|
||||
matching_line,
|
||||
cursor,
|
||||
..
|
||||
} => (matching_line, *cursor),
|
||||
_ => (&self.line, self.cursor),
|
||||
} => (matching_line.as_str(), *cursor),
|
||||
_ => (self.line.get_line(), self.line.get_cursor()),
|
||||
};
|
||||
|
||||
let cursor_position_after_printing_prompt = changes.current_cursor_position();
|
||||
@ -258,7 +255,7 @@ impl<'term> LineEditor<'term> {
|
||||
// the text in the line editing area, but since the input
|
||||
// is drawn here, we render an `_` to indicate where the input
|
||||
// position really is.
|
||||
changes.add(format!("\r\n{}: {}_", label, self.line));
|
||||
changes.add(format!("\r\n{}: {}_", label, self.line.get_line()));
|
||||
}
|
||||
|
||||
// Add some debugging status at the bottom
|
||||
@ -512,123 +509,9 @@ impl<'term> LineEditor<'term> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Compute the cursor position after applying movement
|
||||
fn eval_movement(&self, movement: Movement) -> usize {
|
||||
match movement {
|
||||
Movement::BackwardChar(rep) => {
|
||||
let mut position = self.cursor;
|
||||
for _ in 0..rep {
|
||||
let mut cursor = GraphemeCursor::new(position, self.line.len(), false);
|
||||
if let Ok(Some(pos)) = cursor.prev_boundary(&self.line, 0) {
|
||||
position = pos;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
position
|
||||
}
|
||||
Movement::BackwardWord(rep) => {
|
||||
let char_indices: Vec<(usize, char)> = self.line.char_indices().collect();
|
||||
if char_indices.is_empty() {
|
||||
return self.cursor;
|
||||
}
|
||||
let mut char_position = char_indices
|
||||
.iter()
|
||||
.position(|(idx, _)| *idx == self.cursor)
|
||||
.unwrap_or(char_indices.len() - 1);
|
||||
|
||||
for _ in 0..rep {
|
||||
if char_position == 0 {
|
||||
break;
|
||||
}
|
||||
|
||||
let mut found = None;
|
||||
for prev in (0..char_position - 1).rev() {
|
||||
if char_indices[prev].1.is_whitespace() {
|
||||
found = Some(prev + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
char_position = found.unwrap_or(0);
|
||||
}
|
||||
char_indices[char_position].0
|
||||
}
|
||||
Movement::ForwardWord(rep) => {
|
||||
let char_indices: Vec<(usize, char)> = self.line.char_indices().collect();
|
||||
if char_indices.is_empty() {
|
||||
return self.cursor;
|
||||
}
|
||||
let mut char_position = char_indices
|
||||
.iter()
|
||||
.position(|(idx, _)| *idx == self.cursor)
|
||||
.unwrap_or_else(|| char_indices.len());
|
||||
|
||||
for _ in 0..rep {
|
||||
// Skip any non-whitespace characters
|
||||
while char_position < char_indices.len()
|
||||
&& !char_indices[char_position].1.is_whitespace()
|
||||
{
|
||||
char_position += 1;
|
||||
}
|
||||
|
||||
// Skip any whitespace characters
|
||||
while char_position < char_indices.len()
|
||||
&& char_indices[char_position].1.is_whitespace()
|
||||
{
|
||||
char_position += 1;
|
||||
}
|
||||
|
||||
// We are now on the start of the next word
|
||||
}
|
||||
char_indices
|
||||
.get(char_position)
|
||||
.map(|(i, _)| *i)
|
||||
.unwrap_or_else(|| self.line.len())
|
||||
}
|
||||
Movement::ForwardChar(rep) => {
|
||||
let mut position = self.cursor;
|
||||
for _ in 0..rep {
|
||||
let mut cursor = GraphemeCursor::new(position, self.line.len(), false);
|
||||
if let Ok(Some(pos)) = cursor.next_boundary(&self.line, 0) {
|
||||
position = pos;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
position
|
||||
}
|
||||
Movement::StartOfLine => 0,
|
||||
Movement::EndOfLine => {
|
||||
let mut cursor =
|
||||
GraphemeCursor::new(self.line.len().saturating_sub(1), self.line.len(), false);
|
||||
if let Ok(Some(pos)) = cursor.next_boundary(&self.line, 0) {
|
||||
pos
|
||||
} else {
|
||||
self.cursor
|
||||
}
|
||||
}
|
||||
Movement::None => self.cursor,
|
||||
}
|
||||
}
|
||||
|
||||
fn kill_text(&mut self, kill_movement: Movement, move_movement: Movement) {
|
||||
self.clear_completion();
|
||||
let kill_pos = self.eval_movement(kill_movement);
|
||||
let new_cursor = self.eval_movement(move_movement);
|
||||
|
||||
let (lower, upper) = if kill_pos < self.cursor {
|
||||
(kill_pos, self.cursor)
|
||||
} else {
|
||||
(self.cursor, kill_pos)
|
||||
};
|
||||
|
||||
self.line.replace_range(lower..upper, "");
|
||||
|
||||
// Clamp to the line length, otherwise a kill to end of line
|
||||
// command will leave the cursor way off beyond the end of
|
||||
// the line.
|
||||
self.cursor = new_cursor.min(self.line.len());
|
||||
self.line.kill_text(kill_movement, move_movement);
|
||||
}
|
||||
|
||||
fn clear_completion(&mut self) {
|
||||
@ -642,8 +525,7 @@ impl<'term> LineEditor<'term> {
|
||||
..
|
||||
} = &self.state
|
||||
{
|
||||
self.line = matching_line.to_string();
|
||||
self.cursor = *cursor;
|
||||
self.line.set_line_and_cursor(matching_line, *cursor);
|
||||
self.state = EditorState::Editing;
|
||||
}
|
||||
}
|
||||
@ -653,23 +535,17 @@ impl<'term> LineEditor<'term> {
|
||||
/// a custom editor operation on the line buffer contents.
|
||||
/// The cursor position is the byte index into the line UTF-8 bytes.
|
||||
pub fn get_line_and_cursor(&mut self) -> (&str, usize) {
|
||||
(&self.line, self.cursor)
|
||||
(self.line.get_line(), self.line.get_cursor())
|
||||
}
|
||||
|
||||
/// Sets the current line and cursor position.
|
||||
/// You don't normally need to call this unless you are defining
|
||||
/// a custom editor operation on the line buffer contents.
|
||||
/// The cursor position is the byte index into the line UTF-8 bytes.
|
||||
/// Panics: the cursor must be within the bounds of the provided line.
|
||||
/// Panics: the cursor must be the first byte in a UTF-8 code point
|
||||
/// sequence or the end of the provided line.
|
||||
pub fn set_line_and_cursor(&mut self, line: &str, cursor: usize) {
|
||||
assert!(
|
||||
cursor < line.len(),
|
||||
"cursor {} is outside the byte length of the new line of length {}",
|
||||
cursor,
|
||||
line.len()
|
||||
);
|
||||
self.line = line.to_string();
|
||||
self.cursor = cursor;
|
||||
self.line.set_line_and_cursor(line, cursor);
|
||||
}
|
||||
|
||||
/// Call this after changing modifying the line buffer.
|
||||
@ -698,9 +574,9 @@ impl<'term> LineEditor<'term> {
|
||||
let last_matching_line;
|
||||
let last_cursor;
|
||||
|
||||
if let Some(result) = host
|
||||
.history()
|
||||
.search(history_pos, *style, *direction, &self.line)
|
||||
if let Some(result) =
|
||||
host.history()
|
||||
.search(history_pos, *style, *direction, self.line.get_line())
|
||||
{
|
||||
self.history_pos.replace(result.idx);
|
||||
last_matching_line = result.line.to_string();
|
||||
@ -733,7 +609,6 @@ impl<'term> LineEditor<'term> {
|
||||
// Not yet searching, so we start a new search
|
||||
// with an empty pattern
|
||||
self.line.clear();
|
||||
self.cursor = 0;
|
||||
self.history_pos.take();
|
||||
}
|
||||
|
||||
@ -752,9 +627,9 @@ impl<'term> LineEditor<'term> {
|
||||
},
|
||||
};
|
||||
|
||||
let search_result = host
|
||||
.history()
|
||||
.search(history_pos, style, direction, &self.line);
|
||||
let search_result =
|
||||
host.history()
|
||||
.search(history_pos, style, direction, self.line.get_line());
|
||||
|
||||
let last_matching_line;
|
||||
let last_cursor;
|
||||
@ -836,25 +711,20 @@ impl<'term> LineEditor<'term> {
|
||||
Action::Move(movement) => {
|
||||
self.clear_completion();
|
||||
self.cancel_search_state();
|
||||
self.cursor = self.eval_movement(movement);
|
||||
self.line.exec_movement(movement);
|
||||
}
|
||||
|
||||
Action::InsertChar(rep, c) => {
|
||||
self.clear_completion();
|
||||
for _ in 0..rep {
|
||||
self.line.insert(self.cursor, c);
|
||||
let mut cursor = GraphemeCursor::new(self.cursor, self.line.len(), false);
|
||||
if let Ok(Some(pos)) = cursor.next_boundary(&self.line, 0) {
|
||||
self.cursor = pos;
|
||||
}
|
||||
self.line.insert_char(c);
|
||||
}
|
||||
self.reapply_search_pattern(host);
|
||||
}
|
||||
Action::InsertText(rep, text) => {
|
||||
self.clear_completion();
|
||||
for _ in 0..rep {
|
||||
self.line.insert_str(self.cursor, &text);
|
||||
self.cursor += text.len();
|
||||
self.line.insert_text(&text);
|
||||
}
|
||||
self.reapply_search_pattern(host);
|
||||
}
|
||||
@ -870,18 +740,16 @@ impl<'term> LineEditor<'term> {
|
||||
let prior_idx = cur_pos.saturating_sub(1);
|
||||
if let Some(prior) = host.history().get(prior_idx) {
|
||||
self.history_pos = Some(prior_idx);
|
||||
self.line = prior.to_string();
|
||||
self.cursor = self.line.len();
|
||||
self.line.set_line_and_cursor(&prior, prior.len());
|
||||
}
|
||||
} else if let Some(last) = host.history().last() {
|
||||
self.bottom_line = Some(self.line.clone());
|
||||
self.bottom_line = Some(self.line.get_line().to_string());
|
||||
self.history_pos = Some(last);
|
||||
self.line = host
|
||||
let line = host
|
||||
.history()
|
||||
.get(last)
|
||||
.expect("History::last and History::get to be consistent")
|
||||
.to_string();
|
||||
self.cursor = self.line.len();
|
||||
.expect("History::last and History::get to be consistent");
|
||||
self.line.set_line_and_cursor(&line, line.len())
|
||||
}
|
||||
}
|
||||
Action::HistoryNext => {
|
||||
@ -892,14 +760,11 @@ impl<'term> LineEditor<'term> {
|
||||
let next_idx = cur_pos.saturating_add(1);
|
||||
if let Some(next) = host.history().get(next_idx) {
|
||||
self.history_pos = Some(next_idx);
|
||||
self.line = next.to_string();
|
||||
self.cursor = self.line.len();
|
||||
self.line.set_line_and_cursor(&next, next.len());
|
||||
} else if let Some(bottom) = self.bottom_line.take() {
|
||||
self.line = bottom;
|
||||
self.cursor = self.line.len();
|
||||
self.line.set_line_and_cursor(&bottom, bottom.len());
|
||||
} else {
|
||||
self.line.clear();
|
||||
self.cursor = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -915,18 +780,17 @@ impl<'term> LineEditor<'term> {
|
||||
self.cancel_search_state();
|
||||
|
||||
if self.completion.is_none() {
|
||||
let candidates = host.complete(&self.line, self.cursor);
|
||||
let candidates = host.complete(self.line.get_line(), self.line.get_cursor());
|
||||
if !candidates.is_empty() {
|
||||
let state = CompletionState {
|
||||
candidates,
|
||||
index: 0,
|
||||
original_line: self.line.clone(),
|
||||
original_cursor: self.cursor,
|
||||
original_line: self.line.get_line().to_string(),
|
||||
original_cursor: self.line.get_cursor(),
|
||||
};
|
||||
|
||||
let (cursor, line) = state.current();
|
||||
self.cursor = cursor;
|
||||
self.line = line;
|
||||
self.line.set_line_and_cursor(&line, cursor);
|
||||
|
||||
// If there is only a single completion then don't
|
||||
// leave us in a state where we just cycle on the
|
||||
@ -938,8 +802,7 @@ impl<'term> LineEditor<'term> {
|
||||
} else if let Some(state) = self.completion.as_mut() {
|
||||
state.next();
|
||||
let (cursor, line) = state.current();
|
||||
self.cursor = cursor;
|
||||
self.line = line;
|
||||
self.line.set_line_and_cursor(&line, cursor);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -949,7 +812,6 @@ impl<'term> LineEditor<'term> {
|
||||
|
||||
fn read_line_impl(&mut self, host: &mut dyn LineEditorHost) -> Result<Option<String>> {
|
||||
self.line.clear();
|
||||
self.cursor = 0;
|
||||
self.history_pos = None;
|
||||
self.bottom_line = None;
|
||||
self.clear_completion();
|
||||
@ -964,14 +826,14 @@ impl<'term> LineEditor<'term> {
|
||||
match self.state {
|
||||
EditorState::Searching { .. } | EditorState::Editing => {}
|
||||
EditorState::Cancelled => return Ok(None),
|
||||
EditorState::Accepted => return Ok(Some(self.line.clone())),
|
||||
EditorState::Accepted => return Ok(Some(self.line.get_line().to_string())),
|
||||
EditorState::Inactive => bail!("editor is inactive during read line!?"),
|
||||
}
|
||||
} else {
|
||||
self.render(host)?;
|
||||
}
|
||||
}
|
||||
Ok(Some(self.line.clone()))
|
||||
Ok(Some(self.line.get_line().to_string()))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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),
|
||||
}
|
||||
|
@ -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<P: AsRef<Path>>(path: P) -> Result<Self, Error> {
|
||||
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<PathBuf, Error> {
|
||||
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<BoxedReader, Error> {
|
||||
|
@ -20,7 +20,7 @@ lazy_static = "1.4"
|
||||
log = "0.4"
|
||||
libc = "0.2"
|
||||
lru = "0.12"
|
||||
metrics = "0.22"
|
||||
metrics = "0.23"
|
||||
mux = { path = "../mux" }
|
||||
openssl = "0.10.57"
|
||||
parking_lot = "0.12"
|
||||
|
@ -28,7 +28,7 @@ lazy_static = "1.4"
|
||||
lfucache = { path = "../lfucache" }
|
||||
log = "0.4"
|
||||
memmap2 = "0.9"
|
||||
metrics = "0.22"
|
||||
metrics = "0.23"
|
||||
ordered-float = "4.1"
|
||||
rangeset = { path = "../rangeset" }
|
||||
termwiz = { path = "../termwiz" }
|
||||
|
@ -507,6 +507,7 @@ pub enum PaintOp {
|
||||
},
|
||||
PopTransform,
|
||||
PushGlyphClip {
|
||||
#[allow(unused)]
|
||||
glyph: hb_codepoint_t,
|
||||
draw: Vec<DrawOp>,
|
||||
},
|
||||
@ -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,
|
||||
|
@ -243,7 +243,7 @@ fn record_to_cairo_surface(paint_ops: Vec<PaintOp>) -> 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()?;
|
||||
|
||||
|
@ -53,16 +53,16 @@ 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.10"
|
||||
http_req = "0.11"
|
||||
image = "0.25"
|
||||
lazy_static = "1.4"
|
||||
libc = "0.2"
|
||||
lfucache = { path = "../lfucache" }
|
||||
log = "0.4"
|
||||
luahelper = { path = "../luahelper" }
|
||||
metrics = "0.22"
|
||||
metrics = "0.23"
|
||||
mlua = {version="0.9", features=["send"]}
|
||||
mux = { path = "../mux" }
|
||||
mux-lua = { path = "../lua-api-crates/mux" }
|
||||
|
@ -168,7 +168,10 @@ END
|
||||
.join("WezTerm.app")
|
||||
.join("Contents")
|
||||
.join("Info.plist");
|
||||
let dest_plist = repo_dir.join("target").join(profile).join("Info.plist");
|
||||
let build_target_dir = std::env::var("CARGO_TARGET_DIR")
|
||||
.and_then(|s| Ok(std::path::PathBuf::from(s)))
|
||||
.unwrap_or(repo_dir.join("target").join(profile));
|
||||
let dest_plist = build_target_dir.join("Info.plist");
|
||||
println!("cargo:rerun-if-changed=assets/macos/WezTerm.app/Contents/Info.plist");
|
||||
|
||||
std::fs::copy(&src_plist, &dest_plist)
|
||||
|
@ -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<S: Into<String>>(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<BoxedReader>,
|
||||
reader: image::ImageReader<BoxedReader>,
|
||||
format: ImageFormat,
|
||||
tx: SyncSender<DecodedFrame>,
|
||||
) -> 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)?;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -7,13 +7,13 @@ use config::keyassignment::{
|
||||
};
|
||||
use mux::domain::DomainId;
|
||||
use mux::pane::{
|
||||
CachePolicy, ForEachPaneLogicalLine, LogicalLine, Pane, PaneId, Pattern,
|
||||
CachePolicy, ForEachPaneLogicalLine, LogicalLine, Pane, PaneId, Pattern, PatternType,
|
||||
PerformAssignmentResult, SearchResult, WithPaneLines,
|
||||
};
|
||||
use mux::renderable::*;
|
||||
use mux::tab::TabId;
|
||||
use ordered_float::NotNan;
|
||||
use parking_lot::{MappedMutexGuard, Mutex};
|
||||
use parking_lot::{MappedMutexGuard, Mutex, MutexGuard};
|
||||
use rangeset::RangeSet;
|
||||
use std::collections::HashMap;
|
||||
use std::ops::Range;
|
||||
@ -21,6 +21,7 @@ use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
use termwiz::cell::{Cell, CellAttributes};
|
||||
use termwiz::color::AnsiColor;
|
||||
use termwiz::lineedit::{LineEditBuffer, Movement};
|
||||
use termwiz::surface::{CursorVisibility, SequenceNo, SEQ_ZERO};
|
||||
use unicode_segmentation::*;
|
||||
use url::Url;
|
||||
@ -39,7 +40,8 @@ const SEARCH_CHUNK_SIZE: StableRowIndex = 1000;
|
||||
|
||||
pub struct CopyOverlay {
|
||||
delegate: Arc<dyn Pane>,
|
||||
render: Mutex<CopyRenderable>,
|
||||
render: Arc<Mutex<CopyRenderable>>,
|
||||
writer: Mutex<SearchOverlayPatternWriter>,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
@ -65,7 +67,8 @@ struct CopyRenderable {
|
||||
window: ::window::Window,
|
||||
|
||||
/// The text that the user entered
|
||||
pattern: Pattern,
|
||||
pattern_type: PatternType,
|
||||
search_line: LineEditBuffer,
|
||||
/// The most recently queried set of matches
|
||||
results: Vec<SearchResult>,
|
||||
by_line: HashMap<StableRowIndex, Vec<MatchResult>>,
|
||||
@ -125,6 +128,17 @@ impl CopyOverlay {
|
||||
.clone()
|
||||
.ok_or_else(|| anyhow::anyhow!("failed to clone window handle"))?;
|
||||
let dims = pane.get_dimensions();
|
||||
let pattern = if params.pattern.is_empty() {
|
||||
SAVED_PATTERN
|
||||
.lock()
|
||||
.get(&tab_id)
|
||||
.map(|p| p.clone())
|
||||
.unwrap_or(params.pattern)
|
||||
} else {
|
||||
params.pattern
|
||||
};
|
||||
let search_line = LineEditBuffer::new(&pattern, pattern.len());
|
||||
|
||||
let mut render = CopyRenderable {
|
||||
cursor,
|
||||
window,
|
||||
@ -139,15 +153,8 @@ impl CopyOverlay {
|
||||
last_result_seqno: SEQ_ZERO,
|
||||
last_bar_pos: None,
|
||||
tab_id,
|
||||
pattern: if params.pattern.is_empty() {
|
||||
SAVED_PATTERN
|
||||
.lock()
|
||||
.get(&tab_id)
|
||||
.map(|p| p.clone())
|
||||
.unwrap_or(params.pattern)
|
||||
} else {
|
||||
params.pattern
|
||||
},
|
||||
pattern_type: PatternType::from(&pattern),
|
||||
search_line,
|
||||
editing_search: params.editing_search,
|
||||
result_pos: None,
|
||||
selection_mode: SelectionMode::Cell,
|
||||
@ -161,16 +168,22 @@ impl CopyOverlay {
|
||||
render.dirty_results.add(search_row);
|
||||
render.update_search();
|
||||
|
||||
let shared_render = Arc::new(Mutex::new(render));
|
||||
let writer = SearchOverlayPatternWriter {
|
||||
render: Arc::clone(&shared_render),
|
||||
};
|
||||
|
||||
Ok(Arc::new(CopyOverlay {
|
||||
delegate: Arc::clone(pane),
|
||||
render: Mutex::new(render),
|
||||
render: shared_render,
|
||||
writer: Mutex::new(writer),
|
||||
}))
|
||||
}
|
||||
|
||||
pub fn get_params(&self) -> CopyModeParams {
|
||||
let render = self.render.lock();
|
||||
CopyModeParams {
|
||||
pattern: render.pattern.clone(),
|
||||
pattern: render.get_pattern(),
|
||||
editing_search: render.editing_search,
|
||||
}
|
||||
}
|
||||
@ -178,8 +191,11 @@ impl CopyOverlay {
|
||||
pub fn apply_params(&self, params: CopyModeParams) {
|
||||
let mut render = self.render.lock();
|
||||
render.editing_search = params.editing_search;
|
||||
if render.pattern != params.pattern {
|
||||
render.pattern = params.pattern;
|
||||
if render.get_pattern() != params.pattern {
|
||||
render.pattern_type = PatternType::from(¶ms.pattern);
|
||||
render
|
||||
.search_line
|
||||
.set_line_and_cursor(¶ms.pattern, params.pattern.len());
|
||||
render.schedule_update_search();
|
||||
}
|
||||
let search_row = render.compute_search_row();
|
||||
@ -293,18 +309,16 @@ impl CopyRenderable {
|
||||
self.by_line.clear();
|
||||
self.result_pos.take();
|
||||
|
||||
SAVED_PATTERN
|
||||
.lock()
|
||||
.insert(self.tab_id, self.pattern.clone());
|
||||
SAVED_PATTERN.lock().insert(self.tab_id, self.get_pattern());
|
||||
|
||||
let bar_pos = self.compute_search_row();
|
||||
self.dirty_results.add(bar_pos);
|
||||
self.last_result_seqno = self.delegate.get_current_seqno();
|
||||
|
||||
if !self.pattern.is_empty() {
|
||||
let pattern = self.get_pattern();
|
||||
if !pattern.is_empty() {
|
||||
let pane: Arc<dyn Pane> = self.delegate.clone();
|
||||
let window = self.window.clone();
|
||||
let pattern = self.pattern.clone();
|
||||
let dims = pane.get_dimensions();
|
||||
|
||||
let end = dims.scrollback_top + dims.scrollback_rows as StableRowIndex;
|
||||
@ -350,7 +364,7 @@ impl CopyRenderable {
|
||||
range: Range<StableRowIndex>,
|
||||
) {
|
||||
self.window.invalidate();
|
||||
if pattern != self.pattern {
|
||||
if pattern != self.get_pattern() {
|
||||
return;
|
||||
}
|
||||
let is_first = self.results.is_empty();
|
||||
@ -557,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());
|
||||
}
|
||||
|
||||
@ -627,8 +640,17 @@ impl CopyRenderable {
|
||||
}
|
||||
}
|
||||
|
||||
fn get_pattern(&self) -> Pattern {
|
||||
let pattern = self.search_line.get_line().to_string();
|
||||
match self.pattern_type {
|
||||
PatternType::CaseSensitiveString => Pattern::CaseSensitiveString(pattern),
|
||||
PatternType::CaseInSensitiveString => Pattern::CaseInSensitiveString(pattern),
|
||||
PatternType::Regex => Pattern::Regex(pattern),
|
||||
}
|
||||
}
|
||||
|
||||
fn clear_pattern(&mut self) {
|
||||
self.pattern.clear();
|
||||
self.search_line.clear();
|
||||
self.update_search();
|
||||
}
|
||||
|
||||
@ -670,12 +692,12 @@ impl CopyRenderable {
|
||||
}
|
||||
|
||||
fn cycle_match_type(&mut self) {
|
||||
let pattern = match &self.pattern {
|
||||
Pattern::CaseSensitiveString(s) => Pattern::CaseInSensitiveString(s.clone()),
|
||||
Pattern::CaseInSensitiveString(s) => Pattern::Regex(s.clone()),
|
||||
Pattern::Regex(s) => Pattern::CaseSensitiveString(s.clone()),
|
||||
let pattern_type = match &self.pattern_type {
|
||||
PatternType::CaseSensitiveString => PatternType::CaseInSensitiveString,
|
||||
PatternType::CaseInSensitiveString => PatternType::Regex,
|
||||
PatternType::Regex => PatternType::CaseSensitiveString,
|
||||
};
|
||||
self.pattern = pattern;
|
||||
self.pattern_type = pattern_type;
|
||||
self.schedule_update_search();
|
||||
}
|
||||
|
||||
@ -1090,7 +1112,7 @@ impl Pane for CopyOverlay {
|
||||
fn send_paste(&self, text: &str) -> anyhow::Result<()> {
|
||||
// paste into the search bar
|
||||
let mut r = self.render.lock();
|
||||
r.pattern.push_str(text);
|
||||
r.search_line.insert_text(text);
|
||||
r.schedule_update_search();
|
||||
Ok(())
|
||||
}
|
||||
@ -1100,7 +1122,10 @@ impl Pane for CopyOverlay {
|
||||
}
|
||||
|
||||
fn writer(&self) -> MappedMutexGuard<dyn std::io::Write> {
|
||||
self.delegate.writer()
|
||||
MutexGuard::map(self.writer.lock(), |writer| {
|
||||
let w: &mut dyn std::io::Write = writer;
|
||||
w
|
||||
})
|
||||
}
|
||||
|
||||
fn resize(&self, size: TerminalSize) -> anyhow::Result<()> {
|
||||
@ -1141,14 +1166,71 @@ impl Pane for CopyOverlay {
|
||||
(KeyCode::Char(c), KeyModifiers::NONE)
|
||||
| (KeyCode::Char(c), KeyModifiers::SHIFT) => {
|
||||
// Type to add to the pattern
|
||||
render.pattern.push(c);
|
||||
render.search_line.insert_char(c);
|
||||
|
||||
render.schedule_update_search();
|
||||
}
|
||||
(KeyCode::Backspace, KeyModifiers::NONE) => {
|
||||
// Backspace to edit the pattern
|
||||
render.pattern.pop();
|
||||
(KeyCode::Char('H'), KeyModifiers::CTRL)
|
||||
| (KeyCode::Backspace, KeyModifiers::NONE) => {
|
||||
render
|
||||
.search_line
|
||||
.kill_text(Movement::BackwardChar(1), Movement::BackwardChar(1));
|
||||
|
||||
render.schedule_update_search();
|
||||
}
|
||||
(KeyCode::Delete, KeyModifiers::NONE) => {
|
||||
render
|
||||
.search_line
|
||||
.kill_text(Movement::ForwardChar(1), Movement::None);
|
||||
|
||||
render.schedule_update_search();
|
||||
}
|
||||
(KeyCode::Backspace, KeyModifiers::ALT)
|
||||
| (KeyCode::Char('W'), KeyModifiers::CTRL) => {
|
||||
render
|
||||
.search_line
|
||||
.kill_text(Movement::BackwardWord(1), Movement::BackwardWord(1));
|
||||
|
||||
render.schedule_update_search();
|
||||
}
|
||||
(KeyCode::Backspace, KeyModifiers::SUPER) => {
|
||||
render
|
||||
.search_line
|
||||
.kill_text(Movement::StartOfLine, Movement::StartOfLine);
|
||||
|
||||
render.schedule_update_search();
|
||||
}
|
||||
(KeyCode::Char('K'), KeyModifiers::CTRL) => {
|
||||
render
|
||||
.search_line
|
||||
.kill_text(Movement::EndOfLine, Movement::EndOfLine);
|
||||
|
||||
render.schedule_update_search();
|
||||
}
|
||||
(KeyCode::Char('B'), KeyModifiers::CTRL)
|
||||
| (KeyCode::ApplicationLeftArrow, KeyModifiers::NONE)
|
||||
| (KeyCode::LeftArrow, KeyModifiers::NONE) => {
|
||||
render.search_line.exec_movement(Movement::BackwardChar(1));
|
||||
}
|
||||
(KeyCode::Char('F'), KeyModifiers::CTRL)
|
||||
| (KeyCode::ApplicationRightArrow, KeyModifiers::NONE)
|
||||
| (KeyCode::RightArrow, KeyModifiers::NONE) => {
|
||||
render.search_line.exec_movement(Movement::ForwardChar(1));
|
||||
}
|
||||
(KeyCode::ApplicationLeftArrow, KeyModifiers::CTRL)
|
||||
| (KeyCode::LeftArrow, KeyModifiers::CTRL) => {
|
||||
render.search_line.exec_movement(Movement::BackwardWord(1));
|
||||
}
|
||||
(KeyCode::ApplicationRightArrow, KeyModifiers::CTRL)
|
||||
| (KeyCode::RightArrow, KeyModifiers::CTRL) => {
|
||||
render.search_line.exec_movement(Movement::ForwardWord(1));
|
||||
}
|
||||
(KeyCode::Char('A'), KeyModifiers::CTRL) | (KeyCode::Home, KeyModifiers::NONE) => {
|
||||
render.search_line.exec_movement(Movement::StartOfLine);
|
||||
}
|
||||
(KeyCode::Char('E'), KeyModifiers::CTRL) | (KeyCode::End, KeyModifiers::NONE) => {
|
||||
render.search_line.exec_movement(Movement::EndOfLine);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
@ -1259,8 +1341,14 @@ impl Pane for CopyOverlay {
|
||||
let renderer = self.render.lock();
|
||||
if renderer.editing_search {
|
||||
// place in the search box
|
||||
// Padding between the start of the editable line and the left side of the terminal
|
||||
const SEARCH_CURSOR_PADDING: usize = 8;
|
||||
let cursor = unicode_column_width(
|
||||
&renderer.search_line.get_line()[0..renderer.search_line.get_cursor()],
|
||||
None,
|
||||
);
|
||||
StableCursorPosition {
|
||||
x: 8 + wezterm_term::unicode_column_width(&renderer.pattern, None),
|
||||
x: SEARCH_CURSOR_PADDING + cursor,
|
||||
y: renderer.compute_search_row(),
|
||||
shape: termwiz::surface::CursorShape::SteadyBlock,
|
||||
visibility: termwiz::surface::CursorVisibility::Visible,
|
||||
@ -1335,13 +1423,14 @@ impl Pane for CopyOverlay {
|
||||
|
||||
let stable_idx = idx as StableRowIndex + first_row;
|
||||
self.renderer.dirty_results.remove(stable_idx);
|
||||
let pattern = self.renderer.get_pattern();
|
||||
if stable_idx == self.search_row
|
||||
&& (self.renderer.editing_search || !self.renderer.pattern.is_empty())
|
||||
&& (self.renderer.editing_search || !pattern.is_empty())
|
||||
{
|
||||
// Replace with search UI
|
||||
let rev = CellAttributes::default().set_reverse(true).clone();
|
||||
line.fill_range(0..self.dims.cols, &Cell::new(' ', rev.clone()), SEQ_ZERO);
|
||||
let mode = &match self.renderer.pattern {
|
||||
let mode = &match pattern {
|
||||
Pattern::CaseSensitiveString(_) => "case-sensitive",
|
||||
Pattern::CaseInSensitiveString(_) => "ignore-case",
|
||||
Pattern::Regex(_) => "regex",
|
||||
@ -1358,7 +1447,7 @@ impl Pane for CopyOverlay {
|
||||
0,
|
||||
&format!(
|
||||
"Search: {} ({}/{} matches. {}{remain})",
|
||||
*self.renderer.pattern,
|
||||
*pattern,
|
||||
self.renderer.result_pos.map(|x| x + 1).unwrap_or(0),
|
||||
self.renderer.results.len(),
|
||||
mode
|
||||
@ -1437,12 +1526,12 @@ impl Pane for CopyOverlay {
|
||||
for (idx, line) in lines.iter_mut().enumerate() {
|
||||
let stable_idx = idx as StableRowIndex + top;
|
||||
renderer.dirty_results.remove(stable_idx);
|
||||
if stable_idx == search_row && (renderer.editing_search || !renderer.pattern.is_empty())
|
||||
{
|
||||
let pattern = renderer.get_pattern();
|
||||
if stable_idx == search_row && (renderer.editing_search || !pattern.is_empty()) {
|
||||
// Replace with search UI
|
||||
let rev = CellAttributes::default().set_reverse(true).clone();
|
||||
line.fill_range(0..dims.cols, &Cell::new(' ', rev.clone()), SEQ_ZERO);
|
||||
let mode = &match renderer.pattern {
|
||||
let mode = &match pattern {
|
||||
Pattern::CaseSensitiveString(_) => "case-sensitive",
|
||||
Pattern::CaseInSensitiveString(_) => "ignore-case",
|
||||
Pattern::Regex(_) => "regex",
|
||||
@ -1451,7 +1540,7 @@ impl Pane for CopyOverlay {
|
||||
0,
|
||||
&format!(
|
||||
"Search: {} ({}/{} matches. {})",
|
||||
*renderer.pattern,
|
||||
*pattern,
|
||||
renderer.result_pos.map(|x| x + 1).unwrap_or(0),
|
||||
renderer.results.len(),
|
||||
mode
|
||||
@ -1507,6 +1596,26 @@ impl Pane for CopyOverlay {
|
||||
}
|
||||
}
|
||||
|
||||
pub struct SearchOverlayPatternWriter {
|
||||
render: Arc<Mutex<CopyRenderable>>,
|
||||
}
|
||||
|
||||
impl std::io::Write for SearchOverlayPatternWriter {
|
||||
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
|
||||
let mut render = self.render.lock();
|
||||
let s = std::str::from_utf8(buf).map_err(|err| {
|
||||
std::io::Error::new(std::io::ErrorKind::Other, format!("invalid UTF-8: {err:#}"))
|
||||
})?;
|
||||
render.search_line.insert_text(s);
|
||||
render.schedule_update_search();
|
||||
Ok(buf.len())
|
||||
}
|
||||
|
||||
fn flush(&mut self) -> std::io::Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn is_whitespace_word(word: &str) -> bool {
|
||||
if let Some(c) = word.chars().next() {
|
||||
c.is_whitespace()
|
||||
@ -1574,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'),
|
||||
@ -1847,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(),
|
||||
]),
|
||||
),
|
||||
(
|
||||
|
@ -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<usize>,
|
||||
}
|
||||
@ -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<MatchResult> = 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();
|
||||
|
@ -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
|
||||
|
@ -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<Matcher> = RefCell::new(Matcher::new(nucleo_matcher::Config::DEFAULT));
|
||||
}
|
||||
|
||||
pub fn matcher_score(pattern: &Pattern, s: &str) -> Option<u32> {
|
||||
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<MatchResult> = 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();
|
||||
|
@ -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<Alias> {
|
||||
#[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) {
|
||||
(
|
||||
|
@ -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| {
|
||||
|
@ -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<usize>
|
||||
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<MatchResult> = 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();
|
||||
|
@ -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<LoadedFont>,
|
||||
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.),
|
||||
})
|
||||
}
|
||||
|
@ -72,8 +72,6 @@ pub struct LineQuadCacheKey {
|
||||
}
|
||||
|
||||
pub struct LineQuadCacheValue {
|
||||
/// For resolving hash collisions
|
||||
pub line: Line,
|
||||
pub expires: Option<Instant>,
|
||||
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<LineToEleShapeCacheKey>,
|
||||
}
|
||||
@ -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,
|
||||
|
@ -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()
|
||||
|
@ -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,
|
||||
|
@ -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"]}
|
||||
|
@ -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<Self> {
|
||||
let pki_dir = config::pki_dir()?;
|
||||
std::fs::create_dir_all(&pki_dir)?;
|
||||
log::error!("runtime dir is {}", pki_dir.display());
|
||||
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 alt_names = vec![
|
||||
hostname::get()?
|
||||
.into_string()
|
||||
.map_err(|_| anyhow!("hostname is not representable as unicode"))?,
|
||||
"localhost".to_owned(),
|
||||
];
|
||||
let unix_name = config::username_from_env()?;
|
||||
|
||||
// Create the CA certificate
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user