diff --git a/CHANGELOG.md b/CHANGELOG.md index f747c2a5..f35ccf65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- **Native Windows backdrop materials** — Settings → Appearance now offers a + **Background material** picker on Windows (**Auto / Blur / Mica / Mica Alt / + Acrylic / Off**) that maps onto the OS backdrop APIs: Mica and Mica Alt via + `DWMWA_SYSTEMBACKDROP_TYPE`, Acrylic via the native + `DWMSBT_TRANSIENTWINDOW` material on Windows 11 22H2+ (classic acrylic + before that), and Blur via `ACCENT_ENABLE_ACRYLICBLURBEHIND`. The dropdown + only lists the presets the current Windows build supports, the file + sidebar and right detail panel follow the window opacity so the material + shows through the whole workspace, and the settings panel stays opaque. + macOS and Linux keep the existing blur toggle. + - **Update tty7 without leaving the app** — the launch check and **Settings → About → Check Now** now offer **Update and Relaunch** instead of sending the user to GitHub Releases. A dedicated `tty7-updater` helper diff --git a/Cargo.lock b/Cargo.lock index 7f5f3090..71975d4e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -47,9 +47,9 @@ dependencies = [ [[package]] name = "accesskit_consumer" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950720ce064757a1b629caad3a408e8d2c63bb01f29b8a3ff8daa331053ffeb" +checksum = "5d10a236f96f87d70732e44520046785431ef01d5bcd6b041317bfadd2f88245" dependencies = [ "accesskit", "hashbrown 0.16.1", @@ -57,12 +57,12 @@ dependencies = [ [[package]] name = "accesskit_macos" -version = "0.26.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cb8b66cef272d48161b02a6317cc2bdd5f98bb0a5e79c68f704a5862aa396b" +checksum = "ce02dc63b43f0c9296af9ac946312a2dc8814427d7a64d2d600971dac55b6076" dependencies = [ "accesskit", - "accesskit_consumer 0.37.0", + "accesskit_consumer 0.38.0", "hashbrown 0.16.1", "objc2 0.5.2", "objc2-app-kit 0.2.2", @@ -146,9 +146,9 @@ dependencies = [ [[package]] name = "aes" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138" +checksum = "f8eb277bec05f56a0e0591f155a484cbd0f4f07ff2905051a48c72f004f7ed58" dependencies = [ "cipher 0.5.2", "cpubits", @@ -163,7 +163,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf011db2e21ce0d575593d749db5554b47fed37aff429e4dc50bc91ac93a028" dependencies = [ "aead", - "aes 0.9.1", + "aes 0.9.2", "cipher 0.5.2", "ctr", "ghash", @@ -179,6 +179,7 @@ checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", "const-random", + "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -186,9 +187,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -199,7 +200,7 @@ version = "0.26.1-dev" source = "git+https://github.com/l0ng-ai/alacritty?rev=1276f128fbaa8832cbc66210675cbe8aeb570499#1276f128fbaa8832cbc66210675cbe8aeb570499" dependencies = [ "base64", - "bitflags 2.13.0", + "bitflags 2.13.1", "home", "libc", "log", @@ -243,13 +244,24 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android_system_properties" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" dependencies = [ "libc", ] +[[package]] +name = "annotate-snippets" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f211a51805bc641f3ad5b7664c77d2547af685cc33b4cd8d31964027a46f13f1" +dependencies = [ + "anstyle", + "memchr", + "unicode-width", +] + [[package]] name = "anstream" version = "1.0.0" @@ -308,9 +320,9 @@ checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "apple-native-keyring-store" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "797f94b6a53d7d10b56dc18290e0d40a2158352f108bb4ff32350825081a9f29" +checksum = "2b350bfd03649e07aa05c0a81b3e15934374e585c98204a57e20b9d49f49bb9a" dependencies = [ "keyring-core", "log", @@ -319,11 +331,11 @@ dependencies = [ [[package]] name = "ar_archive_writer" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4087686b4b0a3427190bae57a1d9a478dbb2d40c5dc1bd6e2b6d797913bdd348" +checksum = "73cd58deff2140a0a8eae87e417bd01db68a33e148aa93d1e8cd837e55e312b6" dependencies = [ - "object", + "object 0.39.1", ] [[package]] @@ -334,9 +346,9 @@ checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" [[package]] name = "arc-swap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" +checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" dependencies = [ "rustversion", ] @@ -349,7 +361,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -364,6 +376,12 @@ dependencies = [ "password-hash", ] +[[package]] +name = "arraydeque" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" + [[package]] name = "arrayref" version = "0.3.9" @@ -372,9 +390,9 @@ checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "as-raw-xcb-connection" @@ -402,9 +420,9 @@ dependencies = [ [[package]] name = "ashpd" -version = "0.13.12" +version = "0.13.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "281e6645758940dee594495e28807a7672ce40f11ebf4df6c22c4fcd59e2689f" +checksum = "fb8421aaa9644a5faf26735f258b669b15f063313ef8f8e2bdb28912a1a6f111" dependencies = [ "enumflags2", "futures-channel", @@ -424,7 +442,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener 5.4.1", + "event-listener 5.4.2", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -455,9 +473,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79b3f8a79cccc2898f31920fc69f304859b3bd567490f75ebf51ae1c792a9ac" +checksum = "3976abdc8fe7d1133d43d304afd42abdf5bc3e1319d263d223bde07b5efc4be8" dependencies = [ "compression-codecs", "compression-core", @@ -473,7 +491,7 @@ checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.4.1", + "fastrand 2.5.0", "futures-lite 2.6.1", "pin-project-lite", "slab", @@ -529,7 +547,7 @@ version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ - "event-listener 5.4.1", + "event-listener 5.4.2", "event-listener-strategy", "pin-project-lite", ] @@ -558,7 +576,7 @@ dependencies = [ "async-task", "blocking", "cfg-if", - "event-listener 5.4.1", + "event-listener 5.4.2", "futures-lite 2.6.1", "rustix 1.1.4", ] @@ -571,7 +589,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -641,13 +659,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.3", ] [[package]] @@ -660,7 +678,7 @@ dependencies = [ "crc32fast", "futures-lite 2.6.1", "pin-project", - "thiserror 2.0.18", + "thiserror 2.0.20", ] [[package]] @@ -756,7 +774,7 @@ dependencies = [ "num-traits", "pastey 0.1.1", "rayon", - "thiserror 2.0.18", + "thiserror 2.0.20", "v_frame", "y4m", ] @@ -786,9 +804,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.17.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4342d8937fc7e5dd9b1c60292261c0670c882a2cd1719cfc11b1af41731e32ad" +checksum = "ce2b2dcc879c3bae0d371e77c99f2238400ef24ec001394befa67b6e543add9e" dependencies = [ "aws-lc-sys", "untrusted 0.7.1", @@ -797,9 +815,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.42.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9ceb1da931507a12f4fccea479dccd00da1943e1b4ae72d8e502d707361444" +checksum = "f09fae7be8bb3174e05c6afdb34199e6dc0c7c04ba9fa237b1967adfbde27483" dependencies = [ "cc", "cmake", @@ -818,7 +836,7 @@ dependencies = [ "cfg-if", "libc", "miniz_oxide", - "object", + "object 0.37.3", "rustc-demangle", "windows-link 0.2.1", ] @@ -864,7 +882,7 @@ version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cexpr", "clang-sys", "itertools 0.13.0", @@ -873,9 +891,9 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "shlex 1.3.0", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -922,9 +940,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" dependencies = [ "serde_core", ] @@ -1033,9 +1051,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f3f6da4992df95bbcd9af42a6c7dcb994498fc9048230405f3b36ff7cd3f145" +checksum = "a88b7ea17d208c4193f2c1e6de3c35fe71f98c96982d5ced308bdcc749ff6e1f" dependencies = [ "bytes", "cfg_aliases", @@ -1043,9 +1061,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.3" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cee35f73844aa3014bb606320a6c1f010249dbdf43342fe54b5a4f6a8ed4b79" +checksum = "1f7dc094d718f2e1c1559ad110e27eeaae14a5465d3d56dd6dbd793079fbd530" dependencies = [ "memchr", "serde_core", @@ -1071,22 +1089,22 @@ checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" [[package]] name = "bytemuck" -version = "1.25.0" +version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.2" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +checksum = "fc0e56a716f1e132ff6bf4bdac1c944a3fcdc1cae65f70a4a2a1ac3b401d2d1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.3", ] [[package]] @@ -1103,9 +1121,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "bzip2" @@ -1122,7 +1140,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cairo-sys-rs", "glib", "libc", @@ -1147,7 +1165,7 @@ version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "polling", "rustix 1.1.4", "slab", @@ -1197,16 +1215,16 @@ dependencies = [ "quote", "serde", "serde_json", - "syn 2.0.118", + "syn 2.0.119", "tempfile", "toml 0.8.23", ] [[package]] name = "cc" -version = "1.2.65" +version = "1.2.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" +checksum = "e17dd265a7d0f31ef544e1b20e03add05d3b45b491b633b10d67145d2acc1a38" dependencies = [ "find-msvc-tools", "jobserver", @@ -1256,9 +1274,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "cgl" @@ -1321,9 +1339,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "157a8ba7b480713b56f4c09fd13fc3e0a22a5dfab8097ba61cbc5feef950788a" dependencies = [ "glob", "libc", @@ -1332,9 +1350,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.4" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7" +checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" dependencies = [ "clap_builder", "clap_derive", @@ -1342,9 +1360,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.2" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b" +checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" dependencies = [ "anstream", "anstyle", @@ -1361,7 +1379,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 3.0.2", + "syn 3.0.3", ] [[package]] @@ -1407,7 +1425,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block", "cocoa-foundation 0.2.0", "core-foundation 0.10.0", @@ -1437,7 +1455,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block", "core-foundation 0.10.0", "core-graphics-types 0.2.0", @@ -1459,11 +1477,11 @@ dependencies = [ [[package]] name = "collections" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "gpui_util", "indexmap", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", ] [[package]] @@ -1495,7 +1513,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b60b5124979fccd9addd89d8b97a1d6eebb4950694520c75ddd722535ea443f" dependencies = [ "nix 0.31.3", - "thiserror 2.0.18", + "thiserror 2.0.20", ] [[package]] @@ -1625,7 +1643,7 @@ version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.10.0", "core-graphics-types 0.2.0", "foreign-types", @@ -1638,7 +1656,7 @@ version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32eb7c354ae9f6d437a6039099ce7ecd049337a8109b23d73e48e8ffba8e9cd5" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.9.4", "core-graphics-types 0.1.3", "foreign-types", @@ -1662,7 +1680,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.10.0", "libc", ] @@ -1673,7 +1691,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4416167a69126e617f8d0a214af0e3c1dbdeffcb100ddf72dcd1a1ac9893c146" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block", "cfg-if", "core-foundation 0.10.0", @@ -1721,13 +1739,13 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be17b688510d934ce13f48a2beba700e11583e281e0fda99c22bb256a14eda73" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "fontdb", "harfrust", "linebender_resource_handle", "log", "rangemap", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "self_cell", "skrifa 0.40.0", "smol_str", @@ -1783,9 +1801,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -1793,27 +1811,27 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-queue" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +checksum = "803d13fb3b09d88be9f4dbc29062c66b19bf7170867ceb746d2a8689bf6c7a26" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" [[package]] name = "crunchy" @@ -1871,9 +1889,9 @@ dependencies = [ [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "2d83cb7e7a873830708d6b02a78cd36a592c6fa14bf267b68725103b85c0d77f" dependencies = [ "link-section", "linktime-proc-macro", @@ -1928,7 +1946,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1953,9 +1971,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" +checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06" [[package]] name = "data-url" @@ -1977,7 +1995,7 @@ checksum = "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2016,18 +2034,18 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.118", + "syn 2.0.119", "unicode-xid", ] [[package]] name = "derive_refineable" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2095,7 +2113,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -2103,13 +2121,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.3", ] [[package]] @@ -2209,9 +2227,9 @@ dependencies = [ [[package]] name = "either" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" [[package]] name = "elliptic-curve" @@ -2237,14 +2255,14 @@ dependencies = [ [[package]] name = "embed-resource" -version = "3.0.9" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31a88c8d26de40ed18fe748c547845aa39de1db3afd958f8cb91579f3644bcb" +checksum = "fbfdaacccebec3b28e4866b8973543c7647797db5ada1bdab552e48fe665fbbd" dependencies = [ "cc", "memchr", "rustc_version", - "toml 1.1.2+spec-1.1.0", + "toml 1.1.4+spec-1.1.0", "vswhom", "winreg 0.55.0", ] @@ -2258,6 +2276,15 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "encoding_rs_io" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fba3fe847045ecff794b9c138293a80db914678c453ad63fbf0c6a9eb6e00b22" +dependencies = [ + "encoding_rs", +] + [[package]] name = "endi" version = "1.1.1" @@ -2281,7 +2308,7 @@ checksum = "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2293,7 +2320,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2314,7 +2341,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2334,7 +2361,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2391,11 +2418,10 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "5.4.1" +version = "5.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" dependencies = [ - "concurrent-queue", "parking", "pin-project-lite", ] @@ -2406,20 +2432,22 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.1", + "event-listener 5.4.2", "pin-project-lite", ] [[package]] name = "exr" -version = "1.74.0" +version = "1.74.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be" +checksum = "711fe42c9964295e01ee3fba3f9fe0e1d24b98886950d68efe81b1c76e21adf3" dependencies = [ "bit_field", "half", "lebe", "miniz_oxide", + "num-complex", + "pulp", "rayon-core", "smallvec", "zune-inflate", @@ -2436,9 +2464,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "fax" @@ -2504,9 +2532,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "26b73573e6edcd2af0cdf47bd6cb58f0b3839491263c314eaad1ccf24430e1de" [[package]] name = "fixedbitset" @@ -2560,7 +2588,7 @@ dependencies = [ "futures-core", "futures-sink", "nanorand", - "spin 0.9.8", + "spin 0.9.9", ] [[package]] @@ -2590,6 +2618,15 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "font-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a7299a780854a6d391be2ae1c8521c9368471b559dbfd6a8dbd9f407eaff100" +dependencies = [ + "bytemuck", +] + [[package]] name = "fontconfig-parser" version = "0.5.8" @@ -2625,13 +2662,13 @@ dependencies = [ [[package]] name = "foreign-types-macros" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.3", ] [[package]] @@ -2687,9 +2724,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "a88cf1f829d945f548cf8fec32c61b1f202b6d93b45848602fc02af4b12ad218" dependencies = [ "futures-channel", "futures-core", @@ -2702,9 +2739,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" dependencies = [ "futures-core", "futures-sink", @@ -2725,15 +2762,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458" dependencies = [ "futures-core", "futures-task", @@ -2742,9 +2779,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" [[package]] name = "futures-lite" @@ -2767,7 +2804,7 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ - "fastrand 2.4.1", + "fastrand 2.5.0", "futures-core", "futures-io", "parking", @@ -2776,32 +2813,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" dependencies = [ "futures-channel", "futures-core", @@ -3018,7 +3055,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "futures-channel", "futures-core", "futures-executor", @@ -3046,7 +3083,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -3061,15 +3098,15 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "globset" -version = "0.4.18" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" +checksum = "07c34a9410465b45bd9787443bc7370f37735bad04b0f0cd57ff1a3186c98988" dependencies = [ "aho-corasick", "bstr", @@ -3155,7 +3192,7 @@ dependencies = [ "hashbrown 0.16.1", "log", "presser", - "thiserror 2.0.18", + "thiserror 2.0.20", "windows 0.62.2", ] @@ -3165,7 +3202,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "gpu-descriptor-types", "hashbrown 0.15.5", ] @@ -3176,13 +3213,13 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] name = "gpui" version = "0.2.2" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "accesskit", "anyhow", @@ -3190,7 +3227,7 @@ dependencies = [ "async-task", "backtrace", "bindgen", - "bitflags 2.13.0", + "bitflags 2.13.1", "block", "cbindgen", "chrono", @@ -3233,7 +3270,7 @@ dependencies = [ "postage", "profiling", "proptest", - "rand 0.9.4", + "rand 0.9.5", "raw-window-handle", "refineable", "regex", @@ -3245,12 +3282,12 @@ dependencies = [ "serde_json", "slotmap", "smallvec", - "spin 0.10.0", + "spin 0.10.1", "stacksafe", "strum", "sum_tree", "taffy", - "thiserror 2.0.18", + "thiserror 2.0.20", "ttf-parser", "url", "usvg", @@ -3367,20 +3404,20 @@ source = "git+https://github.com/l0ng-ai/gpui-component?branch=tty7#2264ff991da9 dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "gpui_linux" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "accesskit", "accesskit_unix", "anyhow", "as-raw-xcb-connection", "ashpd", - "bitflags 2.13.0", + "bitflags 2.13.1", "bytemuck", "calloop", "calloop-wayland-source", @@ -3424,7 +3461,7 @@ dependencies = [ [[package]] name = "gpui_macos" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "accesskit", "accesskit_macos", @@ -3471,18 +3508,18 @@ dependencies = [ [[package]] name = "gpui_macros" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "gpui_platform" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "console_error_panic_hook", "gpui", @@ -3495,7 +3532,7 @@ dependencies = [ [[package]] name = "gpui_shared_string" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "schemars", "serde", @@ -3505,7 +3542,7 @@ dependencies = [ [[package]] name = "gpui_util" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "anyhow", "log", @@ -3514,7 +3551,7 @@ dependencies = [ [[package]] name = "gpui_web" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "anyhow", "console_error_panic_hook", @@ -3538,7 +3575,7 @@ dependencies = [ [[package]] name = "gpui_wgpu" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "anyhow", "bytemuck", @@ -3567,7 +3604,7 @@ dependencies = [ [[package]] name = "gpui_windows" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "accesskit", "accesskit_windows", @@ -3580,7 +3617,7 @@ dependencies = [ "itertools 0.14.0", "log", "parking_lot", - "rand 0.9.4", + "rand 0.9.5", "raw-window-handle", "smallvec", "util", @@ -3591,6 +3628,16 @@ dependencies = [ "windows-registry 0.5.3", ] +[[package]] +name = "granit-parser" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d03f81ad4732830d85cfd417a9f62cde6dadda4354d37d078a6084a19560aa2d" +dependencies = [ + "arraydeque", + "smallvec", +] + [[package]] name = "grid" version = "1.0.1" @@ -3657,7 +3704,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -3697,7 +3744,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "bytemuck", "core_maths", "read-fonts 0.37.0", @@ -3847,14 +3894,14 @@ dependencies = [ "markup5ever", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "http" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" dependencies = [ "bytes", "itoa", @@ -3862,9 +3909,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", "http", @@ -3872,9 +3919,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" dependencies = [ "bytes", "futures-core", @@ -3886,7 +3933,7 @@ dependencies = [ [[package]] name = "http_client" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "anyhow", "async-compression", @@ -3911,7 +3958,7 @@ dependencies = [ [[package]] name = "http_client_tls" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "rustls", "rustls-platform-verifier", @@ -3925,9 +3972,9 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hybrid-array" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" +checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" dependencies = [ "ctutils", "subtle", @@ -3937,9 +3984,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" dependencies = [ "atomic-waker", "bytes", @@ -4121,9 +4168,9 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.31" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f8a7b8211e695a1d0cd91cace480d4d0bd57667ab10277cc412c5f7f4884f83" +checksum = "00b69833ed729dc5aa7d19541d96d6cf8e9137194207a04916d658e43168402f" dependencies = [ "crossbeam-deque", "globset", @@ -4201,7 +4248,7 @@ dependencies = [ "proc-macro-error3", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -4239,20 +4286,20 @@ dependencies = [ [[package]] name = "inotify" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533e68a5842e734946fe159fb03fc9bbbb254f590dd0d8ad321ae5ff7beca2c1" +checksum = "153be1941a183ec9ccd095ddbe17a8b8d435ef6c76e9e02451b933c3999af2c8" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "inotify-sys", "libc", ] [[package]] name = "inotify-sys" -version = "0.1.5" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +checksum = "c033f80b2c113cdf91ab7a33faa9cbc014726dcad99880c8609af2a370edf37d" dependencies = [ "libc", ] @@ -4309,7 +4356,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -4344,9 +4391,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78" [[package]] name = "is-docker" @@ -4408,9 +4455,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jieba-macros" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38fc0f3831de71556de69643b80a08a5c8cd260a23c6b8dbeb7cd923c779cac5" +checksum = "34904340bc65749a9e9a02fcc7f3368e675427c18447b9bbe02df52c15c9a36a" dependencies = [ "phf_codegen 0.13.1", ] @@ -4427,7 +4474,7 @@ dependencies = [ "jieba-macros", "phf 0.13.1", "regex", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", ] [[package]] @@ -4471,24 +4518,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.103" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" dependencies = [ "cfg-if", "futures-util", @@ -4497,9 +4544,9 @@ dependencies = [ [[package]] name = "keccak" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" +checksum = "ffd9697dc4a9a62e2da93389f34400b77a28f0287711263cabb203b3ccb9c0e4" dependencies = [ "cfg-if", "cpufeatures 0.3.0", @@ -4521,16 +4568,16 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "serde", "unicode-segmentation", ] [[package]] name = "keyring" -version = "4.1.5" +version = "4.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0298a59b384c540e408a600c8b375a09b49c3f97debc080e2c30675d79a6368a" +checksum = "72585bb6cc9bc370d1d545b7e23fcce71dfd4461c5e15275e3cf51bdfd9a980a" dependencies = [ "apple-native-keyring-store", "keyring-core", @@ -4566,9 +4613,9 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "kqueue" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "273c0752728918e0ac4976f2b275b6fefb9ecd400585dec929419f3844cd87b5" +checksum = "8d763e5b24120b4ddf50de6c92308156765aabfbbccebf401da7cff2d70a41ea" dependencies = [ "kqueue-sys", "libc", @@ -4580,7 +4627,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "libc", ] @@ -4688,9 +4735,9 @@ checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libflate" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd96e993e5f3368b0cb8497dae6c860c22af8ff18388c61c6c0b86c58d86b5df" +checksum = "a4da9b700e758e57152a1fd1c52cbdc5727c1aa6d8743dc1acda917398f1d76c" dependencies = [ "adler32", "crc32fast", @@ -4726,7 +4773,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e440a6151f5ef06571612e4121709aed90cfc0c40f8161f9090c71656758086d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "bytes", "libgssapi-sys", ] @@ -4769,9 +4816,9 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" +checksum = "2026a5056764a10b2bf5d56488cba40da507f5493a6a429340e2004d9ed085fa" dependencies = [ "libc", ] @@ -4803,15 +4850,15 @@ checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4" [[package]] name = "link-section" -version = "0.18.3" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24670b639492630905459a6c7d47f063d33c2d4fcd5362f6e5827c5613976c9f" +checksum = "5ee1a0d6e252afe82e7bc2db42fba60e02ddf3b1accaf8cb21d96e34ba61f3d4" [[package]] name = "linktime-proc-macro" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7b0a3383c2a1002d11349c92c85a666a5fb679e96c79d782cf0dbe557fd6ee" +checksum = "348d0075b1fc163b26d72a7f75fc5141daf2fd1bdf128d873cbaf6785d495bdf" [[package]] name = "linux-raw-sys" @@ -5039,7 +5086,7 @@ checksum = "7ebb8d8732c6a6df3d8f032a82911cfc747e00efb95cc46e8d0acd5b5b88570c" [[package]] name = "media" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "anyhow", "bindgen", @@ -5090,7 +5137,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block", "core-graphics-types 0.2.0", "foreign-types", @@ -5133,9 +5180,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", "log", @@ -5204,7 +5251,7 @@ dependencies = [ "objc2-foundation 0.3.2", "once_cell", "png", - "thiserror 2.0.18", + "thiserror 2.0.20", "windows-sys 0.61.2", ] @@ -5215,7 +5262,7 @@ source = "git+https://github.com/zed-industries/wgpu.git?rev=357a0c56e0070480ad9 dependencies = [ "arrayvec", "bit-set 0.9.1", - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "cfg_aliases", "codespan-reporting", @@ -5229,7 +5276,7 @@ dependencies = [ "once_cell", "rustc-hash 1.1.0", "spirv", - "thiserror 2.0.18", + "thiserror 2.0.20", "unicode-ident", ] @@ -5277,7 +5324,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "cfg_aliases", "libc", @@ -5289,7 +5336,7 @@ version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "cfg_aliases", "libc", @@ -5304,6 +5351,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + [[package]] name = "nom" version = "7.1.3" @@ -5344,7 +5397,7 @@ version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c533b4c39709f9ba5005d8002048266593c1cfaf3c5f0739d5b8ab0c6c504009" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "filetime", "fsevent-sys", "inotify 0.10.2", @@ -5363,9 +5416,9 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "fsevent-sys", - "inotify 0.11.2", + "inotify 0.11.4", "kqueue", "libc", "log", @@ -5404,7 +5457,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42b8cfee0e339a0337359f3c88165702ac6e600dc01c0cc9579a92d62b08477a" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -5441,9 +5494,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" dependencies = [ "num-integer", "num-traits", @@ -5460,7 +5513,7 @@ dependencies = [ "num-iter", "num-traits", "once_cell", - "rand 0.9.4", + "rand 0.9.5", "serde", "smallvec", "zeroize", @@ -5472,6 +5525,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ + "bytemuck", "num-traits", ] @@ -5489,7 +5543,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -5503,11 +5557,10 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" dependencies = [ - "autocfg", "num-integer", "num-traits", ] @@ -5595,7 +5648,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -5611,7 +5664,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -5632,7 +5685,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -5643,7 +5696,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -5655,7 +5708,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -5666,7 +5719,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "dispatch2", "objc2 0.6.4", ] @@ -5677,7 +5730,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "dispatch2", "objc2 0.6.4", "objc2-core-foundation", @@ -5712,7 +5765,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -5724,7 +5777,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -5743,7 +5796,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -5755,7 +5808,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -5768,7 +5821,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-core-foundation", ] @@ -5779,7 +5832,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -5791,7 +5844,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "objc2 0.6.4", "objc2-foundation 0.3.2", @@ -5803,7 +5856,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -5816,7 +5869,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -5850,6 +5903,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "object" +version = "0.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e5a6c098c7a3b6547378093f5cc30bc54fd361ce711e05293a5cc589562739b" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.21.4" @@ -5899,13 +5961,12 @@ dependencies = [ [[package]] name = "open" -version = "5.3.5" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fbaa89d2ddc8473c78a3adf69eea8cffa28c483b8e02a971ef31527cd0fc92c" +checksum = "f9cfef937e9c486488c7e3d949ae31c0f1d06bdacd75b99c086cb35356e30408" dependencies = [ "is-wsl", "libc", - "pathdiff", ] [[package]] @@ -5993,7 +6054,7 @@ dependencies = [ "log", "rand 0.10.2", "sha2 0.11.0", - "thiserror 2.0.18", + "thiserror 2.0.20", "tokio", "windows 0.62.2", "windows-strings 0.5.1", @@ -6080,12 +6141,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" -[[package]] -name = "pathdiff" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" - [[package]] name = "pathfinder_geometry" version = "0.5.1" @@ -6143,7 +6198,7 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "perf" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "collections", "serde", @@ -6207,7 +6262,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ "phf_shared 0.11.3", - "rand 0.8.6", + "rand 0.8.7", ] [[package]] @@ -6216,7 +6271,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" dependencies = [ - "fastrand 2.4.1", + "fastrand 2.5.0", "phf_shared 0.13.1", ] @@ -6230,7 +6285,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6274,7 +6329,7 @@ checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6296,7 +6351,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" dependencies = [ "atomic-waker", - "fastrand 2.4.1", + "fastrand 2.5.0", "futures-io", ] @@ -6316,7 +6371,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63d440a804ec8d6fafbb6b84471e013286658d373248927692ab3366686220ca" dependencies = [ - "aes 0.9.1", + "aes 0.9.2", "aes-gcm", "cbc 0.2.1", "der", @@ -6364,7 +6419,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "crc32fast", "fdeflate", "flate2", @@ -6419,9 +6474,9 @@ dependencies = [ [[package]] name = "polyval" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b20f20e954175de5f463f67781b35583397d916b1d148738923711b2ad16bee8" +checksum = "f0fa31d631f2b2cb2a544d0aa321ce847a94764d701ca2becc411138b93d49cd" dependencies = [ "cpubits", "cpufeatures 0.3.0", @@ -6430,9 +6485,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3" [[package]] name = "portable-atomic-util" @@ -6524,7 +6579,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6579,7 +6634,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.12+spec-1.1.0", + "toml_edit 0.25.13+spec-1.1.0", ] [[package]] @@ -6618,9 +6673,9 @@ dependencies = [ [[package]] name = "proc-macro-error-attr3" -version = "3.0.2" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34e4dd828515431dd6c4a030d26f7eaed7dd4778226e9d2bb968d65ca4ec3d4d" +checksum = "b0084e6206a967a2dad822180626b2f6b07a3b379325e8f1ec0438e33a469ba7" dependencies = [ "proc-macro2", "quote", @@ -6635,26 +6690,26 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "proc-macro-error3" -version = "3.0.2" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee475e440453418ff1335189eddf7101ba502cd818ab7ae04209bc83aa925aa" +checksum = "0cf066225f2373bc711684792b69bdeac0356019b007e721090c24d92d5d5a50" dependencies = [ "proc-macro-error-attr3", "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.3", ] [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -6675,7 +6730,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4488a4a36b9a4ba6b9334a32a39971f77c1436ec82c38707bce707699cc3bbcb" dependencies = [ "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6685,10 +6740,10 @@ source = "git+https://github.com/proptest-rs/proptest?rev=3dca198a8fef1b32e3a66f dependencies = [ "bit-set 0.8.0", "bit-vec 0.8.0", - "bitflags 2.13.0", + "bitflags 2.13.1", "num-traits", "proptest-macro", - "rand 0.9.4", + "rand 0.9.5", "rand_chacha 0.9.0", "rand_xorshift", "regex-syntax", @@ -6705,24 +6760,47 @@ dependencies = [ "convert_case 0.11.0", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "psm" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645dbe486e346d9b5de3ef16ede18c26e6c70ad97418f4874b8b1889d6e761ea" +checksum = "4dcd034599e63b970727f70d79e02d62390a4a84f7c6b827c27c46d5ac3fa622" dependencies = [ "ar_archive_writer", "cc", ] [[package]] -name = "pxfm" -version = "0.1.29" +name = "pulp" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" +checksum = "046aa45b989642ec2e4717c8e72d677b13edd831a4d3b6cf37d9a3e54912496a" +dependencies = [ + "bytemuck", + "cfg-if", + "libm", + "num-complex", + "paste", + "pulp-wasm-simd-flag", + "raw-cpuid", + "reborrow", + "version_check", +] + +[[package]] +name = "pulp-wasm-simd-flag" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8f70e07b9c3962945a74e59ca1c511bba65b6419468acc217c457d93f3c740" + +[[package]] +name = "pxfm" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" [[package]] name = "qoi" @@ -6754,25 +6832,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "quick-xml" -version = "0.37.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" -dependencies = [ - "memchr", -] - -[[package]] -name = "quick-xml" -version = "0.39.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "quick-xml" version = "0.41.0" @@ -6793,10 +6852,10 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "rustls", "socket2", - "thiserror 2.0.18", + "thiserror 2.0.20", "tokio", "tracing", "web-time", @@ -6804,20 +6863,21 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.15" +version = "0.11.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e" +checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" dependencies = [ "bytes", - "getrandom 0.3.4", + "getrandom 0.4.3", "lru-slab", - "rand 0.9.4", + "rand 0.10.2", + "rand_pcg", "ring", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.18", + "thiserror 2.0.20", "tinyvec", "tracing", "web-time", @@ -6825,23 +6885,23 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" dependencies = [ "cfg_aliases", "libc", "once_cell", "socket2", "tracing", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "quote" -version = "1.0.46" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -6860,9 +6920,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" dependencies = [ "libc", "rand_chacha 0.3.1", @@ -6871,9 +6931,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.5", @@ -6934,6 +6994,15 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core 0.10.1", +] + [[package]] name = "rand_xorshift" version = "0.4.0" @@ -6982,10 +7051,10 @@ dependencies = [ "num-traits", "paste", "profiling", - "rand 0.9.4", + "rand 0.9.5", "rand_chacha 0.9.0", "simd_helpers", - "thiserror 2.0.18", + "thiserror 2.0.20", "v_frame", "wasm-bindgen", ] @@ -7005,6 +7074,15 @@ dependencies = [ "rgb", ] +[[package]] +name = "raw-cpuid" +version = "11.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" +dependencies = [ + "bitflags 2.13.1", +] + [[package]] name = "raw-window-handle" version = "0.6.2" @@ -7051,19 +7129,26 @@ checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5" dependencies = [ "bytemuck", "core_maths", - "font-types", + "font-types 0.11.3", ] [[package]] name = "read-fonts" -version = "0.39.2" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4ed38b89c2c77ff968c524145ad65fb010f38af5c7a224b53b81d47ac2daa81" +checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" dependencies = [ "bytemuck", - "font-types", + "font-types 0.12.2", + "once_cell", ] +[[package]] +name = "reborrow" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430" + [[package]] name = "redox_syscall" version = "0.2.16" @@ -7079,7 +7164,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -7090,33 +7175,33 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.17", "libredox", - "thiserror 2.0.18", + "thiserror 2.0.20", ] [[package]] name = "ref-cast" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +checksum = "216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.3", ] [[package]] name = "refineable" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "derive_refineable", ] @@ -7135,9 +7220,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.16" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -7159,7 +7244,7 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest_client" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "anyhow", "bytes", @@ -7278,9 +7363,9 @@ name = "russh" version = "0.62.2" source = "git+https://github.com/ayamir/russh?rev=0d1d073350ed823069252075cbf3db9672d5b490#0d1d073350ed823069252075cbf3db9672d5b490" dependencies = [ - "aes 0.9.1", + "aes 0.9.2", "aws-lc-rs", - "bitflags 2.13.0", + "bitflags 2.13.1", "block-padding 0.4.2", "byteorder", "bytes", @@ -7337,7 +7422,7 @@ dependencies = [ "ssh-encoding", "ssh-key", "subtle", - "thiserror 2.0.18", + "thiserror 2.0.20", "tokio", "typenum", "universal-hash", @@ -7357,11 +7442,11 @@ dependencies = [ [[package]] name = "russh-sftp" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed8949eca4163c18a8f59ff96d32cf61e9c13b9735e21ef32b3907f4aafa1a9" +checksum = "9de67aace74530a29086db0671fa200c470a58eb380081f28ad512ffb0c5356b" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "bytes", "chrono", "dashmap", @@ -7369,7 +7454,7 @@ dependencies = [ "log", "serde", "serde_bytes", - "thiserror 2.0.18", + "thiserror 2.0.20", "tokio", "tokio-util", "wasm-bindgen-futures", @@ -7388,9 +7473,9 @@ dependencies = [ [[package]] name = "rust-embed" -version = "8.11.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04113cb9355a377d83f06ef1f0a45b8ab8cd7d8b1288160717d66df5c7988d27" +checksum = "e9e7760e252aaba7b09f4be00e36476cf585bdb68a53552ac954cdf504ab4bc9" dependencies = [ "rust-embed-impl", "rust-embed-utils", @@ -7399,34 +7484,35 @@ dependencies = [ [[package]] name = "rust-embed-impl" -version = "8.11.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0902e4c7c8e997159ab384e6d0fc91c221375f6894346ae107f47dd0f3ccaa" +checksum = "3bcfc4d6f53af43755f7a723e4b6b8794fcce052a178dd8c6c1dadc5f5343097" dependencies = [ + "mime_guess", "proc-macro2", "quote", "rust-embed-utils", "shellexpand", - "syn 2.0.118", + "syn 2.0.119", "walkdir", ] [[package]] name = "rust-embed-utils" -version = "8.11.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bcdef0be6fe7f6fa333b1073c949729274b05f123a0ad7efcb8efd878e5c3b1" +checksum = "42ffa149f6aa81b58a5b3011d01a857c4ed12c7a732d2c51947a4c7c692185f0" dependencies = [ "globset", - "sha2 0.10.9", + "sha2 0.11.0", "walkdir", ] [[package]] name = "rust-i18n" -version = "4.1.0" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55691a65892c33ee2de49c15ea5600c6f4a70e8eeb8e6c3cd96d2a231d230c40" +checksum = "f10cee36dd3b1f7929ea12b759de9eea9eff83bfccbc71f387ef4d41a57c64a4" dependencies = [ "globwalk", "regex", @@ -7437,9 +7523,9 @@ dependencies = [ [[package]] name = "rust-i18n-macro" -version = "4.1.0" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30de488acadcf767d97cd48518a8da8ea9777b1c9a5beca4eab78bbf77d07309" +checksum = "f0bb1ed4e04fe26c2a2652cad1c6595efaf7196f4445c0d6e13c67154347fb7e" dependencies = [ "glob", "proc-macro2", @@ -7447,15 +7533,14 @@ dependencies = [ "rust-i18n-support", "serde", "serde_json", - "serde_yaml", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "rust-i18n-support" -version = "4.1.0" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aea0fef8a93c06326b66392c95a115120e609674cb2132d37d276a6b05b545b4" +checksum = "ba1c083408a2733180ae0acf2897612f8ceec7b0c0dcd065a0a87103bfb3b1d9" dependencies = [ "arc-swap", "base62", @@ -7463,8 +7548,8 @@ dependencies = [ "itertools 0.11.0", "normpath", "serde", + "serde-saphyr", "serde_json", - "serde_yaml", "siphasher", "toml 0.8.23", "triomphe", @@ -7472,9 +7557,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" +checksum = "b74b56ffa8bb2830709a538c2cbcae9aa062db0d2a42563bfb09bdaae44020eb" [[package]] name = "rustc-hash" @@ -7484,9 +7569,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -7503,7 +7588,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys 0.4.15", @@ -7516,7 +7601,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys 0.12.1", @@ -7536,9 +7621,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.41" +version = "0.23.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" dependencies = [ "aws-lc-rs", "log", @@ -7573,9 +7658,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.1" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ "web-time", "zeroize", @@ -7622,9 +7707,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "rusty-fork" @@ -7644,7 +7729,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "bytemuck", "core_maths", "log", @@ -7693,7 +7778,7 @@ dependencies = [ [[package]] name = "scheduler" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "async-task", "backtrace", @@ -7701,15 +7786,15 @@ dependencies = [ "flume", "futures", "parking_lot", - "rand 0.9.4", + "rand 0.9.5", "web-time", ] [[package]] name = "schemars" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" +checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a" dependencies = [ "dyn-clone", "indexmap", @@ -7721,14 +7806,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d115b50f4aaeea07e79c1912f645c7513d81715d0420f8bc77a18c6260b307f" +checksum = "d98c67716b46af2f0b8cf752abc930f6f9aecfbf671ecfb531db8a31dbe4e2ba" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.118", + "syn 3.0.3", ] [[package]] @@ -7823,7 +7908,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.10.0", "core-foundation-sys", "libc", @@ -7842,9 +7927,9 @@ dependencies = [ [[package]] name = "self_cell" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89" +checksum = "2ab42ca02749e120097e328d91d415325bdf43b1c72c4c8badf37375fe40a813" [[package]] name = "semver" @@ -7866,6 +7951,25 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-saphyr" +version = "0.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd22781911de0ca6debda95f073c8f18bec65d1a94f1fa9573f3102e514cea4" +dependencies = [ + "ahash", + "annotate-snippets", + "base64", + "encoding_rs_io", + "getrandom 0.3.4", + "granit-parser", + "nohash-hasher", + "num-traits", + "serde_core", + "smallvec", + "zmij", +] + [[package]] name = "serde_bytes" version = "0.11.19" @@ -7893,18 +7997,18 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.2", + "syn 3.0.3", ] [[package]] name = "serde_derive_internals" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +checksum = "f852137cce035d6a4df67ccce505ff6b3e9fd3a10e3e52b24dc71e650bb1a9bd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.3", ] [[package]] @@ -7945,13 +8049,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.3", ] [[package]] @@ -8176,9 +8280,9 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" [[package]] name = "simd_helpers" @@ -8216,12 +8320,12 @@ dependencies = [ [[package]] name = "skrifa" -version = "0.42.1" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564" +checksum = "819ab7d62b1d3e72d9d9dea5650bac30424f9111364bb94928dbf5ecad1baa68" dependencies = [ "bytemuck", - "read-fonts 0.39.2", + "read-fonts 0.41.0", ] [[package]] @@ -8274,9 +8378,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -8295,18 +8399,18 @@ dependencies = [ [[package]] name = "spin" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" dependencies = [ "lock_api", ] [[package]] name = "spin" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" +checksum = "023a211cb3138dbc438680b32560ad89f699977624c9f8dbb95a47d5b4c07dd3" dependencies = [ "lock_api", ] @@ -8317,7 +8421,7 @@ version = "0.4.0+sdk-1.4.341.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9571ea910ebd84c86af4b3ed27f9dbdc6ad06f17c5f96146b2b671e2976744f" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -8337,7 +8441,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d801accda99469cde6d73da741422610fdf6508a72d9a69d1b55cb241c720597" dependencies = [ "aead", - "aes 0.9.1", + "aes 0.9.2", "aes-gcm", "chacha20", "cipher 0.5.2", @@ -8397,9 +8501,9 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stacker" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "640c8cdd92b6b12f5bcb1803ca3bbf5ab96e5e6b6b96b9ab77dabe9e880b3190" +checksum = "707f49d46706bacf8a2b00d51dace3f9de527c13eec3778f570c411f89e69967" dependencies = [ "cc", "cfg-if", @@ -8426,7 +8530,7 @@ checksum = "172175341049678163e979d9107ca3508046d4d2a7c6682bee46ac541b17db69" dependencies = [ "proc-macro-error2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -8505,7 +8609,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -8517,7 +8621,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sum_tree" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "heapless", "log", @@ -8528,34 +8632,35 @@ dependencies = [ [[package]] name = "sval" -version = "2.20.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fb9efbae90f97301f4d25f3be63dfd99d6b7af9d088228a52ec960d649b2e7d" +checksum = "ec4a2a7d92fa86fcc6222e4c3845f8486cff899d9db32480b26c91a5dbf2e22d" [[package]] name = "sval_buffer" -version = "2.20.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff5c0280ea0af40b3a1fd0b532680b5067482ffb81412ee66ec04b1d9952b49a" +checksum = "f4324db9ac500c609d659b752edf9c8abbf2233f8afd61a503fd6f88ed625032" dependencies = [ "sval", "sval_ref", + "zerocopy", ] [[package]] name = "sval_dynamic" -version = "2.20.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b9067f2e68f58e110cf8019a268057e3791cf74b0fdb1b3c7c6e49104f44e6" +checksum = "4046add0eecf55e680b9e207edf5fc7737b18a1d950db363d97e7f1b2d7c629c" dependencies = [ "sval", ] [[package]] name = "sval_fmt" -version = "2.20.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ebdbf0e4b175884aa587fcf551c16dabe245ea04235abdd8cbbd160b27ed5a" +checksum = "911a3486b5984a0a4f25edefcf2c2dba23654c29f63e75493b671d338bf24243" dependencies = [ "itoa", "ryu", @@ -8564,9 +8669,9 @@ dependencies = [ [[package]] name = "sval_json" -version = "2.20.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e448d9fa216a6c16670b28d624fbbcf5c04e41eb187bd7c52e01222ffa72a12" +checksum = "da53aae7c737b5b5f1be4bcb0ff20e057bf6b2ee4e9d025560075c5830d09f95" dependencies = [ "itoa", "ryu", @@ -8575,9 +8680,9 @@ dependencies = [ [[package]] name = "sval_nested" -version = "2.20.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021de5b5c26efd544c694cef9b8a9abe8633481bf3be1ea145a18a740818b291" +checksum = "df24df43cbdc4bb8c9f5ed19d0d57dc8f60a1a4259cdce52d597fe774ad3a71f" dependencies = [ "sval", "sval_buffer", @@ -8586,18 +8691,18 @@ dependencies = [ [[package]] name = "sval_ref" -version = "2.20.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ef5ffec8bc52ded04ee424ab8d959e25e64fd40a48a16d21f8991ce824c1bb" +checksum = "2bebc17f0f1fad060e57b778728d41ef87627e9111a6365d7463472cb58fc1b3" dependencies = [ "sval", ] [[package]] name = "sval_serde" -version = "2.20.0" +version = "2.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b983833a8a2390f89ebcf9b9acd06883017014b4ffd72ee28e0c9de6852039f5" +checksum = "9f26fe3f6a68b40e6c8d654ea48c00e4316272fddf68c80493714c1b034ae70b" dependencies = [ "serde_core", "sval", @@ -8622,11 +8727,11 @@ dependencies = [ [[package]] name = "swash" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0811b01ca2c4e8718760713911feaf4675c24f94e50530a015ec646cfb622f7c" +checksum = "6c2499c2d826531388872b2268718aed907a39bd785ab0dcfe57fab26283f92e" dependencies = [ - "skrifa 0.42.1", + "skrifa 0.44.0", "yazi", "zeno", ] @@ -8643,9 +8748,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.118" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" dependencies = [ "proc-macro2", "quote", @@ -8654,9 +8759,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a207d6d6a2b7fc470b80443726053f18a2481b7e1eee970597051596567987a3" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" dependencies = [ "proc-macro2", "quote", @@ -8680,7 +8785,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -8712,7 +8817,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -8787,12 +8892,11 @@ dependencies = [ [[package]] name = "tauri-winrt-notification" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b1e66e07de489fe43a46678dd0b8df65e0c973909df1b60ba33874e297ba9b9" +checksum = "9ed071c670382e85fc2f48ae706492d8c338f4f89bf72520d32f8abfe880aade" dependencies = [ - "quick-xml 0.37.5", - "thiserror 2.0.18", + "thiserror 2.0.20", "windows 0.61.3", "windows-version", ] @@ -8803,7 +8907,7 @@ version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ - "fastrand 2.4.1", + "fastrand 2.5.0", "getrandom 0.4.3", "once_cell", "rustix 1.1.4", @@ -8850,11 +8954,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ - "thiserror-impl 2.0.18", + "thiserror-impl 2.0.20", ] [[package]] @@ -8865,25 +8969,25 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.3", ] [[package]] name = "thread_local" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" dependencies = [ "cfg-if", ] @@ -8904,9 +9008,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.53" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" dependencies = [ "deranged", "num-conv", @@ -8924,9 +9028,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" dependencies = [ "num-conv", "time-core", @@ -8979,9 +9083,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" dependencies = [ "tinyvec_macros", ] @@ -9010,13 +9114,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.7.0" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 3.0.3", ] [[package]] @@ -9043,14 +9147,15 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" dependencies = [ "bytes", "futures-core", "futures-sink", "futures-util", + "libc", "pin-project-lite", "tokio", ] @@ -9069,9 +9174,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.2+spec-1.1.0" +version = "1.1.4+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" dependencies = [ "indexmap", "serde_core", @@ -9079,7 +9184,7 @@ dependencies = [ "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] @@ -9138,23 +9243,23 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.12+spec-1.1.0" +version = "0.25.13+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" dependencies = [ "indexmap", "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] @@ -9165,9 +9270,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "tower" @@ -9216,7 +9321,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -9271,15 +9376,15 @@ dependencies = [ "objc2-foundation 0.3.2", "once_cell", "png", - "thiserror 2.0.18", + "thiserror 2.0.20", "windows-sys 0.61.2", ] [[package]] name = "tree-sitter" -version = "0.26.9" +version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dab76d0b724ba557954125188cf0633a1ca43199ced82d95c7b9c32cc3de1f3" +checksum = "af1c71c1c4cc0920b20d6b0f6572e7682cd07a6a2faec71067a31fa394c586df" dependencies = [ "cc", "regex", @@ -9637,9 +9742,9 @@ dependencies = [ [[package]] name = "triomphe" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" +checksum = "b40688ea6389c8171614b25491f71d4a27946e0c7ce2da1c6de27e25abf1a0ae" dependencies = [ "arc-swap", "serde", @@ -9991,7 +10096,7 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "util" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "anyhow", "async-fs", @@ -10030,11 +10135,11 @@ dependencies = [ [[package]] name = "util_macros" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "perf", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -10069,9 +10174,9 @@ checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "value-bag" -version = "1.12.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ba6f5989077681266825251a52748b8c1d8a4ad098cc37e440103d0ea717fc0" +checksum = "068e763e8279de7ab94b6afebded2cb701678af094feb1c12ccb061b4783c1be" dependencies = [ "value-bag-serde1", "value-bag-sval2", @@ -10079,9 +10184,9 @@ dependencies = [ [[package]] name = "value-bag-serde1" -version = "1.12.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16530907bfe2999a1773ca5900a65101e092c70f642f25cc23ca0c43573262c5" +checksum = "417d6197dd0ee696783d6be4276ac6ea74b985e00024c85ccfb37aff4f2bed82" dependencies = [ "erased-serde", "serde_core", @@ -10090,9 +10195,9 @@ dependencies = [ [[package]] name = "value-bag-sval2" -version = "1.12.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00ae130edd690eaa877e4f40605d534790d1cf1d651e7685bd6a144521b251f" +checksum = "c61f7251ecde2c9ed431bbe0659853e7991753447447bbf1ae59d8b31c578d4e" dependencies = [ "sval", "sval_buffer", @@ -10142,7 +10247,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5924018406ce0063cd67f8e008104968b74b563ee1b85dde3ed1f7cb87d3dbd" dependencies = [ "arrayvec", - "bitflags 2.13.0", + "bitflags 2.13.1", "cursor-icon", "log", "memchr", @@ -10200,9 +10305,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" dependencies = [ "cfg-if", "once_cell", @@ -10213,9 +10318,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.76" +version = "0.4.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" +checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950" dependencies = [ "js-sys", "wasm-bindgen", @@ -10223,9 +10328,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -10233,22 +10338,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" dependencies = [ "unicode-ident", ] @@ -10280,9 +10385,9 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2857dd20b54e916ec7253b3d6b4d5c4d7d4ca2c33c2e11c6c76a99bd8744755d" +checksum = "016ccf01d1c58b6f8999612813e17c9b2390f7d70671428869913310f83f54b8" dependencies = [ "cc", "downcast-rs", @@ -10294,11 +10399,11 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.14" +version = "0.31.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" +checksum = "e3c36a0f861ad76d0901f2800b46321410d9f73f2ea88aac0650d86c32688073" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "rustix 1.1.4", "wayland-backend", "wayland-scanner", @@ -10321,7 +10426,7 @@ version = "0.32.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23d0c813de3daa2ed6520af85a3bd49b0e722a3078506899aa9686fea58dc4b6" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-scanner", @@ -10333,7 +10438,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -10346,7 +10451,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -10355,12 +10460,12 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" +checksum = "338e30461b3a2b67d70eb30a6d89f8e0c93a833e07d2ae89085cd070c4a00ac0" dependencies = [ "proc-macro2", - "quick-xml 0.39.4", + "quick-xml 0.41.0", "quote", ] @@ -10378,9 +10483,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.103" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30" dependencies = [ "js-sys", "wasm-bindgen", @@ -10402,14 +10507,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75c7f0ef91146ebfb530314f5f1d24528d7f0767efbfd31dce919275413e393e" dependencies = [ - "webpki-root-certs 1.0.8", + "webpki-root-certs 1.0.9", ] [[package]] name = "webpki-root-certs" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d46a5a140e6f7afeccd8eae97eff335163939eac8b929834875168b29b3d267" +checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" dependencies = [ "rustls-pki-types", ] @@ -10435,7 +10540,7 @@ version = "29.0.3" source = "git+https://github.com/zed-industries/wgpu.git?rev=357a0c56e0070480ad9daea5d2eaa83150b79e88#357a0c56e0070480ad9daea5d2eaa83150b79e88" dependencies = [ "arrayvec", - "bitflags 2.13.0", + "bitflags 2.13.1", "bytemuck", "cfg-if", "cfg_aliases", @@ -10466,7 +10571,7 @@ dependencies = [ "arrayvec", "bit-set 0.9.1", "bit-vec 0.9.1", - "bitflags 2.13.0", + "bitflags 2.13.1", "bytemuck", "cfg_aliases", "document-features", @@ -10481,7 +10586,7 @@ dependencies = [ "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.18", + "thiserror 2.0.20", "wgpu-core-deps-apple", "wgpu-core-deps-emscripten", "wgpu-core-deps-windows-linux-android", @@ -10523,7 +10628,7 @@ dependencies = [ "arrayvec", "ash", "bit-set 0.9.1", - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "bytemuck", "cfg-if", @@ -10556,7 +10661,7 @@ dependencies = [ "raw-window-metal", "renderdoc-sys", "smallvec", - "thiserror 2.0.18", + "thiserror 2.0.20", "wasm-bindgen", "wayland-sys", "web-sys", @@ -10581,7 +10686,7 @@ name = "wgpu-types" version = "29.0.3" source = "git+https://github.com/zed-industries/wgpu.git?rev=357a0c56e0070480ad9daea5d2eaa83150b79e88#357a0c56e0070480ad9daea5d2eaa83150b79e88" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "bytemuck", "js-sys", "log", @@ -10685,7 +10790,7 @@ checksum = "3a4df73e95feddb9ec1a7e9c2ca6323b8c97d5eeeff78d28f1eccdf19c882b24" dependencies = [ "parking_lot", "rayon", - "thiserror 2.0.18", + "thiserror 2.0.20", "windows 0.61.3", "windows-future 0.2.1", ] @@ -10789,7 +10894,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -10800,7 +10905,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -10811,7 +10916,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -10822,7 +10927,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -10833,7 +10938,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -10844,7 +10949,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -11331,9 +11436,9 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] @@ -11374,7 +11479,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d6f32a0ff4a9f6f01231eb2059cc85479330739333e0e58cadf03b6af2cca10" dependencies = [ "cfg-if", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -11383,7 +11488,7 @@ version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0986a8b1d586b7d3e4fe3d9ea39fb451ae22869dcea4aa109d287a374d866087" dependencies = [ - "toml 1.1.2+spec-1.1.0", + "toml 1.1.4+spec-1.1.0", "version_check", ] @@ -11494,9 +11599,9 @@ dependencies = [ [[package]] name = "xcursor" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" +checksum = "163b33ed8786455e2fa5d72f554057ce3f3182425434f756cd39c99839d88e23" [[package]] name = "xim-ctext" @@ -11511,7 +11616,7 @@ name = "xim-parser" version = "0.2.1" source = "git+https://github.com/zed-industries/xim-rs.git?rev=16f35a2c881b815a2b6cdfd6687988e84f8447d8#16f35a2c881b815a2b6cdfd6687988e84f8447d8" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -11534,9 +11639,9 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.28" +version = "0.8.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" +checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7" [[package]] name = "xml5ever" @@ -11597,15 +11702,15 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "synstructure", ] [[package]] name = "zbus" -version = "5.16.0" +version = "5.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" +checksum = "fe18fb60dc696039e738717b76eaea21e7a4489bbb1885020b43c94236d7e98a" dependencies = [ "async-broadcast", "async-executor", @@ -11617,7 +11722,7 @@ dependencies = [ "async-trait", "blocking", "enumflags2", - "event-listener 5.4.1", + "event-listener 5.4.2", "futures-core", "futures-lite 2.6.1", "hex", @@ -11630,7 +11735,7 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow 1.0.3", + "winnow 1.0.4", "zbus_macros", "zbus_names", "zvariant", @@ -11654,7 +11759,7 @@ checksum = "10da05367f3a7b7553c8cdf8fa91aee6b64afebe32b51c95177957efc47ca3a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "zbus-lockstep", "zbus_xml", "zvariant", @@ -11673,14 +11778,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.16.0" +version = "5.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" +checksum = "fe96480bed92df2b442a1a30df364e12d08eed03aeb061f2b8dc6afb2be91119" dependencies = [ "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "zbus_names", "zvariant", "zvariant_utils", @@ -11688,23 +11793,23 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.2" +version = "4.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" dependencies = [ "serde", - "winnow 1.0.3", + "winnow 1.0.4", "zvariant", ] [[package]] name = "zbus_xml" -version = "5.1.1" +version = "5.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8067892e940ed1727dea64690378601603b31d62dfde019a5335fbb7c0e0ed9" +checksum = "d1586c021a01ca0a9216dcd874e546382e156a5cbab5fab6cb5f10087e22682a" dependencies = [ - "quick-xml 0.39.4", "serde", + "winnow 1.0.4", "zbus_names", "zvariant", ] @@ -11714,7 +11819,7 @@ name = "zed-font-kit" version = "0.14.1-zed" source = "git+https://github.com/zed-industries/font-kit?rev=94b0f28166665e8fd2f53ff6d268a14955c82269#94b0f28166665e8fd2f53ff6d268a14955c82269" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "byteorder", "core-foundation 0.10.0", "core-graphics 0.24.0", @@ -11792,7 +11897,7 @@ dependencies = [ "core-graphics-helmer-fork", "log", "objc", - "rand 0.8.6", + "rand 0.8.7", "screencapturekit", "screencapturekit-sys", "sysinfo", @@ -11836,22 +11941,22 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.52" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" +checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.52" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" +checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -11871,7 +11976,7 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "synstructure", ] @@ -11892,7 +11997,7 @@ checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -11925,13 +12030,13 @@ checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] name = "zlog" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "anyhow", "chrono", @@ -11941,9 +12046,9 @@ dependencies = [ [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "zstd" @@ -11976,7 +12081,7 @@ dependencies = [ [[package]] name = "ztracing" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" dependencies = [ "tracing", "tracing-subscriber", @@ -11987,13 +12092,13 @@ dependencies = [ [[package]] name = "ztracing_macro" version = "0.1.0" -source = "git+https://github.com/l0ng-ai/zed?branch=tty7#3a4acfdf38ea7ee5e9f6f13b5e53fe0dd22cc62f" +source = "git+https://github.com/l0ng-ai/zed?branch=tty7#d99a40a5f79a173465feec00363d480f75881a81" [[package]] name = "zune-core" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" +checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" [[package]] name = "zune-inflate" @@ -12015,41 +12120,41 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.12.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" +checksum = "bee2a0bcd2a907786a456fff45aaaaf54c9ba5f50b71ae9ec1a4edd200c94911" dependencies = [ "endi", "enumflags2", "serde", "serde_bytes", - "winnow 1.0.3", + "winnow 1.0.4", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.12.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" +checksum = "38a708216a18780796770bfe3f4739c7c83a3e8f789b755534bbbc06e4e23e12" dependencies = [ "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.118", + "syn 2.0.119", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" +checksum = "90cb9383f9b45290407a1258b202d3f8f01db719eb60b4e4055c6375af4fc7c7" dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.118", - "winnow 1.0.3", + "syn 2.0.119", + "winnow 1.0.4", ] diff --git a/Cargo.toml b/Cargo.toml index 52d10607..e03c0cbf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -142,6 +142,8 @@ windows-sys = { version = "0.61", features = [ "Win32_Foundation", "Win32_Storage_FileSystem", "Win32_System_Registry", + "Wdk_System_SystemServices", + "Win32_System_SystemInformation", # `MessageBeep` (the terminal bell in `terminal::view`) is a user32 export, # but the Win32 metadata files it under Diagnostics::Debug, so that is the # module the binding needs — nothing here pulls in dbghelp. diff --git a/crates/tty7-core/src/core/config.rs b/crates/tty7-core/src/core/config.rs index 93c16f54..831740e1 100644 --- a/crates/tty7-core/src/core/config.rs +++ b/crates/tty7-core/src/core/config.rs @@ -129,6 +129,8 @@ pub struct Config { pub theme_legible_palette: bool, pub window_opacity: Option, pub window_blur: Option, + #[serde(default, deserialize_with = "de_lenient")] + pub window_backdrop: WindowBackdrop, #[serde(default = "default_true")] pub dim_inactive_panes: bool, pub keybindings: HashMap, @@ -334,6 +336,24 @@ pub enum TabBarPosition { Left, } +/// Native window backdrop material for the Windows GUI. Other platforms retain +/// the value for config synchronization but do not use it for rendering. +/// `Auto` keeps the legacy behavior where theme blur decides between blurred +/// and plain translucent, `Blur` explicitly requests classic WCA acrylic, the +/// material variants fall back to acrylic or plain translucency on older builds +/// inside `src/ui/theme.rs`, and `Off` never requests a material. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Deserialize, Serialize)] +#[serde(rename_all = "kebab-case")] +pub enum WindowBackdrop { + #[default] + Auto, + Blur, + Mica, + MicaAlt, + Acrylic, + Off, +} + #[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Deserialize, Serialize)] #[serde(rename_all = "kebab-case")] pub enum SidebarGrouping { @@ -439,6 +459,7 @@ impl Default for Config { theme_legible_palette: true, window_opacity: None, window_blur: None, + window_backdrop: WindowBackdrop::default(), dim_inactive_panes: true, keybindings: HashMap::new(), keybinding_preset: default_preset(), @@ -1103,6 +1124,29 @@ mod tests { assert_eq!(clamp(Some(f32::NAN)), None); } + #[test] + fn window_backdrop_defaults_and_round_trips_leniently() { + let cfg = Config::default(); + assert_eq!(cfg.window_backdrop, WindowBackdrop::Auto); + + let text = serde_json::to_string(&Config { + window_backdrop: WindowBackdrop::MicaAlt, + ..Config::default() + }) + .unwrap(); + assert!(text.contains("\"window_backdrop\":\"mica-alt\"")); + + let restored: Config = serde_json::from_str(&text).unwrap(); + assert_eq!(restored.window_backdrop, WindowBackdrop::MicaAlt); + + let blur: Config = serde_json::from_str(r#"{"window_backdrop":"blur"}"#).unwrap(); + assert_eq!(blur.window_backdrop, WindowBackdrop::Blur); + + // Unknown values fall back to Auto instead of rejecting the whole config. + let lenient: Config = serde_json::from_str(r#"{"window_backdrop":"nope"}"#).unwrap(); + assert_eq!(lenient.window_backdrop, WindowBackdrop::Auto); + } + #[test] fn sanitize_clamps_scrollback_into_band() { let clamp = |n: usize| { diff --git a/src/ui/app.rs b/src/ui/app.rs index 2b2de289..5bfec85a 100644 --- a/src/ui/app.rs +++ b/src/ui/app.rs @@ -16,7 +16,7 @@ use std::sync::Arc; use crate::core::actions::*; use crate::core::config::{ Config, CursorStyle as ConfigCursorStyle, NewTabPosition, RightPanelTab, ShellConfig, - TabBarPosition, + TabBarPosition, WindowBackdrop, }; use crate::core::session::{ Session, SessionAxis, SessionPane, SessionTab, WorkspaceId, WorkspaceStore, @@ -37,7 +37,7 @@ use crate::ui::presets::Fill; use crate::ui::settings::{ Recording, SettingsSection, SettingsState, ThemeEditor, humanize_action, }; -use crate::ui::theme::{apply_theme, set_menus, window_background}; +use crate::ui::theme::{apply_theme, set_menus}; #[derive(Clone, Copy, PartialEq, Eq)] pub(crate) enum ThemeEdit { @@ -448,6 +448,103 @@ impl TabAgentSession { } } +/// Maps a backdrop onto the settings dropdown. The dropdown lists the +/// presets the current Windows build supports, plus the stored value even +/// when unsupported here (see `theme::backdrop_options`), so the label +/// always matches what the window actually resolves to. +#[cfg(target_os = "windows")] +fn window_backdrop_index(backdrop: WindowBackdrop) -> usize { + crate::ui::theme::backdrop_options(backdrop) + .iter() + .position(|candidate| *candidate == backdrop) + .unwrap_or(0) +} + +#[cfg(target_os = "windows")] +fn window_backdrop_from_index(idx: usize, current: WindowBackdrop) -> WindowBackdrop { + crate::ui::theme::backdrop_options(current) + .get(idx) + .copied() + .unwrap_or(WindowBackdrop::Auto) +} + +#[cfg(target_os = "windows")] +fn window_backdrop_label_key(backdrop: WindowBackdrop) -> L10nKey { + match backdrop { + WindowBackdrop::Auto => L10nKey::SettingsBackdropAuto, + WindowBackdrop::Blur => L10nKey::SettingsBackdropBlur, + WindowBackdrop::Mica => L10nKey::SettingsBackdropMica, + WindowBackdrop::MicaAlt => L10nKey::SettingsBackdropMicaAlt, + WindowBackdrop::Acrylic => L10nKey::SettingsBackdropAcrylic, + WindowBackdrop::Off => L10nKey::SettingsBackdropOff, + } +} + +#[cfg(target_os = "windows")] +fn window_backdrop_labels(backdrop: WindowBackdrop) -> Vec { + crate::ui::theme::backdrop_options(backdrop) + .iter() + .map(|backdrop| t(window_backdrop_label_key(*backdrop)).to_string()) + .collect() +} + +/// What a full-window overlay (settings, the opened file, the diff view) +/// paints between its own fill and its content. +/// +/// Those overlays fill opaquely on purpose, so the OS backdrop cannot show +/// through their text — but that fill also sits on top of the background +/// image the workspace root paints, and would erase it for as long as an +/// overlay is open. So each one repaints the image, then the workspace's own +/// translucent fill over it. That second layer is what keeps the overlay +/// readable: it dims the image to exactly the strength it had when these +/// overlays were themselves translucent, before they were made opaque. +/// +/// Empty when the theme has no image — then the opaque fill alone is already +/// what the overlay wants, and a second pass of the same paint buys nothing. +pub(crate) fn overlay_surface_layers(cx: &App) -> Vec { + match window_background_image_layer(cx) { + Some(image) => vec![ + image, + div() + .absolute() + .inset_0() + .bg(crate::ui::theme::workspace_background(cx)), + ], + None => Vec::new(), + } +} + +/// The theme's background image as a full-bleed layer. +pub(crate) fn window_background_image_layer(cx: &App) -> Option { + let image = cx + .try_global::()? + .image + .clone()?; + Some( + div() + .absolute() + .inset_0() + .overflow_hidden() + .opacity(image.opacity) + .child( + img(image.path) + .size_full() + .object_fit(gpui::ObjectFit::Cover), + ), + ) +} + +/// Clears the window overrides that are effective on the current platform. +/// `backdrop_is_local` models whether the Windows-only backdrop participates +/// in this platform's rendering and therefore belongs to its reset operation. +fn clear_window_override_values(config: &mut Config, backdrop_is_local: bool) { + config.window_opacity = None; + config.window_blur = None; + if backdrop_is_local { + config.window_backdrop = WindowBackdrop::Auto; + } +} + impl Tty7App { pub fn for_workspace( id: Option, @@ -1454,7 +1551,10 @@ impl Tty7App { pub(crate) fn effective_window_opacity(cx: &App) -> f32 { let config = cx.global::(); let theme = crate::ui::presets::by_id(cx, &crate::ui::theme::effective_preset_id(cx)); - config.window_opacity.or(theme.opacity).unwrap_or(1.0) + let blur = config.window_blur.unwrap_or(theme.blur); + config.window_opacity.or(theme.opacity).unwrap_or_else(|| { + crate::ui::theme::default_window_opacity(config.window_backdrop, blur) + }) } pub(crate) fn set_window_opacity( @@ -1481,15 +1581,37 @@ impl Tty7App { cx.notify(); } + #[cfg(target_os = "windows")] + pub(crate) fn set_window_backdrop( + &mut self, + backdrop: WindowBackdrop, + window: &mut Window, + cx: &mut Context, + ) { + cx.global_mut::().window_backdrop = backdrop; + apply_theme(Some(window), cx); + cx.global::().save(); + // A material changes the default opacity (SYSTEM_MATERIAL_OPACITY + // vs 1.0), so the slider must track the new effective value. + self.sync_window_opacity_slider(window, cx); + // Rebuild the rows as well as the selected index. The previous value + // may have been an unsupported preset retained only for cross-machine + // config sync, and must disappear after the user selects a supported + // preset on this machine. + self.sync_window_backdrop_select(window, cx); + cx.notify(); + } + pub(crate) fn reset_window_overrides(&mut self, window: &mut Window, cx: &mut Context) { { let config = cx.global_mut::(); - config.window_opacity = None; - config.window_blur = None; + clear_window_override_values(config, cfg!(target_os = "windows")); } apply_theme(Some(window), cx); cx.global::().save(); self.sync_window_opacity_slider(window, cx); + #[cfg(target_os = "windows")] + self.sync_window_backdrop_select(window, cx); cx.notify(); } @@ -1507,6 +1629,28 @@ impl Tty7App { } } + #[cfg(target_os = "windows")] + pub(crate) fn sync_window_backdrop_select( + &mut self, + window: &mut Window, + cx: &mut Context, + ) { + if let Some(select) = self + .active_settings() + .map(|s| s.window_backdrop_select.clone()) + { + let current = cx.global::().window_backdrop; + let rows = window_backdrop_labels(current); + let selected = window_backdrop_index(current); + select.update(cx, |state, cx| { + state.set_items(SearchableVec::new(rows), window, cx); + // Replacing the delegate clears its selection snapshot, so + // restore the stored value after installing the new rows. + state.set_selected_index(Some(IndexPath::default().row(selected)), window, cx); + }); + } + } + pub(crate) fn pick_theme_image(&mut self, cx: &mut Context) { let rx = cx.prompt_for_paths(gpui::PathPromptOptions { files: true, @@ -3635,6 +3779,8 @@ impl Tty7App { let (font_select, font_bold_select, font_italic_select) = self.build_font_selects(&mut subs, window, cx); let language_select = self.build_language_select(&mut subs, window, cx); + #[cfg(target_os = "windows")] + let window_backdrop_select = self.build_window_backdrop_select(&mut subs, window, cx); let (shell_program_input, shell_args_input, wd_path_input) = self.build_shell_inputs(&mut subs, window, cx); let link_file_command_input = self.build_link_file_command_input(&mut subs, window, cx); @@ -3693,6 +3839,8 @@ impl Tty7App { font_bold_select, font_italic_select, language_select, + #[cfg(target_os = "windows")] + window_backdrop_select, shell_program_input, shell_args_input, wd_path_input, @@ -3865,6 +4013,46 @@ impl Tty7App { .unwrap_or_else(crate::ui::i18n::default_language_code) } + /// The backdrop dropdown only lists the presets this Windows build + /// supports, in the order of `theme::supported_backdrops`; the select + /// resolves the picked label back through that same list. + #[cfg(target_os = "windows")] + fn build_window_backdrop_select( + &mut self, + subs: &mut Vec, + window: &mut Window, + cx: &mut Context, + ) -> Entity>> { + let rows = window_backdrop_labels(cx.global::().window_backdrop); + let selected = window_backdrop_index(cx.global::().window_backdrop); + let select = cx.new(|cx| { + SelectState::new( + SearchableVec::new(rows), + Some(IndexPath::default().row(selected)), + window, + cx, + ) + }); + subs.push(cx.subscribe_in( + &select, + window, + move |this, _select, ev: &SelectEvent>, window, cx| { + if let SelectEvent::Confirm(Some(label)) = ev { + let current = cx.global::().window_backdrop; + let rows = window_backdrop_labels(current); + if let Some(idx) = rows.iter().position(|row| row == label) { + this.set_window_backdrop( + window_backdrop_from_index(idx, current), + window, + cx, + ); + } + } + }, + )); + select + } + pub(crate) fn set_gui_language( &mut self, code: &'static str, @@ -3904,6 +4092,21 @@ impl Tty7App { .unwrap_or(0); state.set_selected_index(Some(IndexPath::default().row(selected)), window, cx); }); + #[cfg(target_os = "windows")] + s.window_backdrop_select.update(cx, |state, cx| { + let current = cx.global::().window_backdrop; + let rows = window_backdrop_labels(current); + state.set_items(SearchableVec::new(rows), window, cx); + // `set_items` does not preserve the selection; restore the + // index of the stored value so a locale refresh (which + // re-translates the labels) cannot leave the dropdown + // showing no — or the wrong — selection. + state.set_selected_index( + Some(IndexPath::default().row(window_backdrop_index(current))), + window, + cx, + ); + }); s.search.update(cx, |state, cx| { state.set_placeholder(t(L10nKey::SearchSettings), window, cx) }); @@ -4240,6 +4443,13 @@ impl Tty7App { fn reload_from_config(&mut self, window: &mut Window, cx: &mut Context) { apply_theme(Some(window), cx); self.sync_window_opacity_slider(window, cx); + // Another window — or a hand edit / config sync picked up by the + // `Config` watcher — can change the backdrop while this window's + // settings panel is open. The window itself already switched + // material above, so the dropdown has to follow or it contradicts + // what it describes. + #[cfg(target_os = "windows")] + self.sync_window_backdrop_select(window, cx); let config = cx.global::().clone(); if config.cursor_style != self.terminal_cursor_style || config.scrollback_limit != self.terminal_scrollback_limit @@ -5310,7 +5520,7 @@ impl Render for Tty7App { .bottom_0() .right_0() .w(px(self.right_panel_px(window, cx))) - .bg(cx.theme().sidebar) + .bg(crate::ui::theme::workspace_surface_color(cx)) .border_l_1() .border_color(cx.theme().sidebar_border), ) @@ -5331,17 +5541,21 @@ impl Render for Tty7App { }) .into_any_element(); - let (window_bg, bg_image) = match cx.try_global::() { - Some(bg) => (window_background(bg), bg.image.clone()), - None => (cx.theme().background.into(), None), - }; + let window_bg = crate::ui::theme::workspace_background(cx); + let bg_image = window_background_image_layer(cx); + let settings_bg = crate::ui::theme::overlay_background(cx); let settings_overlay = self.settings.is_some().then(|| { div() .absolute() .inset_0() .occlude() - .bg(window_bg) + // Opaque on purpose: the settings panel must never let the + // workspace translucency (window opacity / backdrop material) + // show through, even at window edges during a resize. The + // preset's gradient fill is preserved, just with alpha 1; + // `render_settings` repaints the theme image over it. + .bg(settings_bg) .child(self.render_settings(window, cx)) }); @@ -5606,20 +5820,7 @@ impl Render for Tty7App { ) .on_action(cx.listener(|_, _: &OpenDiscord, _window, cx| cx.open_url(DISCORD_URL))) .on_action(cx.listener(|_, _: &ReportIssue, _window, cx| cx.open_url(ISSUES_URL))) - .when_some(bg_image, |this, image| { - this.child( - div() - .absolute() - .inset_0() - .overflow_hidden() - .opacity(image.opacity) - .child( - img(image.path) - .size_full() - .object_fit(gpui::ObjectFit::Cover), - ), - ) - }) + .children(bg_image) .child(main_layout) .when_some(settings_overlay, |this, overlay| this.child(overlay)) .children(self.render_switcher(cx)) @@ -6466,10 +6667,41 @@ mod window_drag_tests { #[cfg(test)] mod tests { use super::{ - TabAgentSession, leaf_shares_the_window_daemon, mru_order, pane_attachable, - parse_ssh_connect_input, parse_ssh_option_words, + TabAgentSession, clear_window_override_values, leaf_shares_the_window_daemon, mru_order, + pane_attachable, parse_ssh_connect_input, parse_ssh_option_words, }; + #[test] + fn non_windows_reset_preserves_the_synced_windows_backdrop() { + let mut config = crate::core::config::Config::default(); + config.window_opacity = Some(0.8); + config.window_blur = Some(true); + config.window_backdrop = crate::core::config::WindowBackdrop::Mica; + + clear_window_override_values(&mut config, false); + + assert_eq!(config.window_opacity, None); + assert_eq!(config.window_blur, None); + assert_eq!( + config.window_backdrop, + crate::core::config::WindowBackdrop::Mica, + "an inert synchronized backdrop is not a local override to reset" + ); + } + + #[test] + fn windows_reset_clears_the_local_backdrop_override() { + let mut config = crate::core::config::Config::default(); + config.window_backdrop = crate::core::config::WindowBackdrop::Acrylic; + + clear_window_override_values(&mut config, true); + + assert_eq!( + config.window_backdrop, + crate::core::config::WindowBackdrop::Auto + ); + } + #[test] fn mru_puts_the_active_tab_first_and_the_last_one_used_behind_it() { // Tab 2 is active; 0 was used most recently before it, then 1. diff --git a/src/ui/code_editor.rs b/src/ui/code_editor.rs index 4f3fbd9b..cac3c4e9 100644 --- a/src/ui/code_editor.rs +++ b/src/ui/code_editor.rs @@ -918,12 +918,20 @@ impl Tty7App { .absolute() .inset_0() .occlude() - .bg(cx.theme().background) + // Opaque on purpose: this overlay covers the whole workspace + // (everything but the detail panel) and an open file must never + // let the window translucency / backdrop material show through + // it. The preset's gradient fill is preserved, just with + // alpha 1 — the same paint the settings overlay uses. The + // theme background image is repainted on top of it, since the + // root's copy now sits below this fill. + .bg(crate::ui::theme::overlay_background(cx)) .on_key_down(cx.listener(|this, ev: &gpui::KeyDownEvent, window, cx| { if ev.keystroke.key == "escape" { this.toggle_code_panel(window, cx); } })) + .children(crate::ui::app::overlay_surface_layers(cx)) .child(h_flex().flex_1().min_h_0().w_full().child(editor_col)) .child(self.render_code_status_bar(window, cx)) .into_any_element(), diff --git a/src/ui/diff_overlay.rs b/src/ui/diff_overlay.rs index da52eaa7..ce1ad6d4 100644 --- a/src/ui/diff_overlay.rs +++ b/src/ui/diff_overlay.rs @@ -3,7 +3,8 @@ use std::path::{Path, PathBuf}; use std::sync::Arc; use gpui::{ - AnyElement, FocusHandle, FontWeight, KeyDownEvent, Pixels, Window, div, prelude::*, px, + AnyElement, Background, FocusHandle, FontWeight, Hsla, KeyDownEvent, Pixels, Window, div, + prelude::*, px, }; use gpui_component::button::Button; use gpui_component::{ActiveTheme as _, Icon, IconName, Sizable as _, h_flex, v_flex}; @@ -33,6 +34,19 @@ pub(crate) struct DiffOverlayState { pub(crate) focus: Option, } +/// Paints the full-window diff surface without inheriting workspace opacity. +/// The preset's solid or gradient design remains intact, but neither it nor +/// the plain theme fallback may reveal the OS backdrop through diff text. +fn diff_overlay_background( + active: Option<&crate::ui::presets::ActiveBackground>, + fallback: Hsla, +) -> Background { + match active { + Some(bg) => crate::ui::theme::window_background_opaque(bg), + None => fallback.alpha(1.0).into(), + } +} + impl Tty7App { pub(crate) fn toggle_diff_overlay( &mut self, @@ -262,12 +276,12 @@ impl Tty7App { .absolute() .inset_0() .occlude() - .bg( - match cx.try_global::() { - Some(bg) => crate::ui::theme::window_background(bg), - None => cx.theme().background.into(), - }, - ) + // Opaque on purpose: this overlay covers the entire workspace, + // so window translucency and backdrop material must stop here. + .bg(diff_overlay_background( + cx.try_global::(), + cx.theme().background, + )) .text_color(cx.theme().foreground) .track_focus(&overlay.focus_handle) .on_key_down(cx.listener(|this, ev: &KeyDownEvent, window, cx| { @@ -275,6 +289,11 @@ impl Tty7App { this.close_diff_overlay(window, cx); } })) + // The opaque fill above covers the theme background image the + // workspace root paints, so the overlay carries its own copy, + // dimmed back to the strength it had when this overlay was + // itself translucent. + .children(crate::ui::app::overlay_surface_layers(cx)) .child(header) .child(content) .into_any_element(), @@ -941,6 +960,30 @@ mod tests { use crate::terminal::git_diff::{DiffLine, LineKind}; use crate::ui::i18n::set_locale; + #[test] + fn full_window_diff_background_is_opaque_with_or_without_a_preset() { + let active = crate::ui::presets::ActiveBackground { + fill: crate::ui::presets::Fill::Solid(0x12_34_56), + opacity: Some(0.2), + image: None, + }; + let mut fallback: Hsla = gpui::rgb(0x65_43_21).into(); + fallback.a = 0.3; + let mut opaque_fallback = fallback; + opaque_fallback.a = 1.0; + + assert_eq!( + diff_overlay_background(Some(&active), fallback), + crate::ui::theme::window_background_opaque(&active), + "the active preset must keep its fill while discarding workspace translucency" + ); + assert_eq!( + diff_overlay_background(None, fallback), + opaque_fallback.into(), + "the theme fallback must also block the window material" + ); + } + fn line(kind: LineKind, old: Option, new: Option, text: &str) -> DiffLine { DiffLine { kind, diff --git a/src/ui/i18n/en.rs b/src/ui/i18n/en.rs index bc0b88e8..53743c65 100644 --- a/src/ui/i18n/en.rs +++ b/src/ui/i18n/en.rs @@ -114,6 +114,22 @@ pub fn translate_en(key: L10nKey) -> &'static str { } L10nKey::SettingsBlur => "Blur", L10nKey::SettingsBlurDesc => "Blur whatever is behind a translucent window (macOS).", + L10nKey::SettingsBlurAutoDesc => { + "Blur whatever is behind a translucent window. Only applies while Background material is Auto." + } + L10nKey::SettingsBackdrop => "Background material", + L10nKey::SettingsBackdropDesc => { + "Native Windows backdrop behind a translucent window. Mica needs Windows 11 22H2, Acrylic needs 1809; older builds fall back automatically." + } + L10nKey::SettingsSearchBackdropKeywords => { + "material backdrop mica acrylic blur frosted window background" + } + L10nKey::SettingsBackdropAuto => "Auto", + L10nKey::SettingsBackdropBlur => "Blur", + L10nKey::SettingsBackdropMica => "Mica", + L10nKey::SettingsBackdropMicaAlt => "Mica Alt", + L10nKey::SettingsBackdropAcrylic => "Acrylic", + L10nKey::SettingsBackdropOff => "Off", L10nKey::FollowTheme => "Follow theme", L10nKey::SettingsDimInactivePanes => "Dim inactive panes", L10nKey::SettingsDimInactivePanesDesc => { diff --git a/src/ui/i18n/ja.rs b/src/ui/i18n/ja.rs index ccd25dff..080bd055 100644 --- a/src/ui/i18n/ja.rs +++ b/src/ui/i18n/ja.rs @@ -118,6 +118,22 @@ pub fn translate_ja(key: L10nKey) -> Option<&'static str> { } L10nKey::SettingsBlur => "背景のぼかし", L10nKey::SettingsBlurDesc => "半透明ウィンドウの背後にあるものをぼかす(macOS)", + L10nKey::SettingsBlurAutoDesc => { + "半透明ウィンドウの背後にあるものをぼかす。背景マテリアルが「自動」のときのみ有効です" + } + L10nKey::SettingsBackdrop => "背景マテリアル", + L10nKey::SettingsBackdropDesc => { + "半透明ウィンドウの背後にあるネイティブ Windows 背景マテリアル。Mica には Windows 11 22H2、Acrylic には 1809 が必要です。古いビルドでは自動的にフォールバックします" + } + L10nKey::SettingsSearchBackdropKeywords => { + "背景 マテリアル ぼかし すりガラス material backdrop mica acrylic blur frosted window background" + } + L10nKey::SettingsBackdropAuto => "自動", + L10nKey::SettingsBackdropBlur => "ぼかし", + L10nKey::SettingsBackdropMica => "Mica", + L10nKey::SettingsBackdropMicaAlt => "Mica Alt", + L10nKey::SettingsBackdropAcrylic => "Acrylic", + L10nKey::SettingsBackdropOff => "オフ", L10nKey::FollowTheme => "テーマに従う", L10nKey::SettingsDimInactivePanes => "非アクティブなペインを暗くする", L10nKey::SettingsDimInactivePanesDesc => { diff --git a/src/ui/i18n/mod.rs b/src/ui/i18n/mod.rs index cab1b2de..cb4a7ea0 100644 --- a/src/ui/i18n/mod.rs +++ b/src/ui/i18n/mod.rs @@ -149,6 +149,16 @@ pub enum L10nKey { SettingsOpacityDesc, SettingsBlur, SettingsBlurDesc, + SettingsBlurAutoDesc, + SettingsBackdrop, + SettingsBackdropDesc, + SettingsSearchBackdropKeywords, + SettingsBackdropAuto, + SettingsBackdropBlur, + SettingsBackdropMica, + SettingsBackdropMicaAlt, + SettingsBackdropAcrylic, + SettingsBackdropOff, FollowTheme, SettingsDimInactivePanes, SettingsDimInactivePanesDesc, @@ -1195,6 +1205,16 @@ mod tests { L10nKey::SettingsOpacityDesc, L10nKey::SettingsBlur, L10nKey::SettingsBlurDesc, + L10nKey::SettingsBlurAutoDesc, + L10nKey::SettingsBackdrop, + L10nKey::SettingsBackdropDesc, + L10nKey::SettingsSearchBackdropKeywords, + L10nKey::SettingsBackdropAuto, + L10nKey::SettingsBackdropBlur, + L10nKey::SettingsBackdropMica, + L10nKey::SettingsBackdropMicaAlt, + L10nKey::SettingsBackdropAcrylic, + L10nKey::SettingsBackdropOff, L10nKey::FollowTheme, L10nKey::SettingsDimInactivePanes, L10nKey::SettingsDimInactivePanesDesc, diff --git a/src/ui/i18n/zh.rs b/src/ui/i18n/zh.rs index 633ad61e..2738c8d2 100644 --- a/src/ui/i18n/zh.rs +++ b/src/ui/i18n/zh.rs @@ -104,6 +104,22 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { } L10nKey::SettingsBlur => "模糊", L10nKey::SettingsBlurDesc => "模糊半透明窗口背后的内容(macOS)。", + L10nKey::SettingsBlurAutoDesc => { + "模糊半透明窗口背后的内容。仅在「背景材质」为「自动」时生效。" + } + L10nKey::SettingsBackdrop => "背景材质", + L10nKey::SettingsBackdropDesc => { + "半透明窗口背后的原生 Windows 背景材质。云母需要 Windows 11 22H2,亚克力需要 1809;更旧的系统会自动回退。" + } + L10nKey::SettingsSearchBackdropKeywords => { + "材质 背景 云母 亚克力 模糊 毛玻璃 窗口 material backdrop mica acrylic blur frosted window background" + } + L10nKey::SettingsBackdropAuto => "自动", + L10nKey::SettingsBackdropBlur => "模糊", + L10nKey::SettingsBackdropMica => "云母", + L10nKey::SettingsBackdropMicaAlt => "云母 Alt", + L10nKey::SettingsBackdropAcrylic => "亚克力", + L10nKey::SettingsBackdropOff => "关闭", L10nKey::FollowTheme => "跟随主题", L10nKey::SettingsDimInactivePanes => "调暗非活动窗格", L10nKey::SettingsDimInactivePanesDesc => "在分屏中淡化未聚焦的窗格,让活动窗格更突出。", diff --git a/src/ui/right_panel.rs b/src/ui/right_panel.rs index 78fef564..488375c3 100644 --- a/src/ui/right_panel.rs +++ b/src/ui/right_panel.rs @@ -97,7 +97,7 @@ impl Tty7App { .w(px(width)) .h_full() .child(backing) - .bg(cx.theme().sidebar) + .bg(crate::ui::theme::workspace_surface_color(cx)) .border_l_1() .border_color(cx.theme().sidebar_border) .children(cfg!(target_os = "macos").then(|| { diff --git a/src/ui/settings.rs b/src/ui/settings.rs index beddc29f..68e77b26 100644 --- a/src/ui/settings.rs +++ b/src/ui/settings.rs @@ -1,7 +1,7 @@ use gpui::{ - AnyElement, App, Context, Div, Entity, FontWeight, Image, ImageFormat, KeyDownEvent, - MouseButton, SharedString, Stateful, Subscription, Window, div, img, prelude::*, px, relative, - rgb, + AnyElement, App, Background, Context, Div, Entity, FontWeight, Image, ImageFormat, + KeyDownEvent, MouseButton, SharedString, Stateful, Subscription, Window, div, img, prelude::*, + px, relative, rgb, }; use gpui_component::InteractiveElementExt as _; use gpui_component::button::{Button, ButtonVariants as _}; @@ -22,6 +22,7 @@ use uuid::Uuid; use crate::core::config::{ BellMode, Config, CursorStyle, NewTabPosition, NotifyMode, TabBarPosition, UpdateChannel, + WindowBackdrop, }; use crate::core::keychain::CredentialRef; use crate::core::ssh_profile::{ @@ -41,6 +42,15 @@ fn settings_row_id(label: &str, _desc: &str) -> SharedString { SharedString::from(format!("settings-row-{label}")) } +/// Whether the reset control has any effective override to clear on this +/// platform. A synchronized Windows backdrop remains stored elsewhere but is +/// inert here, so only platforms that expose it locally may count it. +fn window_overrides_active(config: &Config, backdrop_is_local: bool) -> bool { + config.window_opacity.is_some() + || config.window_blur.is_some() + || (backdrop_is_local && config.window_backdrop != WindowBackdrop::Auto) +} + #[derive(Clone, Copy, PartialEq, Eq)] pub(crate) enum SettingsSection { Appearance, @@ -126,6 +136,12 @@ fn settings_search_entries() -> &'static [SearchEntry] { title: SettingsBlur, keywords: SettingsSearchBlurKeywords, }, + #[cfg(target_os = "windows")] + SearchEntry { + section: Appearance, + title: SettingsBackdrop, + keywords: SettingsSearchBackdropKeywords, + }, SearchEntry { section: Appearance, title: SettingsDimInactivePanes, @@ -437,6 +453,8 @@ pub(crate) struct SettingsState { pub(crate) font_bold_select: Entity>>, pub(crate) font_italic_select: Entity>>, pub(crate) language_select: Entity>>, + #[cfg(target_os = "windows")] + pub(crate) window_backdrop_select: Entity>>, pub(crate) shell_program_input: Entity, pub(crate) shell_args_input: Entity, pub(crate) wd_path_input: Entity, @@ -737,8 +755,18 @@ impl Tty7App { cx: &mut Context, ) -> impl IntoElement + use<> { let theme = cx.theme(); - let (background, foreground, header_muted) = - (theme.background, theme.foreground, theme.muted_foreground); + // The settings panel covers the whole window. Paint it on an opaque + // surface so the workspace translucency (window opacity / backdrop + // material) never shows through the settings UI — while keeping the + // preset's gradient fill instead of collapsing to a flat color. + let background: Background = crate::ui::theme::overlay_background(cx); + // That opaque fill also covers the theme background image the + // workspace root paints, so the panel carries its own copy (dimmed by + // the workspace fill, or the settings text would sit straight on the + // wallpaper); without it the image would blink out for as long as + // settings is open. + let background_layers = crate::ui::app::overlay_surface_layers(cx); + let (foreground, header_muted) = (theme.foreground, theme.muted_foreground); let (focus_handle, section, theme_panel_open, search) = match self.active_settings() { Some(s) => ( @@ -870,13 +898,15 @@ impl Tty7App { SettingsSection::About => self.render_settings_about(cx), }; + // No fill of its own: the root already paints the opaque surface and + // the background image behind it, and repainting here would hide the + // image again in the one pane that fills most of the panel. let content_pane = if section == SettingsSection::Ssh { v_flex() .id("settings-content") .flex_1() .min_w_0() .h_full() - .bg(background) .child(content) } else { v_flex() @@ -884,7 +914,6 @@ impl Tty7App { .flex_1() .min_w_0() .h_full() - .bg(background) .overflow_y_scroll() .child( div() @@ -907,6 +936,7 @@ impl Tty7App { this.close_settings(window, cx); } })) + .children(background_layers) .child(sidebar) .child(content_pane) .child( @@ -1332,11 +1362,9 @@ impl Tty7App { return div().into_any_element(); }; let config = cx.global::(); - let overridden = config.window_opacity.is_some() || config.window_blur.is_some(); + let overridden = window_overrides_active(config, cfg!(target_os = "windows")); let dim_inactive_panes = config.dim_inactive_panes; - let theme = presets::by_id(cx, &crate::ui::theme::effective_preset_id(cx)); let opacity = Tty7App::effective_window_opacity(cx); - let blur = cx.global::().window_blur.unwrap_or(theme.blur); let opacity_control = h_flex() .items_center() @@ -1354,12 +1382,69 @@ impl Tty7App { .child(format!("{:.0}%", opacity * 100.)), ) .into_any_element(); - let blur_switch = crate::ui::theme::switch("window-blur", cx) - .checked(blur) - .on_click( - cx.listener(|this, on: &bool, window, cx| this.set_window_blur(*on, window, cx)), + // Windows exposes the native backdrop materials directly; macOS keeps + // the simple blur toggle, which drives its vibrancy. + #[cfg(target_os = "windows")] + let blur_control = { + // Both selects come from the same SettingsState resolved at the + // top of this function (window_opacity_slider), so the None arm + // is unreachable today; fall back to an empty control rather + // than returning from the whole section — a missing select must + // never silently drop the opacity slider and the rest. + match self + .active_settings() + .map(|s| s.window_backdrop_select.clone()) + { + Some(select) => Select::new(&select) + .small() + .w(px(180.)) + .h(px(24.)) + .menu_max_h(px(224.)) + .into_any_element(), + None => div().into_any_element(), + } + }; + #[cfg(not(target_os = "windows"))] + let blur_control = + { + let theme = presets::by_id(cx, &crate::ui::theme::effective_preset_id(cx)); + let blur = config.window_blur.unwrap_or(theme.blur); + crate::ui::theme::switch("window-blur", cx) + .checked(blur) + .on_click(cx.listener(|this, on: &bool, window, cx| { + this.set_window_blur(*on, window, cx) + })) + .into_any_element() + }; + // `Auto` is the one backdrop that still defers to the legacy blur + // flag, which is shared with the other platforms' vibrancy switch and + // travels with a synced config. Offer that switch here exactly when it + // has an effect — otherwise a stored `window_blur: true` would blur + // the window with no visible control to clear it, short of the reset + // button, which also discards the user's opacity. + #[cfg(target_os = "windows")] + let auto_blur_row = (config.window_backdrop == WindowBackdrop::Auto).then(|| { + let theme = presets::by_id(cx, &crate::ui::theme::effective_preset_id(cx)); + let blur = config.window_blur.unwrap_or(theme.blur); + let control = + crate::ui::theme::switch("window-blur", cx) + .checked(blur) + .on_click(cx.listener(|this, on: &bool, window, cx| { + this.set_window_blur(*on, window, cx) + })) + .into_any_element(); + self.settings_row( + t(L10nKey::SettingsBlur), + // Not `SettingsBlurDesc` — that one says "(macOS)", which is + // exactly wrong here. This row explains the flag's one + // remaining job on Windows: feeding the `Auto` material. + t(L10nKey::SettingsBlurAutoDesc), + control, + cx, ) - .into_any_element(); + }); + #[cfg(not(target_os = "windows"))] + let auto_blur_row: Option> = None; let dim_switch = crate::ui::theme::switch("dim-inactive-panes", cx) .checked(dim_inactive_panes) .on_click(cx.listener(|this, on: &bool, _w, cx| this.set_dim_inactive_panes(*on, cx))) @@ -1374,11 +1459,20 @@ impl Tty7App { cx, )) .child(self.settings_row( - t(L10nKey::SettingsBlur), - t(L10nKey::SettingsBlurDesc), - blur_switch, + t(if cfg!(target_os = "windows") { + L10nKey::SettingsBackdrop + } else { + L10nKey::SettingsBlur + }), + t(if cfg!(target_os = "windows") { + L10nKey::SettingsBackdropDesc + } else { + L10nKey::SettingsBlurDesc + }), + blur_control, cx, )) + .children(auto_blur_row) .when(overridden, |this| { this.child( h_flex().mt_2().child( @@ -5129,6 +5223,28 @@ mod tests { ); } + #[test] + fn synced_windows_backdrop_is_only_a_local_override_on_windows() { + let mut config = Config::default(); + config.window_backdrop = WindowBackdrop::MicaAlt; + + assert!(window_overrides_active(&config, true)); + assert!(!window_overrides_active(&config, false)); + } + + #[test] + fn opacity_and_blur_are_local_overrides_on_every_platform() { + let mut opacity = Config::default(); + opacity.window_opacity = Some(0.8); + opacity.window_backdrop = WindowBackdrop::Mica; + let mut blur = Config::default(); + blur.window_blur = Some(true); + blur.window_backdrop = WindowBackdrop::Acrylic; + + assert!(window_overrides_active(&opacity, false)); + assert!(window_overrides_active(&blur, false)); + } + #[test] fn every_section_has_search_entries() { for section in SettingsSection::ALL { @@ -5164,7 +5280,7 @@ mod tests { #[test] fn previously_unsearchable_settings_are_findable() { use SettingsSection::*; - let cases: &[(&str, SettingsSection)] = &[ + let mut cases: Vec<(&str, SettingsSection)> = vec![ ("opacity", Appearance), ("blur", Appearance), ("completion", Input), @@ -5179,6 +5295,12 @@ mod tests { ("claude", Agents), ("symlink", Agents), ]; + #[cfg(target_os = "windows")] + cases.extend([ + ("material", Appearance), + ("mica", Appearance), + ("acrylic", Appearance), + ]); for (query, expected) in cases { assert_eq!( best_matching_section(query).map(|s| s.profile_label()), diff --git a/src/ui/sftp.rs b/src/ui/sftp.rs index d1bb1582..6185f4c7 100644 --- a/src/ui/sftp.rs +++ b/src/ui/sftp.rs @@ -1333,7 +1333,6 @@ impl Tty7App { let danger = cx.theme().danger; let accent = cx.theme().accent; let border = cx.theme().border; - let sidebar = cx.theme().sidebar; let hover = gpui::rgb(cx.global::().sidebar.hover); let expanded = self.sftp_panel.tray_expanded || history; @@ -1452,11 +1451,14 @@ impl Tty7App { }); Some( + // No fill: the tray is a child of the right panel, which already + // paints `workspace_surface_color`. Painting it again stacked a + // second src-over pass of the same translucent surface and left a + // visibly darker band with a hard seam under a backdrop material. v_flex() .flex_none() .border_t_1() .border_color(border) - .bg(sidebar) .child(head) .when(running > 0 && !expanded, |this| this.child(underline)) .children(body) diff --git a/src/ui/tab_sidebar.rs b/src/ui/tab_sidebar.rs index c0234f14..76ff4e0f 100644 --- a/src/ui/tab_sidebar.rs +++ b/src/ui/tab_sidebar.rs @@ -679,7 +679,7 @@ impl Tty7App { .flex_shrink_0() .w(px(width)) .h_full() - .bg(cx.theme().sidebar) + .bg(crate::ui::theme::workspace_surface_color(cx)) .border_r_1() .border_color(cx.theme().sidebar_border) .child(backing) diff --git a/src/ui/theme.rs b/src/ui/theme.rs index 310805fb..b5de3865 100644 --- a/src/ui/theme.rs +++ b/src/ui/theme.rs @@ -3,10 +3,10 @@ use gpui::{ WindowBackgroundAppearance, linear_color_stop, linear_gradient, point, px, rgb, }; use gpui_component::scroll::ScrollbarShow; -use gpui_component::{Theme, ThemeMode}; +use gpui_component::{ActiveTheme, Theme, ThemeMode}; use crate::core::actions::*; -use crate::core::config::Config; +use crate::core::config::{Config, WindowBackdrop}; use crate::terminal::view::{ ClearScrollback, CopyText, CutText, FindInTerminal, FindNext, FindPrevious, PasteText, RedoEdit, SelectAll, UndoEdit, @@ -14,6 +14,8 @@ use crate::terminal::view::{ use crate::ui::i18n::{L10nKey, t}; use crate::ui::presets; use crate::ui::presets::Fill; +#[cfg(target_os = "windows")] +use std::sync::OnceLock; pub(crate) fn traffic_light_position() -> Point { point(px(9.), px(13.)) @@ -164,7 +166,40 @@ fn window_menu_items(cx: &App) -> Vec { } pub(crate) fn window_background(bg: &presets::ActiveBackground) -> Background { - let alpha = bg.opacity.unwrap_or(1.0); + window_background_with_alpha(bg, bg.opacity.unwrap_or(1.0)) +} + +/// The same preset fill with the alpha channel forced to 1 — used by the +/// settings overlay, which must stay opaque (workspace translucency must +/// never show through it) while still rendering the preset's gradient +/// design instead of collapsing to a flat solid color. +pub(crate) fn window_background_opaque(bg: &presets::ActiveBackground) -> Background { + window_background_with_alpha(bg, 1.0) +} + +/// The workspace's own fill: the preset at whatever alpha the window opacity +/// and backdrop material asked for. +pub(crate) fn workspace_background(cx: &App) -> Background { + match cx.try_global::() { + Some(bg) => window_background(bg), + None => cx.theme().background.into(), + } +} + +/// The fill for a full-window overlay (settings, the opened file, the diff +/// view). Always opaque: the overlay covers the whole workspace, so window +/// translucency and the backdrop material must stop at it instead of showing +/// desktop through its text. Overlays pair this with +/// `app::overlay_surface_layers`, because their own opaque fill hides the +/// theme background image the workspace root paints beneath them. +pub(crate) fn overlay_background(cx: &App) -> Background { + match cx.try_global::() { + Some(bg) => window_background_opaque(bg), + None => cx.theme().background.alpha(1.0).into(), + } +} + +fn window_background_with_alpha(bg: &presets::ActiveBackground, alpha: f32) -> Background { let stop = |c: u32| -> Hsla { let mut h: Hsla = rgb(c).into(); h.a = alpha; @@ -225,14 +260,266 @@ pub(crate) fn effective_preset_id(cx: &App) -> String { } } +/// Default background alpha used while a backdrop material is active and +/// neither the theme nor the config overrides the opacity — a fully opaque +/// fill would hide the material behind it. +pub(crate) const SYSTEM_MATERIAL_OPACITY: f32 = 0.82; + +/// Maps the requested backdrop to the gpui window appearance, falling back +/// down the chain when the OS build predates a material: Mica needs Windows +/// 11 22H2 (build 22621), acrylic needs 1809 (build 17763); below that plain +/// translucency is the best Windows can do. Pure function so the fallback +/// table is unit-testable on every platform. +pub(crate) fn windows_background_appearance( + backdrop: WindowBackdrop, + blur: bool, + build: u32, +) -> WindowBackgroundAppearance { + match backdrop { + WindowBackdrop::Auto => { + if blur { + WindowBackgroundAppearance::Blurred + } else { + WindowBackgroundAppearance::Transparent + } + } + WindowBackdrop::Blur => { + if build >= 17_763 { + WindowBackgroundAppearance::Blurred + } else { + WindowBackgroundAppearance::Transparent + } + } + WindowBackdrop::Mica => { + if build >= 22_621 { + WindowBackgroundAppearance::MicaBackdrop + } else if build >= 17_763 { + WindowBackgroundAppearance::Blurred + } else { + WindowBackgroundAppearance::Transparent + } + } + WindowBackdrop::MicaAlt => { + if build >= 22_621 { + WindowBackgroundAppearance::MicaAltBackdrop + } else if build >= 17_763 { + WindowBackgroundAppearance::Blurred + } else { + WindowBackgroundAppearance::Transparent + } + } + WindowBackdrop::Acrylic => { + if build >= 22_621 { + // Native acrylic (DWMSBT_TRANSIENTWINDOW) on Windows 11 22H2+. + WindowBackgroundAppearance::AcrylicBackdrop + } else if build >= 17_763 { + // Classic WCA acrylic (ACCENT_ENABLE_ACRYLICBLURBEHIND). + WindowBackgroundAppearance::Blurred + } else { + WindowBackgroundAppearance::Transparent + } + } + WindowBackdrop::Off => WindowBackgroundAppearance::Transparent, + } +} + +/// The backdrop presets actually worth offering on a given Windows build. +/// Mica, Mica Alt and native acrylic all need Windows 11 22H2 (22621); below +/// that every one of them collapses onto the same classic WCA blur that +/// `Blur` already offers, so listing them would present several choices that +/// render identically — hiding them beats misrepresenting them. Below 1809 +/// (17763) there is no blur API at all, so only plain translucency is left. +/// Pure function so the table is unit-testable on every platform. +pub(crate) fn supported_backdrops_for(build: u32) -> &'static [WindowBackdrop] { + if build >= 22_621 { + &[ + WindowBackdrop::Auto, + WindowBackdrop::Blur, + WindowBackdrop::Mica, + WindowBackdrop::MicaAlt, + WindowBackdrop::Acrylic, + WindowBackdrop::Off, + ] + } else if build >= 17_763 { + &[ + WindowBackdrop::Auto, + WindowBackdrop::Blur, + WindowBackdrop::Off, + ] + } else { + &[WindowBackdrop::Auto, WindowBackdrop::Off] + } +} + +#[cfg(target_os = "windows")] +pub(crate) fn supported_backdrops() -> &'static [WindowBackdrop] { + supported_backdrops_for(windows_build_number()) +} + +#[cfg(target_os = "windows")] +pub(crate) fn windows_build_number() -> u32 { + static BUILD: OnceLock = OnceLock::new(); + *BUILD.get_or_init(|| { + use windows_sys::Wdk::System::SystemServices::RtlGetVersion; + use windows_sys::Win32::System::SystemInformation::OSVERSIONINFOW; + let mut info: OSVERSIONINFOW = unsafe { std::mem::zeroed() }; + // RtlGetVersion is not subject to the app-compat version lying that + // GetVersionEx is, and unlike GetVersionEx it does not require + // dwOSVersionInfoSize to be pre-filled; set it anyway so the call + // matches the documented contract. + info.dwOSVersionInfoSize = std::mem::size_of_val(&info) as u32; + let status = unsafe { RtlGetVersion(&mut info) }; + if status == 0 { + info.dwBuildNumber + } else { + // Unknown build: treat it as too old, so the fallback chain picks + // the most conservative material instead of a silent no-op. + 0 + } + }) +} + +pub(crate) fn resolved_background_appearance( + backdrop: WindowBackdrop, + blur: bool, +) -> WindowBackgroundAppearance { + #[cfg(target_os = "windows")] + { + windows_background_appearance(backdrop, blur, windows_build_number()) + } + #[cfg(not(target_os = "windows"))] + { + // `window_backdrop` is a Windows-only setting and this platform has + // no UI to change or clear it (only "Reset window overrides", which + // also clobbers opacity). If any variant pinned the appearance + // here, the local blur switch would silently show a checked state + // that isn't rendered — so every variant, including Off and Blur, + // defers to the legacy toggle. (A Windows-synced "off" therefore + // does not force transparency on macOS/Linux; the local blur switch + // stays authoritative.) + if blur { + WindowBackgroundAppearance::Blurred + } else { + WindowBackgroundAppearance::Transparent + } + } +} + +/// Whether the resolved backdrop on this platform is actually a material — +/// i.e. the window content sits over a blur/mica layer instead of plain +/// transparency. Derived from `resolved_background_appearance` so the +/// opacity defaulting and the appearance resolution can never disagree: on +/// very old builds `Blur`/`Acrylic` fall back to `Transparent`, and a +/// see-through window with no material behind it gets no special opacity. +/// +/// `Auto` never counts, even when the legacy blur toggle resolves it to +/// `Blurred`. It is the default for every config written before this +/// setting existed, and those windows were opaque with opaque sidebars — +/// treating them as materials would silently turn an untouched install +/// see-through on first launch after an update. Only an explicit pick in +/// the backdrop dropdown opts a window into the translucent defaults. +pub(crate) fn material_active(backdrop: WindowBackdrop, blur: bool) -> bool { + cfg!(target_os = "windows") + && backdrop != WindowBackdrop::Auto + && matches!( + resolved_background_appearance(backdrop, blur), + WindowBackgroundAppearance::Blurred + | WindowBackgroundAppearance::MicaBackdrop + | WindowBackgroundAppearance::MicaAltBackdrop + | WindowBackgroundAppearance::AcrylicBackdrop + ) +} + +/// The window's background alpha when neither the config nor the theme sets +/// an explicit opacity: translucent enough to show an active material, +/// fully opaque otherwise. Single source of truth for `apply_theme` and the +/// settings slider, so the two can never drift apart. +pub(crate) fn default_window_opacity(backdrop: WindowBackdrop, blur: bool) -> f32 { + if material_active(backdrop, blur) { + SYSTEM_MATERIAL_OPACITY + } else { + 1.0 + } +} + +/// The fill for the workspace's large translucent surfaces (file sidebar, +/// right panel, SFTP panel). While a material is active and the window is +/// translucent, the surface paints on top of the already-alpha window +/// background, so its own alpha stacks (src-over) and the material would +/// show through far less than behind the terminal; a constant 0.15 keeps +/// the backdrop ratio at ~85% of the terminal's at every opacity setting. +/// `theme.sidebar` itself stays opaque — the settings theme picker paints +/// with it on top of the opaque settings overlay and must stay legible. +pub(crate) fn workspace_surface_color(cx: &App) -> Hsla { + let base: Hsla = cx.theme().sidebar; + let translucent = cx + .try_global::() + .and_then(|bg| bg.opacity) + .is_some_and(|o| o < 1.0); + if !translucent { + return base; + } + let config = cx.global::(); + let theme = presets::by_id(cx, &effective_preset_id(cx)); + let blur = config.window_blur.unwrap_or(theme.blur); + if material_active(config.window_backdrop, blur) { + base.alpha(0.15) + } else { + base + } +} + +/// The backdrop presets offered in the settings dropdown: everything the +/// current build supports, plus the stored value even if it is not +/// supported here (e.g. Mica synced from a newer machine) — so the label +/// always matches what the window actually resolves to instead of quietly +/// showing "Auto" while a fallback appearance is applied. +#[cfg(target_os = "windows")] +pub(crate) fn backdrop_options(current: WindowBackdrop) -> Vec { + let mut list = supported_backdrops().to_vec(); + if !list.contains(¤t) { + list.push(current); + } + list +} + pub(crate) fn background_appearance(cx: &App) -> WindowBackgroundAppearance { let config = cx.global::(); let theme = presets::by_id(cx, &effective_preset_id(cx)); - if config.window_blur.unwrap_or(theme.blur) { - WindowBackgroundAppearance::Blurred - } else { - WindowBackgroundAppearance::Transparent - } + let blur = config.window_blur.unwrap_or(theme.blur); + resolved_background_appearance(config.window_backdrop, blur) +} + +/// The appearance last handed to each live window, so `apply_theme` can skip +/// a `set_background_appearance` that would change nothing. +/// +/// Worth the bookkeeping because the call is no longer cheap: with a DWM +/// material selected, gpui answers it by re-setting +/// `DWMWA_SYSTEMBACKDROP_TYPE` and forcing a non-client frame recalculation +/// (`SetWindowPos` with `SWP_FRAMECHANGED`). `apply_theme` runs on *every* +/// `Config` mutation in *every* window, so dragging the opacity slider — +/// which never changes the appearance — would otherwise recalc the frame +/// once per mouse-move sample and visibly stutter the drag. +#[derive(Default)] +struct AppliedAppearance(std::collections::HashMap); + +impl gpui::Global for AppliedAppearance {} + +/// Records `appearance` for `window` and reports whether it differs from +/// what that window was last given. Entries for closed windows are dropped +/// first: window ids come from a slotmap and are reused, so a stale entry +/// could otherwise suppress the very first call for a brand-new window. +fn take_appearance_change( + window: &Window, + appearance: WindowBackgroundAppearance, + cx: &mut App, +) -> bool { + let id = window.window_handle().window_id(); + let live: std::collections::HashSet = + cx.windows().iter().map(|w| w.window_id()).collect(); + let applied = cx.default_global::(); + applied.0.retain(|known, _| live.contains(known)); + applied.0.insert(id, appearance) != Some(appearance) } pub(crate) fn apply_theme(mut window: Option<&mut Window>, cx: &mut App) { @@ -254,8 +541,17 @@ pub(crate) fn apply_theme(mut window: Option<&mut Window>, cx: &mut App) { } else { ThemeMode::Light }; - let opacity = config.window_opacity.or(theme.opacity).filter(|o| *o < 1.0); let blur = config.window_blur.unwrap_or(theme.blur); + // A material needs some translucency to be visible; without an explicit + // opacity override it defaults to SYSTEM_MATERIAL_OPACITY instead of + // 1.0. Derived from the *resolved* appearance so old builds where + // Blur/Acrylic fall back to plain transparency stay opaque by default. + let default_opacity = default_window_opacity(config.window_backdrop, blur); + let opacity = config + .window_opacity + .or(theme.opacity) + .unwrap_or(default_opacity); + let opacity = (opacity < 1.0).then_some(opacity); if !follow { sync_native_appearance(Some(theme.dark)); } @@ -265,13 +561,13 @@ pub(crate) fn apply_theme(mut window: Option<&mut Window>, cx: &mut App) { let active = theme.active_palette(config.theme_legible_palette); let auto_hide_scrollbars = cx.should_auto_hide_scrollbars(); + let backdrop = config.window_backdrop; + if let Some(window) = window.as_deref_mut() { - let bg_appearance = if blur { - WindowBackgroundAppearance::Blurred - } else { - WindowBackgroundAppearance::Transparent - }; - window.set_background_appearance(bg_appearance); + let appearance = resolved_background_appearance(backdrop, blur); + if take_appearance_change(window, appearance, cx) { + window.set_background_appearance(appearance); + } } Theme::change(mode, window.as_deref_mut(), cx); @@ -427,10 +723,15 @@ pub(crate) fn apply_theme(mut window: Option<&mut Window>, cx: &mut App) { t.radius = px(8.); - let sidebar_bg = rgb(m.sidebar); + let sidebar_bg = Hsla::from(rgb(m.sidebar)); let sidebar_sel = rgb(surfaces.sidebar.selected); + // `t.sidebar` stays the opaque theme token: the settings theme picker + // paints with it on top of the (opaque) settings overlay, so diluting + // it would wash out that panel. The workspace sidebar/right-panel + // surfaces get their translucent variant at render time instead — + // see `workspace_surface_color`. t.sidebar = sidebar_bg.into(); - t.tokens.sidebar = Hsla::from(sidebar_bg).into(); + t.tokens.sidebar = sidebar_bg.into(); t.sidebar_border = rgb(m.border).into(); t.sidebar_foreground = rgb(surfaces.sidebar.text_resting).into(); t.sidebar_accent = sidebar_sel.into(); @@ -529,4 +830,234 @@ mod tests { assert_eq!(effective_preset_id(cx), Config::default().theme_preset); }); } + + #[test] + fn windows_background_appearance_falls_back_by_build() { + use crate::core::config::WindowBackdrop; + let a = |b: WindowBackdrop, blur: bool, build: u32| { + windows_background_appearance(b, blur, build) + }; + + // Auto keeps the legacy blur/translucent choice. + assert_eq!( + a(WindowBackdrop::Auto, false, 22_621), + WindowBackgroundAppearance::Transparent + ); + assert_eq!( + a(WindowBackdrop::Auto, true, 17_763), + WindowBackgroundAppearance::Blurred + ); + + // Blur explicitly requests the classic blurred appearance from 1809 + // on; older builds get plain translucency. + assert_eq!( + a(WindowBackdrop::Blur, false, 17_763), + WindowBackgroundAppearance::Blurred + ); + assert_eq!( + a(WindowBackdrop::Blur, true, 17_762), + WindowBackgroundAppearance::Transparent + ); + + // Mica needs Windows 11 22H2; 1809..22H2 falls back to classic + // acrylic, and below 1809 there is no blur API to fall back to — + // asking for one there would leave an unbacked see-through window. + assert_eq!( + a(WindowBackdrop::Mica, false, 22_621), + WindowBackgroundAppearance::MicaBackdrop + ); + assert_eq!( + a(WindowBackdrop::Mica, false, 22_620), + WindowBackgroundAppearance::Blurred + ); + assert_eq!( + a(WindowBackdrop::Mica, false, 17_762), + WindowBackgroundAppearance::Transparent + ); + assert_eq!( + a(WindowBackdrop::MicaAlt, false, 26_000), + WindowBackgroundAppearance::MicaAltBackdrop + ); + assert_eq!( + a(WindowBackdrop::MicaAlt, false, 17_763), + WindowBackgroundAppearance::Blurred + ); + assert_eq!( + a(WindowBackdrop::MicaAlt, false, 17_762), + WindowBackgroundAppearance::Transparent + ); + // A failed RtlGetVersion reports build 0; every material must degrade + // to plain translucency there rather than request an unsupported one. + for backdrop in [ + WindowBackdrop::Blur, + WindowBackdrop::Mica, + WindowBackdrop::MicaAlt, + WindowBackdrop::Acrylic, + ] { + assert_eq!( + a(backdrop, false, 0), + WindowBackgroundAppearance::Transparent, + "{backdrop:?} on an unknown build must not request a material" + ); + } + + // Acrylic uses the native DWMSBT_TRANSIENTWINDOW material on 22H2+, + // classic WCA acrylic from 1809 on, plain translucency below that. + assert_eq!( + a(WindowBackdrop::Acrylic, false, 22_621), + WindowBackgroundAppearance::AcrylicBackdrop + ); + assert_eq!( + a(WindowBackdrop::Acrylic, false, 22_620), + WindowBackgroundAppearance::Blurred + ); + assert_eq!( + a(WindowBackdrop::Acrylic, false, 17_763), + WindowBackgroundAppearance::Blurred + ); + assert_eq!( + a(WindowBackdrop::Acrylic, false, 17_762), + WindowBackgroundAppearance::Transparent + ); + + // Off never requests a material. + assert_eq!( + a(WindowBackdrop::Off, false, 26_000), + WindowBackgroundAppearance::Transparent + ); + assert_eq!( + a(WindowBackdrop::Off, true, 26_000), + WindowBackgroundAppearance::Transparent + ); + } + + #[test] + fn auto_never_counts_as_a_material() { + use crate::core::config::WindowBackdrop; + // Every config written before this setting existed carries `Auto`, + // and many of them carry `window_blur: true` from the old switch. + // Those windows were opaque, with opaque sidebars — an update must + // not silently turn them see-through, so `Auto` gets the plain 1.0 + // default no matter which way the legacy toggle points. + for blur in [false, true] { + assert!(!material_active(WindowBackdrop::Auto, blur)); + assert_eq!(default_window_opacity(WindowBackdrop::Auto, blur), 1.0); + } + // `Off` is an explicit "no material" and must behave the same. + assert!(!material_active(WindowBackdrop::Off, true)); + assert_eq!(default_window_opacity(WindowBackdrop::Off, true), 1.0); + } + + #[cfg(target_os = "windows")] + #[test] + fn an_explicitly_picked_material_lowers_the_default_opacity() { + use crate::core::config::WindowBackdrop; + // The counterpart to the check above: opting in through the dropdown + // is what buys the translucent default, on a build that supports it. + if windows_build_number() < 22_621 { + return; + } + for backdrop in [ + WindowBackdrop::Blur, + WindowBackdrop::Mica, + WindowBackdrop::MicaAlt, + WindowBackdrop::Acrylic, + ] { + assert!(material_active(backdrop, false), "{backdrop:?}"); + assert_eq!( + default_window_opacity(backdrop, false), + SYSTEM_MATERIAL_OPACITY, + "{backdrop:?}" + ); + } + } + + #[cfg(not(target_os = "windows"))] + #[test] + fn non_windows_backdrop_defers_to_the_local_blur_toggle() { + use crate::core::config::WindowBackdrop; + // On non-Windows, `window_backdrop` is a Windows-only setting with + // no local UI to clear it; every variant must defer to the local + // blur toggle so the switch's checked state always matches what is + // actually rendered. + for backdrop in [ + WindowBackdrop::Auto, + WindowBackdrop::Blur, + WindowBackdrop::Mica, + WindowBackdrop::MicaAlt, + WindowBackdrop::Acrylic, + WindowBackdrop::Off, + ] { + assert_eq!( + resolved_background_appearance(backdrop, true), + WindowBackgroundAppearance::Blurred, + "{backdrop:?} with blur on should resolve to Blurred" + ); + assert_eq!( + resolved_background_appearance(backdrop, false), + WindowBackgroundAppearance::Transparent, + "{backdrop:?} with blur off should resolve to Transparent" + ); + } + } + + #[test] + fn supported_backdrops_follow_the_build() { + use crate::core::config::WindowBackdrop; + assert_eq!( + supported_backdrops_for(22_621), + &[ + WindowBackdrop::Auto, + WindowBackdrop::Blur, + WindowBackdrop::Mica, + WindowBackdrop::MicaAlt, + WindowBackdrop::Acrylic, + WindowBackdrop::Off, + ] + ); + // Pre-22H2: Mica, Mica Alt and Acrylic all collapse onto the very + // same classic WCA blur that `Blur` already offers, so the dropdown + // hides them rather than listing choices that render identically. + assert_eq!( + supported_backdrops_for(22_620), + &[ + WindowBackdrop::Auto, + WindowBackdrop::Blur, + WindowBackdrop::Off, + ] + ); + assert_eq!( + supported_backdrops_for(17_763), + &[ + WindowBackdrop::Auto, + WindowBackdrop::Blur, + WindowBackdrop::Off, + ] + ); + // Every offered preset must resolve to a distinct appearance, or the + // dropdown is promising a difference the window cannot deliver. + // `Auto` is exempt: it has no fixed appearance of its own, it mirrors + // whichever way the blur toggle happens to be set. + for build in [22_621, 22_620, 17_763, 17_762] { + let offered: Vec<_> = supported_backdrops_for(build) + .iter() + .copied() + .filter(|b| *b != WindowBackdrop::Auto) + .collect(); + for (i, a) in offered.iter().enumerate() { + for b in &offered[i + 1..] { + assert_ne!( + windows_background_appearance(*a, false, build), + windows_background_appearance(*b, false, build), + "build {build}: {a:?} and {b:?} render identically" + ); + } + } + } + // Below 1809 there is no blur API at all; only plain translucency. + assert_eq!( + supported_backdrops_for(17_762), + &[WindowBackdrop::Auto, WindowBackdrop::Off] + ); + } }