refactor: async Command over emitting shell actions (#3706)

This commit is contained in:
三咲雅 misaki masa 2026-02-22 10:31:15 +08:00 committed by GitHub
parent e49cdfe220
commit d84f0b1265
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 137 additions and 136 deletions

155
Cargo.lock generated
View file

@ -159,9 +159,9 @@ dependencies = [
[[package]] [[package]]
name = "anyhow" name = "anyhow"
version = "1.0.101" version = "1.0.102"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
[[package]] [[package]]
name = "arbitrary" name = "arbitrary"
@ -186,7 +186,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -473,9 +473,9 @@ checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64"
[[package]] [[package]]
name = "bumpalo" name = "bumpalo"
version = "3.19.1" version = "3.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
[[package]] [[package]]
name = "by_address" name = "by_address"
@ -500,7 +500,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -600,9 +600,9 @@ dependencies = [
[[package]] [[package]]
name = "clap" name = "clap"
version = "4.5.59" version = "4.5.60"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5caf74d17c3aec5495110c34cc3f78644bfa89af6c8993ed4de2790e49b6499" checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a"
dependencies = [ dependencies = [
"clap_builder", "clap_builder",
"clap_derive", "clap_derive",
@ -610,9 +610,9 @@ dependencies = [
[[package]] [[package]]
name = "clap_builder" name = "clap_builder"
version = "4.5.59" version = "4.5.60"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "370daa45065b80218950227371916a1633217ae42b2715b2287b606dcd618e24" checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876"
dependencies = [ dependencies = [
"anstream", "anstream",
"anstyle", "anstyle",
@ -658,7 +658,7 @@ dependencies = [
"heck", "heck",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -990,7 +990,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1034,7 +1034,7 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"strsim", "strsim",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1048,7 +1048,7 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"strsim", "strsim",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1061,7 +1061,7 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"strsim", "strsim",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1072,7 +1072,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [ dependencies = [
"darling_core 0.20.11", "darling_core 0.20.11",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1083,7 +1083,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
dependencies = [ dependencies = [
"darling_core 0.21.3", "darling_core 0.21.3",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1094,7 +1094,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
dependencies = [ dependencies = [
"darling_core 0.23.0", "darling_core 0.23.0",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1131,7 +1131,7 @@ checksum = "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1164,9 +1164,9 @@ dependencies = [
[[package]] [[package]]
name = "deranged" name = "deranged"
version = "0.5.6" version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
dependencies = [ dependencies = [
"powerfmt", "powerfmt",
"serde_core", "serde_core",
@ -1190,7 +1190,7 @@ dependencies = [
"darling 0.20.11", "darling 0.20.11",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1200,7 +1200,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
dependencies = [ dependencies = [
"derive_builder_core", "derive_builder_core",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1222,7 +1222,7 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"rustc_version", "rustc_version",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1365,7 +1365,7 @@ dependencies = [
"once_cell", "once_cell",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1391,7 +1391,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1494,7 +1494,7 @@ checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1660,7 +1660,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -1862,7 +1862,7 @@ dependencies = [
"proc-macro-error2", "proc-macro-error2",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -2085,7 +2085,7 @@ dependencies = [
"indoc", "indoc",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -2127,7 +2127,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -2163,9 +2163,9 @@ dependencies = [
[[package]] [[package]]
name = "js-sys" name = "js-sys"
version = "0.3.85" version = "0.3.88"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" checksum = "c7e709f3e3d22866f9c25b3aff01af289b18422cc8b4262fb19103ee80fe513d"
dependencies = [ dependencies = [
"once_cell", "once_cell",
"wasm-bindgen", "wasm-bindgen",
@ -2537,7 +2537,7 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"regex", "regex",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -2681,7 +2681,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -2937,7 +2937,7 @@ dependencies = [
"by_address", "by_address",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -3056,7 +3056,7 @@ dependencies = [
"pest_meta", "pest_meta",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -3109,7 +3109,7 @@ dependencies = [
"phf_shared", "phf_shared",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -3257,7 +3257,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -3288,7 +3288,7 @@ dependencies = [
"proc-macro-error-attr2", "proc-macro-error-attr2",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -3316,7 +3316,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b"
dependencies = [ dependencies = [
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -3663,7 +3663,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -4014,7 +4014,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -4067,7 +4067,7 @@ dependencies = [
"darling 0.21.3", "darling 0.21.3",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -4352,7 +4352,7 @@ dependencies = [
"heck", "heck",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -4374,9 +4374,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.116" version = "2.0.117"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -4510,7 +4510,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -4521,7 +4521,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -4618,7 +4618,7 @@ checksum = "2d2e76690929402faae40aebdda620a2c0e25dd6d3b9afe48867dfd95991f4bd"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -4646,7 +4646,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -4675,9 +4675,9 @@ dependencies = [
[[package]] [[package]]
name = "toml" name = "toml"
version = "1.0.2+spec-1.1.0" version = "1.0.3+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d1dfefef6a142e93f346b64c160934eb13b5594b84ab378133ac6815cb2bd57f" checksum = "c7614eaf19ad818347db24addfa201729cf2a9b6fdfd9eb0ab870fcacc606c0c"
dependencies = [ dependencies = [
"indexmap 2.13.0", "indexmap 2.13.0",
"serde_core", "serde_core",
@ -4743,7 +4743,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -5029,9 +5029,9 @@ dependencies = [
[[package]] [[package]]
name = "wasm-bindgen" name = "wasm-bindgen"
version = "0.2.108" version = "0.2.111"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" checksum = "ec1adf1535672f5b7824f817792b1afd731d7e843d2d04ec8f27e8cb51edd8ac"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"once_cell", "once_cell",
@ -5042,9 +5042,9 @@ dependencies = [
[[package]] [[package]]
name = "wasm-bindgen-futures" name = "wasm-bindgen-futures"
version = "0.4.58" version = "0.4.61"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" checksum = "fe88540d1c934c4ec8e6db0afa536876c5441289d7f9f9123d4f065ac1250a6b"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"futures-util", "futures-util",
@ -5056,9 +5056,9 @@ dependencies = [
[[package]] [[package]]
name = "wasm-bindgen-macro" name = "wasm-bindgen-macro"
version = "0.2.108" version = "0.2.111"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" checksum = "19e638317c08b21663aed4d2b9a2091450548954695ff4efa75bff5fa546b3b1"
dependencies = [ dependencies = [
"quote", "quote",
"wasm-bindgen-macro-support", "wasm-bindgen-macro-support",
@ -5066,22 +5066,22 @@ dependencies = [
[[package]] [[package]]
name = "wasm-bindgen-macro-support" name = "wasm-bindgen-macro-support"
version = "0.2.108" version = "0.2.111"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" checksum = "2c64760850114d03d5f65457e96fc988f11f01d38fbaa51b254e4ab5809102af"
dependencies = [ dependencies = [
"bumpalo", "bumpalo",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
[[package]] [[package]]
name = "wasm-bindgen-shared" name = "wasm-bindgen-shared"
version = "0.2.108" version = "0.2.111"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" checksum = "60eecd4fe26177cfa3339eb00b4a36445889ba3ad37080c2429879718e20ca41"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
@ -5122,9 +5122,9 @@ dependencies = [
[[package]] [[package]]
name = "web-sys" name = "web-sys"
version = "0.3.85" version = "0.3.88"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" checksum = "9d6bb20ed2d9572df8584f6dc81d68a41a625cadc6f15999d649a70ce7e3597a"
dependencies = [ dependencies = [
"js-sys", "js-sys",
"wasm-bindgen", "wasm-bindgen",
@ -5337,7 +5337,7 @@ checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -5348,7 +5348,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -5359,7 +5359,7 @@ checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -5370,7 +5370,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -5632,7 +5632,7 @@ dependencies = [
"heck", "heck",
"indexmap 2.13.0", "indexmap 2.13.0",
"prettyplease", "prettyplease",
"syn 2.0.116", "syn 2.0.117",
"wasm-metadata", "wasm-metadata",
"wit-bindgen-core", "wit-bindgen-core",
"wit-component", "wit-component",
@ -5648,7 +5648,7 @@ dependencies = [
"prettyplease", "prettyplease",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
"wit-bindgen-core", "wit-bindgen-core",
"wit-bindgen-rust", "wit-bindgen-rust",
] ]
@ -5849,7 +5849,7 @@ name = "yazi-codegen"
version = "26.2.2" version = "26.2.2"
dependencies = [ dependencies = [
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -6103,6 +6103,7 @@ dependencies = [
"yazi-proxy", "yazi-proxy",
"yazi-shared", "yazi-shared",
"yazi-shim", "yazi-shim",
"yazi-term",
"yazi-vfs", "yazi-vfs",
"yazi-widgets", "yazi-widgets",
] ]
@ -6152,6 +6153,7 @@ dependencies = [
"yazi-plugin", "yazi-plugin",
"yazi-proxy", "yazi-proxy",
"yazi-shared", "yazi-shared",
"yazi-term",
"yazi-vfs", "yazi-vfs",
] ]
@ -6208,6 +6210,7 @@ dependencies = [
"crossterm 0.29.0", "crossterm 0.29.0",
"libc", "libc",
"ratatui", "ratatui",
"tokio",
"yazi-config", "yazi-config",
"yazi-emulator", "yazi-emulator",
"yazi-macro", "yazi-macro",
@ -6308,7 +6311,7 @@ checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]
@ -6328,7 +6331,7 @@ checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.116", "syn 2.0.117",
] ]
[[package]] [[package]]

View file

@ -27,10 +27,10 @@ debug = false
[workspace.dependencies] [workspace.dependencies]
ansi-to-tui = "8.0.1" ansi-to-tui = "8.0.1"
anyhow = "1.0.101" anyhow = "1.0.102"
base64 = "0.22.1" base64 = "0.22.1"
bitflags = { version = "2.11.0", features = [ "serde" ] } bitflags = { version = "2.11.0", features = [ "serde" ] }
clap = { version = "4.5.59", features = [ "derive" ] } clap = { version = "4.5.60", features = [ "derive" ] }
core-foundation-sys = "0.8.7" core-foundation-sys = "0.8.7"
crossterm = { version = "0.29.0", features = [ "event-stream" ] } crossterm = { version = "0.29.0", features = [ "event-stream" ] }
dirs = "6.0.0" dirs = "6.0.0"
@ -62,7 +62,7 @@ thiserror = "2.0.18"
tokio = { version = "1.49.0", features = [ "full" ] } tokio = { version = "1.49.0", features = [ "full" ] }
tokio-stream = "0.1.18" tokio-stream = "0.1.18"
tokio-util = "0.7.18" tokio-util = "0.7.18"
toml = { version = "1.0.2" } toml = { version = "1.0.3" }
tracing = { version = "0.1.44", features = [ "max_level_debug", "release_max_level_debug" ] } tracing = { version = "0.1.44", features = [ "max_level_debug", "release_max_level_debug" ] }
twox-hash = { version = "2.1.2", default-features = false, features = [ "std", "random", "xxhash3_128" ] } twox-hash = { version = "2.1.2", default-features = false, features = [ "std", "random", "xxhash3_128" ] }
typed-path = "0.12.3" typed-path = "0.12.3"

View file

@ -1,5 +1,5 @@
[Desktop Entry] [Desktop Entry]
Name=Yazi Name=Yazi File Manager
Icon=yazi Icon=yazi
Comment=Blazing fast terminal file manager written in Rust, based on async I/O Comment=Blazing fast terminal file manager written in Rust, based on async I/O
Terminal=true Terminal=true

View file

@ -11,8 +11,9 @@ use yazi_dds::Pubsub;
use yazi_fs::{File, FilesOp, Splatter, max_common_root, path::skip_url, provider::{FileBuilder, Provider, local::{Gate, Local}}}; use yazi_fs::{File, FilesOp, Splatter, max_common_root, path::skip_url, provider::{FileBuilder, Provider, local::{Gate, Local}}};
use yazi_macro::{err, succ}; use yazi_macro::{err, succ};
use yazi_parser::VoidOpt; use yazi_parser::VoidOpt;
use yazi_proxy::{AppProxy, HIDER, NotifyProxy, TasksProxy}; use yazi_proxy::{AppProxy, NotifyProxy, TasksProxy};
use yazi_shared::{data::Data, path::PathDyn, strand::{AsStrand, AsStrandJoin, Strand, StrandBuf, StrandLike}, terminal_clear, url::{AsUrl, UrlBuf, UrlCow, UrlLike}}; use yazi_shared::{data::Data, path::PathDyn, strand::{AsStrand, AsStrandJoin, Strand, StrandBuf, StrandLike}, terminal_clear, url::{AsUrl, UrlBuf, UrlCow, UrlLike}};
use yazi_term::YIELD_TO_SUBPROCESS;
use yazi_tty::TTY; use yazi_tty::TTY;
use yazi_vfs::{VfsFile, maybe_exists, provider}; use yazi_vfs::{VfsFile, maybe_exists, provider};
use yazi_watcher::WATCHER; use yazi_watcher::WATCHER;
@ -66,7 +67,7 @@ impl Actor for BulkRename {
) )
.await; .await;
let _permit = Permit::new(HIDER.acquire().await.unwrap(), AppProxy::resume()); let _permit = Permit::new(YIELD_TO_SUBPROCESS.acquire().await.unwrap(), AppProxy::resume());
AppProxy::stop().await; AppProxy::stop().await;
let new: Vec<_> = Local::regular(&tmp) let new: Vec<_> = Local::regular(&tmp)

View file

@ -1,7 +1,6 @@
use anyhow::Result; use anyhow::Result;
use yazi_macro::succ; use yazi_macro::succ;
use yazi_parser::mgr::PeekOpt; use yazi_parser::mgr::PeekOpt;
use yazi_proxy::HIDER;
use yazi_shared::data::Data; use yazi_shared::data::Data;
use crate::{Actor, Ctx}; use crate::{Actor, Ctx};
@ -17,7 +16,7 @@ impl Actor for Peek {
let Some(hovered) = cx.hovered().cloned() else { let Some(hovered) = cx.hovered().cloned() else {
succ!(cx.tab_mut().preview.reset()); succ!(cx.tab_mut().preview.reset());
}; };
if HIDER.try_acquire().is_err() { if cx.term.is_none() {
succ!(cx.tab_mut().preview.reset_image()); succ!(cx.tab_mut().preview.reset_image());
} }

View file

@ -7,8 +7,9 @@ use tokio::{io::{AsyncReadExt, stdin}, select, sync::mpsc, time};
use yazi_binding::Permit; use yazi_binding::Permit;
use yazi_macro::succ; use yazi_macro::succ;
use yazi_parser::VoidOpt; use yazi_parser::VoidOpt;
use yazi_proxy::{AppProxy, HIDER}; use yazi_proxy::AppProxy;
use yazi_shared::{data::Data, terminal_clear}; use yazi_shared::{data::Data, terminal_clear};
use yazi_term::YIELD_TO_SUBPROCESS;
use yazi_tty::TTY; use yazi_tty::TTY;
use crate::{Actor, Ctx}; use crate::{Actor, Ctx};
@ -27,7 +28,7 @@ impl Actor for Inspect {
}; };
tokio::spawn(async move { tokio::spawn(async move {
let _permit = Permit::new(HIDER.acquire().await.unwrap(), AppProxy::resume()); let _permit = Permit::new(YIELD_TO_SUBPROCESS.acquire().await.unwrap(), AppProxy::resume());
let (tx, mut rx) = mpsc::unbounded_channel(); let (tx, mut rx) = mpsc::unbounded_channel();
let buffered = { let buffered = {

View file

@ -16,5 +16,5 @@ proc-macro = true
[dependencies] [dependencies]
# External dependencies # External dependencies
syn = { version = "2.0.116", features = [ "full" ] } syn = { version = "2.0.117", features = [ "full" ] }
quote = "1.0.44" quote = "1.0.44"

View file

@ -5,6 +5,7 @@ use crossterm::{cursor::{MoveTo, SetCursorStyle, Show}, execute, queue, terminal
use ratatui::{CompletedFrame, backend::{Backend, CrosstermBackend}, buffer::Buffer, layout::Position}; use ratatui::{CompletedFrame, backend::{Backend, CrosstermBackend}, buffer::Buffer, layout::Position};
use yazi_actor::{Ctx, lives::Lives}; use yazi_actor::{Ctx, lives::Lives};
use yazi_binding::runtime_scope; use yazi_binding::runtime_scope;
use yazi_config::LAYOUT;
use yazi_macro::{act, succ}; use yazi_macro::{act, succ};
use yazi_plugin::LUA; use yazi_plugin::LUA;
use yazi_shared::{data::Data, event::NEED_RENDER}; use yazi_shared::{data::Data, event::NEED_RENDER};
@ -26,13 +27,12 @@ impl App {
let _guard = scopeguard::guard(self.core.cursor(), |c| Self::routine(false, c)); let _guard = scopeguard::guard(self.core.cursor(), |c| Self::routine(false, c));
let collision = COLLISION.swap(false, Ordering::Relaxed); let collision = COLLISION.swap(false, Ordering::Relaxed);
let frame = term let preview_rect = LAYOUT.get().preview;
.draw(|f| { let frame = term.draw(|f| {
_ = Lives::scope(&self.core, || { _ = Lives::scope(&self.core, || {
runtime_scope!(LUA, "root", Ok(f.render_widget(Root::new(&self.core), f.area()))) runtime_scope!(LUA, "root", Ok(f.render_widget(Root::new(&self.core), f.area())))
}); });
}) })?;
.unwrap();
if COLLISION.load(Ordering::Relaxed) { if COLLISION.load(Ordering::Relaxed) {
Self::patch(frame); Self::patch(frame);
@ -41,10 +41,11 @@ impl App {
self.render_partially()?; self.render_partially()?;
} }
// Reload preview if collision is resolved let cx = &mut Ctx::active(&mut self.core, &mut self.term);
if collision && !COLLISION.load(Ordering::Relaxed) { if collision && !COLLISION.load(Ordering::Relaxed) {
let cx = &mut Ctx::active(&mut self.core, &mut self.term); act!(mgr:peek, cx, true)?; // Reload preview if collision is resolved
act!(mgr:peek, cx, true)?; } else if preview_rect != LAYOUT.get().preview {
act!(mgr:peek, cx)?; // Reload preview if layout changed
} }
succ!(); succ!();
} }
@ -58,17 +59,15 @@ impl App {
Self::routine(true, None); Self::routine(true, None);
let _guard = scopeguard::guard(self.core.cursor(), |c| Self::routine(false, c)); let _guard = scopeguard::guard(self.core.cursor(), |c| Self::routine(false, c));
let frame = term let frame = term.draw_partial(|f| {
.draw_partial(|f| { _ = Lives::scope(&self.core, || {
_ = Lives::scope(&self.core, || { runtime_scope!(LUA, "root", {
runtime_scope!(LUA, "root", { f.render_widget(crate::tasks::Progress::new(&self.core), f.area());
f.render_widget(crate::tasks::Progress::new(&self.core), f.area()); f.render_widget(crate::notify::Notify::new(&self.core), f.area());
f.render_widget(crate::notify::Notify::new(&self.core), f.area()); Ok(())
Ok(()) })
}) });
}); })?;
})
.unwrap();
if COLLISION.load(Ordering::Relaxed) { if COLLISION.load(Ordering::Relaxed) {
Self::patch(frame); Self::patch(frame);

View file

@ -16,6 +16,8 @@ async fn main() -> anyhow::Result<()> {
yazi_tty::init(); yazi_tty::init();
yazi_term::init();
yazi_fs::init(); yazi_fs::init();
yazi_config::init()?; yazi_config::init()?;
@ -26,8 +28,6 @@ async fn main() -> anyhow::Result<()> {
yazi_boot::init(); yazi_boot::init();
yazi_proxy::init();
yazi_dds::init(); yazi_dds::init();
yazi_widgets::init(); yazi_widgets::init();

View file

@ -21,7 +21,8 @@ impl Signals {
fn handle_sys(n: libc::c_int) -> bool { fn handle_sys(n: libc::c_int) -> bool {
use libc::{SIGCONT, SIGHUP, SIGINT, SIGQUIT, SIGSTOP, SIGTERM, SIGTSTP}; use libc::{SIGCONT, SIGHUP, SIGINT, SIGQUIT, SIGSTOP, SIGTERM, SIGTSTP};
use tracing::error; use tracing::error;
use yazi_proxy::{AppProxy, HIDER}; use yazi_proxy::AppProxy;
use yazi_term::YIELD_TO_SUBPROCESS;
match n { match n {
SIGINT => { /* ignored */ } SIGINT => { /* ignored */ }
@ -38,7 +39,7 @@ impl Signals {
} }
}); });
} }
SIGCONT if HIDER.try_acquire().is_ok() => _ = tokio::spawn(AppProxy::resume()), SIGCONT if YIELD_TO_SUBPROCESS.try_acquire().is_ok() => _ = tokio::spawn(AppProxy::resume()),
_ => {} _ => {}
} }
true true

View file

@ -28,6 +28,7 @@ yazi-parser = { path = "../yazi-parser", version = "26.2.2" }
yazi-proxy = { path = "../yazi-proxy", version = "26.2.2" } yazi-proxy = { path = "../yazi-proxy", version = "26.2.2" }
yazi-shared = { path = "../yazi-shared", version = "26.2.2" } yazi-shared = { path = "../yazi-shared", version = "26.2.2" }
yazi-shim = { path = "../yazi-shim", version = "26.2.2" } yazi-shim = { path = "../yazi-shim", version = "26.2.2" }
yazi-term = { path = "../yazi-term", version = "26.2.2" }
yazi-vfs = { path = "../yazi-vfs", version = "26.2.2" } yazi-vfs = { path = "../yazi-vfs", version = "26.2.2" }
yazi-widgets = { path = "../yazi-widgets", version = "26.2.2" } yazi-widgets = { path = "../yazi-widgets", version = "26.2.2" }

View file

@ -13,16 +13,10 @@ function M:setup(opts)
opts = opts or {} opts = opts or {}
if opts.update_db then if opts.update_db then
ps.sub( ps.sub("cd", function()
"cd", local cwd = cx.active.current.cwd
function() ya.async(function() Command("zoxide"):arg({ "add", tostring(cwd) }):status() end)
ya.emit("shell", { end)
cwd = fs.cwd(),
orphan = true,
"zoxide add " .. ya.quote(tostring(cx.active.current.cwd)):gsub("%%", "%%%%"),
})
end
)
end end
end end

View file

@ -5,8 +5,9 @@ use tracing::error;
use unicode_width::{UnicodeWidthChar, UnicodeWidthStr}; use unicode_width::{UnicodeWidthChar, UnicodeWidthStr};
use yazi_binding::{Composer, ComposerGet, ComposerSet, Permit, PermitRef, elements::{Line, Rect, Span}, runtime}; use yazi_binding::{Composer, ComposerGet, ComposerSet, Permit, PermitRef, elements::{Line, Rect, Span}, runtime};
use yazi_config::LAYOUT; use yazi_config::LAYOUT;
use yazi_proxy::{AppProxy, HIDER}; use yazi_proxy::AppProxy;
use yazi_shared::replace_to_printable; use yazi_shared::replace_to_printable;
use yazi_term::YIELD_TO_SUBPROCESS;
pub fn compose() -> Composer<ComposerGet, ComposerSet> { pub fn compose() -> Composer<ComposerGet, ComposerSet> {
fn get(lua: &Lua, key: &[u8]) -> mlua::Result<Value> { fn get(lua: &Lua, key: &[u8]) -> mlua::Result<Value> {
@ -52,7 +53,7 @@ pub(super) fn hide(lua: &Lua) -> mlua::Result<Value> {
return Err("Cannot hide while already hidden".into_lua_err()); return Err("Cannot hide while already hidden".into_lua_err());
} }
let permit = HIDER.acquire().await.unwrap(); let permit = YIELD_TO_SUBPROCESS.acquire().await.unwrap();
AppProxy::stop().await; AppProxy::stop().await;
lua.set_named_registry_value("HIDE_PERMIT", Permit::new(permit, AppProxy::resume()))?; lua.set_named_registry_value("HIDE_PERMIT", Permit::new(permit, AppProxy::resume()))?;

View file

@ -1,5 +1,3 @@
mod macros; mod macros;
yazi_macro::mod_flat!(app cmp confirm input mgr notify pick semaphore tasks which); yazi_macro::mod_flat!(app cmp confirm input mgr notify pick tasks which);
pub fn init() { crate::init_semaphore(); }

View file

@ -1,6 +0,0 @@
use tokio::sync::Semaphore;
use yazi_shared::RoCell;
pub static HIDER: RoCell<Semaphore> = RoCell::new();
pub(super) fn init_semaphore() { HIDER.init(Semaphore::new(1)); }

View file

@ -21,6 +21,7 @@ yazi-parser = { path = "../yazi-parser", version = "26.2.2" }
yazi-plugin = { path = "../yazi-plugin", version = "26.2.2" } yazi-plugin = { path = "../yazi-plugin", version = "26.2.2" }
yazi-proxy = { path = "../yazi-proxy", version = "26.2.2" } yazi-proxy = { path = "../yazi-proxy", version = "26.2.2" }
yazi-shared = { path = "../yazi-shared", version = "26.2.2" } yazi-shared = { path = "../yazi-shared", version = "26.2.2" }
yazi-term = { path = "../yazi-term", version = "26.2.2" }
yazi-vfs = { path = "../yazi-vfs", version = "26.2.2" } yazi-vfs = { path = "../yazi-vfs", version = "26.2.2" }
# External dependencies # External dependencies

View file

@ -1,7 +1,8 @@
use anyhow::{Result, anyhow}; use anyhow::{Result, anyhow};
use tokio::{io::{AsyncBufReadExt, BufReader}, select, sync::mpsc}; use tokio::{io::{AsyncBufReadExt, BufReader}, select, sync::mpsc};
use yazi_binding::Permit; use yazi_binding::Permit;
use yazi_proxy::{AppProxy, HIDER, NotifyProxy}; use yazi_proxy::{AppProxy, NotifyProxy};
use yazi_term::YIELD_TO_SUBPROCESS;
use super::{ProcessInBg, ProcessInBlock, ProcessInOrphan, ShellOpt}; use super::{ProcessInBg, ProcessInBlock, ProcessInOrphan, ShellOpt};
use crate::{TaskOp, TaskOps, process::{ProcessIn, ProcessOutBg, ProcessOutBlock, ProcessOutOrphan}}; use crate::{TaskOp, TaskOps, process::{ProcessIn, ProcessOutBg, ProcessOutBlock, ProcessOutOrphan}};
@ -20,7 +21,7 @@ impl Process {
} }
pub(crate) async fn block(&self, task: ProcessInBlock) -> Result<(), ProcessOutBlock> { pub(crate) async fn block(&self, task: ProcessInBlock) -> Result<(), ProcessOutBlock> {
let _permit = Permit::new(HIDER.acquire().await.unwrap(), AppProxy::resume()); let _permit = Permit::new(YIELD_TO_SUBPROCESS.acquire().await.unwrap(), AppProxy::resume());
AppProxy::stop().await; AppProxy::stop().await;
let (id, cmd) = (task.id, task.cmd.clone()); let (id, cmd) = (task.id, task.cmd.clone());

View file

@ -23,6 +23,7 @@ yazi-tty = { path = "../yazi-tty", version = "26.2.2" }
anyhow = { workspace = true } anyhow = { workspace = true }
crossterm = { workspace = true } crossterm = { workspace = true }
ratatui = { workspace = true } ratatui = { workspace = true }
tokio = { workspace = true }
[target."cfg(unix)".dependencies] [target."cfg(unix)".dependencies]
libc = { workspace = true } libc = { workspace = true }

View file

@ -1 +1,3 @@
yazi_macro::mod_flat!(option state term); yazi_macro::mod_flat!(option semaphore state term);
pub fn init() { YIELD_TO_SUBPROCESS.init(tokio::sync::Semaphore::new(1)); }

View file

@ -0,0 +1,4 @@
use tokio::sync::Semaphore;
use yazi_shared::RoCell;
pub static YIELD_TO_SUBPROCESS: RoCell<Semaphore> = RoCell::new();