diff --git a/Cargo.lock b/Cargo.lock index 1877823e..70366b42 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -159,9 +159,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.101" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "arbitrary" @@ -186,7 +186,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -473,9 +473,9 @@ checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" [[package]] name = "bumpalo" -version = "3.19.1" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "by_address" @@ -500,7 +500,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -600,9 +600,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.59" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5caf74d17c3aec5495110c34cc3f78644bfa89af6c8993ed4de2790e49b6499" +checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" dependencies = [ "clap_builder", "clap_derive", @@ -610,9 +610,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.59" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "370daa45065b80218950227371916a1633217ae42b2715b2287b606dcd618e24" +checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" dependencies = [ "anstream", "anstyle", @@ -658,7 +658,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -990,7 +990,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1034,7 +1034,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1048,7 +1048,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1061,7 +1061,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1072,7 +1072,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1083,7 +1083,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1094,7 +1094,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core 0.23.0", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1131,7 +1131,7 @@ checksum = "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1164,9 +1164,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", "serde_core", @@ -1190,7 +1190,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1200,7 +1200,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1222,7 +1222,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1365,7 +1365,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1391,7 +1391,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1494,7 +1494,7 @@ checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1660,7 +1660,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1862,7 +1862,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2085,7 +2085,7 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2127,7 +2127,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2163,9 +2163,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.85" +version = "0.3.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +checksum = "c7e709f3e3d22866f9c25b3aff01af289b18422cc8b4262fb19103ee80fe513d" dependencies = [ "once_cell", "wasm-bindgen", @@ -2537,7 +2537,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2681,7 +2681,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2937,7 +2937,7 @@ dependencies = [ "by_address", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -3056,7 +3056,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -3109,7 +3109,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -3257,7 +3257,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -3288,7 +3288,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -3316,7 +3316,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -3663,7 +3663,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4014,7 +4014,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4067,7 +4067,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4352,7 +4352,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4374,9 +4374,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.116" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -4510,7 +4510,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4521,7 +4521,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4618,7 +4618,7 @@ checksum = "2d2e76690929402faae40aebdda620a2c0e25dd6d3b9afe48867dfd95991f4bd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4646,7 +4646,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4675,9 +4675,9 @@ dependencies = [ [[package]] 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" -checksum = "d1dfefef6a142e93f346b64c160934eb13b5594b84ab378133ac6815cb2bd57f" +checksum = "c7614eaf19ad818347db24addfa201729cf2a9b6fdfd9eb0ab870fcacc606c0c" dependencies = [ "indexmap 2.13.0", "serde_core", @@ -4743,7 +4743,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5029,9 +5029,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.108" +version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" +checksum = "ec1adf1535672f5b7824f817792b1afd731d7e843d2d04ec8f27e8cb51edd8ac" dependencies = [ "cfg-if", "once_cell", @@ -5042,9 +5042,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.58" +version = "0.4.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" +checksum = "fe88540d1c934c4ec8e6db0afa536876c5441289d7f9f9123d4f065ac1250a6b" dependencies = [ "cfg-if", "futures-util", @@ -5056,9 +5056,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.108" +version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" +checksum = "19e638317c08b21663aed4d2b9a2091450548954695ff4efa75bff5fa546b3b1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5066,22 +5066,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.108" +version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" +checksum = "2c64760850114d03d5f65457e96fc988f11f01d38fbaa51b254e4ab5809102af" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.108" +version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" +checksum = "60eecd4fe26177cfa3339eb00b4a36445889ba3ad37080c2429879718e20ca41" dependencies = [ "unicode-ident", ] @@ -5122,9 +5122,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.85" +version = "0.3.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" +checksum = "9d6bb20ed2d9572df8584f6dc81d68a41a625cadc6f15999d649a70ce7e3597a" dependencies = [ "js-sys", "wasm-bindgen", @@ -5337,7 +5337,7 @@ checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5348,7 +5348,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5359,7 +5359,7 @@ checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5370,7 +5370,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5632,7 +5632,7 @@ dependencies = [ "heck", "indexmap 2.13.0", "prettyplease", - "syn 2.0.116", + "syn 2.0.117", "wasm-metadata", "wit-bindgen-core", "wit-component", @@ -5648,7 +5648,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "wit-bindgen-core", "wit-bindgen-rust", ] @@ -5849,7 +5849,7 @@ name = "yazi-codegen" version = "26.2.2" dependencies = [ "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6103,6 +6103,7 @@ dependencies = [ "yazi-proxy", "yazi-shared", "yazi-shim", + "yazi-term", "yazi-vfs", "yazi-widgets", ] @@ -6152,6 +6153,7 @@ dependencies = [ "yazi-plugin", "yazi-proxy", "yazi-shared", + "yazi-term", "yazi-vfs", ] @@ -6208,6 +6210,7 @@ dependencies = [ "crossterm 0.29.0", "libc", "ratatui", + "tokio", "yazi-config", "yazi-emulator", "yazi-macro", @@ -6308,7 +6311,7 @@ checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6328,7 +6331,7 @@ checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index e75801b4..3c5c1fd6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,10 +27,10 @@ debug = false [workspace.dependencies] ansi-to-tui = "8.0.1" -anyhow = "1.0.101" +anyhow = "1.0.102" base64 = "0.22.1" 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" crossterm = { version = "0.29.0", features = [ "event-stream" ] } dirs = "6.0.0" @@ -62,7 +62,7 @@ thiserror = "2.0.18" tokio = { version = "1.49.0", features = [ "full" ] } tokio-stream = "0.1.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" ] } twox-hash = { version = "2.1.2", default-features = false, features = [ "std", "random", "xxhash3_128" ] } typed-path = "0.12.3" diff --git a/assets/yazi.desktop b/assets/yazi.desktop index c894cda4..2008bab1 100644 --- a/assets/yazi.desktop +++ b/assets/yazi.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Name=Yazi +Name=Yazi File Manager Icon=yazi Comment=Blazing fast terminal file manager written in Rust, based on async I/O Terminal=true diff --git a/yazi-actor/src/mgr/bulk_rename.rs b/yazi-actor/src/mgr/bulk_rename.rs index db2c6a3b..856b3f46 100644 --- a/yazi-actor/src/mgr/bulk_rename.rs +++ b/yazi-actor/src/mgr/bulk_rename.rs @@ -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_macro::{err, succ}; 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_term::YIELD_TO_SUBPROCESS; use yazi_tty::TTY; use yazi_vfs::{VfsFile, maybe_exists, provider}; use yazi_watcher::WATCHER; @@ -66,7 +67,7 @@ impl Actor for BulkRename { ) .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; let new: Vec<_> = Local::regular(&tmp) diff --git a/yazi-actor/src/mgr/peek.rs b/yazi-actor/src/mgr/peek.rs index 3044c269..aa16fe95 100644 --- a/yazi-actor/src/mgr/peek.rs +++ b/yazi-actor/src/mgr/peek.rs @@ -1,7 +1,6 @@ use anyhow::Result; use yazi_macro::succ; use yazi_parser::mgr::PeekOpt; -use yazi_proxy::HIDER; use yazi_shared::data::Data; use crate::{Actor, Ctx}; @@ -17,7 +16,7 @@ impl Actor for Peek { let Some(hovered) = cx.hovered().cloned() else { succ!(cx.tab_mut().preview.reset()); }; - if HIDER.try_acquire().is_err() { + if cx.term.is_none() { succ!(cx.tab_mut().preview.reset_image()); } diff --git a/yazi-actor/src/tasks/inspect.rs b/yazi-actor/src/tasks/inspect.rs index 7c762bfb..ddfb8d65 100644 --- a/yazi-actor/src/tasks/inspect.rs +++ b/yazi-actor/src/tasks/inspect.rs @@ -7,8 +7,9 @@ use tokio::{io::{AsyncReadExt, stdin}, select, sync::mpsc, time}; use yazi_binding::Permit; use yazi_macro::succ; use yazi_parser::VoidOpt; -use yazi_proxy::{AppProxy, HIDER}; +use yazi_proxy::AppProxy; use yazi_shared::{data::Data, terminal_clear}; +use yazi_term::YIELD_TO_SUBPROCESS; use yazi_tty::TTY; use crate::{Actor, Ctx}; @@ -27,7 +28,7 @@ impl Actor for Inspect { }; 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 buffered = { diff --git a/yazi-codegen/Cargo.toml b/yazi-codegen/Cargo.toml index a3f5a323..252088de 100644 --- a/yazi-codegen/Cargo.toml +++ b/yazi-codegen/Cargo.toml @@ -16,5 +16,5 @@ proc-macro = true [dependencies] # External dependencies -syn = { version = "2.0.116", features = [ "full" ] } +syn = { version = "2.0.117", features = [ "full" ] } quote = "1.0.44" diff --git a/yazi-fm/src/app/render.rs b/yazi-fm/src/app/render.rs index 0db64eef..b2292063 100644 --- a/yazi-fm/src/app/render.rs +++ b/yazi-fm/src/app/render.rs @@ -5,6 +5,7 @@ use crossterm::{cursor::{MoveTo, SetCursorStyle, Show}, execute, queue, terminal use ratatui::{CompletedFrame, backend::{Backend, CrosstermBackend}, buffer::Buffer, layout::Position}; use yazi_actor::{Ctx, lives::Lives}; use yazi_binding::runtime_scope; +use yazi_config::LAYOUT; use yazi_macro::{act, succ}; use yazi_plugin::LUA; 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 collision = COLLISION.swap(false, Ordering::Relaxed); - let frame = term - .draw(|f| { - _ = Lives::scope(&self.core, || { - runtime_scope!(LUA, "root", Ok(f.render_widget(Root::new(&self.core), f.area()))) - }); - }) - .unwrap(); + let preview_rect = LAYOUT.get().preview; + let frame = term.draw(|f| { + _ = Lives::scope(&self.core, || { + runtime_scope!(LUA, "root", Ok(f.render_widget(Root::new(&self.core), f.area()))) + }); + })?; if COLLISION.load(Ordering::Relaxed) { Self::patch(frame); @@ -41,10 +41,11 @@ impl App { 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) { - let cx = &mut Ctx::active(&mut self.core, &mut self.term); - act!(mgr:peek, cx, true)?; + act!(mgr:peek, cx, true)?; // Reload preview if collision is resolved + } else if preview_rect != LAYOUT.get().preview { + act!(mgr:peek, cx)?; // Reload preview if layout changed } succ!(); } @@ -58,17 +59,15 @@ impl App { Self::routine(true, None); let _guard = scopeguard::guard(self.core.cursor(), |c| Self::routine(false, c)); - let frame = term - .draw_partial(|f| { - _ = Lives::scope(&self.core, || { - runtime_scope!(LUA, "root", { - f.render_widget(crate::tasks::Progress::new(&self.core), f.area()); - f.render_widget(crate::notify::Notify::new(&self.core), f.area()); - Ok(()) - }) - }); - }) - .unwrap(); + let frame = term.draw_partial(|f| { + _ = Lives::scope(&self.core, || { + runtime_scope!(LUA, "root", { + f.render_widget(crate::tasks::Progress::new(&self.core), f.area()); + f.render_widget(crate::notify::Notify::new(&self.core), f.area()); + Ok(()) + }) + }); + })?; if COLLISION.load(Ordering::Relaxed) { Self::patch(frame); diff --git a/yazi-fm/src/main.rs b/yazi-fm/src/main.rs index 2a6960be..6f1446c6 100644 --- a/yazi-fm/src/main.rs +++ b/yazi-fm/src/main.rs @@ -16,6 +16,8 @@ async fn main() -> anyhow::Result<()> { yazi_tty::init(); + yazi_term::init(); + yazi_fs::init(); yazi_config::init()?; @@ -26,8 +28,6 @@ async fn main() -> anyhow::Result<()> { yazi_boot::init(); - yazi_proxy::init(); - yazi_dds::init(); yazi_widgets::init(); diff --git a/yazi-fm/src/signals.rs b/yazi-fm/src/signals.rs index 3afaff4a..bcb2d35c 100644 --- a/yazi-fm/src/signals.rs +++ b/yazi-fm/src/signals.rs @@ -21,7 +21,8 @@ impl Signals { fn handle_sys(n: libc::c_int) -> bool { use libc::{SIGCONT, SIGHUP, SIGINT, SIGQUIT, SIGSTOP, SIGTERM, SIGTSTP}; use tracing::error; - use yazi_proxy::{AppProxy, HIDER}; + use yazi_proxy::AppProxy; + use yazi_term::YIELD_TO_SUBPROCESS; match n { 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 diff --git a/yazi-plugin/Cargo.toml b/yazi-plugin/Cargo.toml index 7be3aa62..c9079352 100644 --- a/yazi-plugin/Cargo.toml +++ b/yazi-plugin/Cargo.toml @@ -28,6 +28,7 @@ yazi-parser = { path = "../yazi-parser", version = "26.2.2" } yazi-proxy = { path = "../yazi-proxy", version = "26.2.2" } yazi-shared = { path = "../yazi-shared", 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-widgets = { path = "../yazi-widgets", version = "26.2.2" } diff --git a/yazi-plugin/preset/plugins/zoxide.lua b/yazi-plugin/preset/plugins/zoxide.lua index 2258eb1c..c017937f 100644 --- a/yazi-plugin/preset/plugins/zoxide.lua +++ b/yazi-plugin/preset/plugins/zoxide.lua @@ -13,16 +13,10 @@ function M:setup(opts) opts = opts or {} if opts.update_db then - ps.sub( - "cd", - function() - ya.emit("shell", { - cwd = fs.cwd(), - orphan = true, - "zoxide add " .. ya.quote(tostring(cx.active.current.cwd)):gsub("%%", "%%%%"), - }) - end - ) + ps.sub("cd", function() + local cwd = cx.active.current.cwd + ya.async(function() Command("zoxide"):arg({ "add", tostring(cwd) }):status() end) + end) end end diff --git a/yazi-plugin/src/elements/elements.rs b/yazi-plugin/src/elements/elements.rs index 335fb532..0a1c5793 100644 --- a/yazi-plugin/src/elements/elements.rs +++ b/yazi-plugin/src/elements/elements.rs @@ -5,8 +5,9 @@ use tracing::error; use unicode_width::{UnicodeWidthChar, UnicodeWidthStr}; use yazi_binding::{Composer, ComposerGet, ComposerSet, Permit, PermitRef, elements::{Line, Rect, Span}, runtime}; use yazi_config::LAYOUT; -use yazi_proxy::{AppProxy, HIDER}; +use yazi_proxy::AppProxy; use yazi_shared::replace_to_printable; +use yazi_term::YIELD_TO_SUBPROCESS; pub fn compose() -> Composer { fn get(lua: &Lua, key: &[u8]) -> mlua::Result { @@ -52,7 +53,7 @@ pub(super) fn hide(lua: &Lua) -> mlua::Result { 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; lua.set_named_registry_value("HIDE_PERMIT", Permit::new(permit, AppProxy::resume()))?; diff --git a/yazi-proxy/src/lib.rs b/yazi-proxy/src/lib.rs index c7e1b3f9..9b335a51 100644 --- a/yazi-proxy/src/lib.rs +++ b/yazi-proxy/src/lib.rs @@ -1,5 +1,3 @@ mod macros; -yazi_macro::mod_flat!(app cmp confirm input mgr notify pick semaphore tasks which); - -pub fn init() { crate::init_semaphore(); } +yazi_macro::mod_flat!(app cmp confirm input mgr notify pick tasks which); diff --git a/yazi-proxy/src/semaphore.rs b/yazi-proxy/src/semaphore.rs deleted file mode 100644 index d2274e04..00000000 --- a/yazi-proxy/src/semaphore.rs +++ /dev/null @@ -1,6 +0,0 @@ -use tokio::sync::Semaphore; -use yazi_shared::RoCell; - -pub static HIDER: RoCell = RoCell::new(); - -pub(super) fn init_semaphore() { HIDER.init(Semaphore::new(1)); } diff --git a/yazi-scheduler/Cargo.toml b/yazi-scheduler/Cargo.toml index 678d4154..a19c3022 100644 --- a/yazi-scheduler/Cargo.toml +++ b/yazi-scheduler/Cargo.toml @@ -21,6 +21,7 @@ yazi-parser = { path = "../yazi-parser", version = "26.2.2" } yazi-plugin = { path = "../yazi-plugin", version = "26.2.2" } yazi-proxy = { path = "../yazi-proxy", 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" } # External dependencies diff --git a/yazi-scheduler/src/process/process.rs b/yazi-scheduler/src/process/process.rs index 22797dab..57e71ae2 100644 --- a/yazi-scheduler/src/process/process.rs +++ b/yazi-scheduler/src/process/process.rs @@ -1,7 +1,8 @@ use anyhow::{Result, anyhow}; use tokio::{io::{AsyncBufReadExt, BufReader}, select, sync::mpsc}; 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 crate::{TaskOp, TaskOps, process::{ProcessIn, ProcessOutBg, ProcessOutBlock, ProcessOutOrphan}}; @@ -20,7 +21,7 @@ impl Process { } 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; let (id, cmd) = (task.id, task.cmd.clone()); diff --git a/yazi-term/Cargo.toml b/yazi-term/Cargo.toml index 7394c87d..2bd40cde 100644 --- a/yazi-term/Cargo.toml +++ b/yazi-term/Cargo.toml @@ -23,6 +23,7 @@ yazi-tty = { path = "../yazi-tty", version = "26.2.2" } anyhow = { workspace = true } crossterm = { workspace = true } ratatui = { workspace = true } +tokio = { workspace = true } [target."cfg(unix)".dependencies] libc = { workspace = true } diff --git a/yazi-term/src/lib.rs b/yazi-term/src/lib.rs index 909223ea..56110da7 100644 --- a/yazi-term/src/lib.rs +++ b/yazi-term/src/lib.rs @@ -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)); } diff --git a/yazi-term/src/semaphore.rs b/yazi-term/src/semaphore.rs new file mode 100644 index 00000000..55105513 --- /dev/null +++ b/yazi-term/src/semaphore.rs @@ -0,0 +1,4 @@ +use tokio::sync::Semaphore; +use yazi_shared::RoCell; + +pub static YIELD_TO_SUBPROCESS: RoCell = RoCell::new();