diff --git a/CHANGELOG.md b/CHANGELOG.md index e5a33417..0bd9de25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/): ## [Unreleased] +## [v25.12.29] + ### Added - Remote file management ([#3396]) @@ -973,6 +975,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/): [v25.4.8]: https://github.com/sxyazi/yazi/compare/v25.3.2...v25.4.8 [v25.5.28]: https://github.com/sxyazi/yazi/compare/v25.4.8...v25.5.28 [v25.5.31]: https://github.com/sxyazi/yazi/compare/v25.5.28...v25.5.31 +[v25.12.29]: https://github.com/sxyazi/yazi/compare/v25.5.31...v25.12.29 [#4]: https://github.com/sxyazi/yazi/pull/4 [#5]: https://github.com/sxyazi/yazi/pull/5 [#6]: https://github.com/sxyazi/yazi/pull/6 diff --git a/Cargo.lock b/Cargo.lock index 933ca3dd..a36d1b28 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -913,9 +913,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.2.0-rc.7" +version = "0.2.0-rc.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c52310bbf9ce8ad2f05bf8a9b0aa3585532884c31b4f191badfe7d7c7ed127" +checksum = "e6165b8029cdc3e765b74d3548f85999ee799d5124877ce45c2c85ca78e4d4aa" dependencies = [ "hybrid-array", ] @@ -1154,13 +1154,13 @@ dependencies = [ [[package]] name = "digest" -version = "0.11.0-rc.4" +version = "0.11.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea390c940e465846d64775e55e3115d5dc934acb953de6f6e6360bc232fe2bf7" +checksum = "ebf9423bafb058e4142194330c52273c343f8a5beb7176d052f0e73b17dd35b9" dependencies = [ "block-buffer 0.11.0", "const-oid 0.10.1", - "crypto-common 0.2.0-rc.7", + "crypto-common 0.2.0-rc.8", ] [[package]] @@ -1934,7 +1934,7 @@ checksum = "fe44f2bbd99fcb302e246e2d6bcf51aeda346d02a365f80296a07a8c711b6da6" dependencies = [ "argon2", "bcrypt-pbkdf", - "digest 0.11.0-rc.4", + "digest 0.11.0-rc.5", "ecdsa", "ed25519-dalek", "hex", @@ -1950,7 +1950,7 @@ dependencies = [ "sha1 0.11.0-rc.3", "sha2 0.10.9", "signature 2.2.0", - "signature 3.0.0-rc.5", + "signature 3.0.0-rc.6", "ssh-cipher", "ssh-encoding", "subtle", @@ -1994,9 +1994,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jobserver" @@ -2160,9 +2160,9 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ "bitflags 2.10.0", "libc", @@ -3064,9 +3064,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f59e70c4aef1e55797c2e8fd94a4f2a973fc972cfde0e0b05f683667b0cd39dd" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" [[package]] name = "powerfmt" @@ -3116,9 +3116,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "9695f8df41bb4f3d222c95a67532365f569318332d03d5f3f67f37b20e6ebdf0" dependencies = [ "unicode-ident", ] @@ -3557,12 +3557,12 @@ dependencies = [ "const-oid 0.10.1", "crypto-bigint 0.7.0-rc.10", "crypto-primes", - "digest 0.11.0-rc.4", + "digest 0.11.0-rc.5", "pkcs1", "pkcs8 0.11.0-rc.8", "rand_core 0.10.0-rc-3", "sha2 0.11.0-rc.3", - "signature 3.0.0-rc.5", + "signature 3.0.0-rc.6", "spki 0.8.0-rc.4", "subtle", "zeroize", @@ -3709,9 +3709,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62049b2877bf12821e8f9ad256ee38fdc31db7387ec2d3b3f403024de2034aea" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" [[package]] name = "safe_arch" @@ -3819,9 +3819,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.147" +version = "1.0.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6af14725505314343e673e9ecb7cd7e8a36aa9791eb936235a3567cc31447ae4" +checksum = "3084b546a1dd6289475996f182a22aba973866ea8e8b02c51d9f46b1336a22da" dependencies = [ "itoa", "memchr", @@ -3868,7 +3868,7 @@ checksum = "aa1ae819b9870cadc959a052363de870944a1646932d274a4e270f64bf79e5ef" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.11.0-rc.4", + "digest 0.11.0-rc.5", ] [[package]] @@ -3890,7 +3890,7 @@ checksum = "19d43dc0354d88b791216bb5c1bfbb60c0814460cc653ae0ebd71f286d0bd927" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.11.0-rc.4", + "digest 0.11.0-rc.5", ] [[package]] @@ -3963,11 +3963,11 @@ dependencies = [ [[package]] name = "signature" -version = "3.0.0-rc.5" +version = "3.0.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0251c9d6468f4ba853b6352b190fb7c1e405087779917c238445eb03993826" +checksum = "597a96996ccff7dfa16f052bd995b4cecc72af22c35138738dc029f0ead6608d" dependencies = [ - "digest 0.11.0-rc.4", + "digest 0.11.0-rc.5", "rand_core 0.10.0-rc-3", ] @@ -5320,7 +5320,7 @@ checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448" [[package]] name = "yazi-actor" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "crossterm 0.29.0", @@ -5353,7 +5353,7 @@ dependencies = [ [[package]] name = "yazi-adapter" -version = "25.9.15" +version = "25.12.29" dependencies = [ "ansi-to-tui", "anyhow", @@ -5375,7 +5375,7 @@ dependencies = [ [[package]] name = "yazi-binding" -version = "25.9.15" +version = "25.12.29" dependencies = [ "ansi-to-tui", "futures", @@ -5396,7 +5396,7 @@ dependencies = [ [[package]] name = "yazi-boot" -version = "25.9.15" +version = "25.12.29" dependencies = [ "clap", "clap_complete", @@ -5416,14 +5416,14 @@ dependencies = [ [[package]] name = "yazi-build" -version = "25.9.15" +version = "25.12.29" dependencies = [ "yazi-term", ] [[package]] name = "yazi-cli" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "clap", @@ -5446,7 +5446,7 @@ dependencies = [ [[package]] name = "yazi-codegen" -version = "25.9.15" +version = "25.12.29" dependencies = [ "quote", "syn 2.0.111", @@ -5454,7 +5454,7 @@ dependencies = [ [[package]] name = "yazi-config" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "bitflags 2.10.0", @@ -5478,7 +5478,7 @@ dependencies = [ [[package]] name = "yazi-core" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "crossterm 0.29.0", @@ -5508,7 +5508,7 @@ dependencies = [ [[package]] name = "yazi-dds" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "hashbrown", @@ -5533,7 +5533,7 @@ dependencies = [ [[package]] name = "yazi-ffi" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "core-foundation-sys", @@ -5544,7 +5544,7 @@ dependencies = [ [[package]] name = "yazi-fm" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "better-panic", @@ -5584,7 +5584,7 @@ dependencies = [ [[package]] name = "yazi-fs" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "arc-swap", @@ -5615,15 +5615,15 @@ dependencies = [ [[package]] name = "yazi-macro" -version = "25.9.15" +version = "25.12.29" [[package]] name = "yazi-packing" -version = "25.9.15" +version = "25.12.29" [[package]] name = "yazi-parser" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "bitflags 2.10.0", @@ -5644,7 +5644,7 @@ dependencies = [ [[package]] name = "yazi-plugin" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "crossterm 0.29.0", @@ -5689,7 +5689,7 @@ checksum = "33232d9116df6415ddfcdf72701b1b7439ce87f240a14723e8dd5d17e7ed5f98" [[package]] name = "yazi-proxy" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "tokio", @@ -5701,7 +5701,7 @@ dependencies = [ [[package]] name = "yazi-scheduler" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "async-priority-channel", @@ -5730,7 +5730,7 @@ dependencies = [ [[package]] name = "yazi-sftp" -version = "0.1.0" +version = "25.12.29" dependencies = [ "bitflags 2.10.0", "parking_lot", @@ -5742,7 +5742,7 @@ dependencies = [ [[package]] name = "yazi-shared" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "crossterm 0.29.0", @@ -5765,7 +5765,7 @@ dependencies = [ [[package]] name = "yazi-shim" -version = "25.9.15" +version = "25.12.29" dependencies = [ "twox-hash", "yazi-macro", @@ -5773,7 +5773,7 @@ dependencies = [ [[package]] name = "yazi-term" -version = "25.9.15" +version = "25.12.29" dependencies = [ "crossterm 0.29.0", "libc", @@ -5786,7 +5786,7 @@ dependencies = [ [[package]] name = "yazi-vfs" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "deadpool", @@ -5806,7 +5806,7 @@ dependencies = [ [[package]] name = "yazi-watcher" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "hashbrown", @@ -5827,7 +5827,7 @@ dependencies = [ [[package]] name = "yazi-widgets" -version = "25.9.15" +version = "25.12.29" dependencies = [ "anyhow", "base64", @@ -5888,9 +5888,9 @@ dependencies = [ [[package]] name = "zmij" -version = "0.1.10" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4af59da1029247450b54ba43e0b62c8e376582464bbe5504dd525fe521e7e8fd" +checksum = "0f4a4e8e9dc5c62d159f04fcdbe07f4c3fb710415aab4754bf11505501e3251d" [[package]] name = "zune-core" diff --git a/Cargo.toml b/Cargo.toml index 9a582034..e564fbac 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -53,7 +53,7 @@ regex = "1.12.2" russh = { version = "0.56.0", default-features = false, features = [ "ring", "rsa" ] } scopeguard = "1.2.0" serde = { version = "1.0.228", features = [ "derive" ] } -serde_json = "1.0.147" +serde_json = "1.0.148" syntect = { version = "5.3.0", default-features = false, features = [ "parsing", "plist-load", "regex-onig" ] } thiserror = "2.0.17" tokio = { version = "1.48.0", features = [ "full" ] } diff --git a/README.md b/README.md index 96f0ef51..2d6dfff5 100644 --- a/README.md +++ b/README.md @@ -23,13 +23,14 @@ Yazi (means "duck") is a terminal file manager written in Rust, based on non-blo - πŸ–ΌοΈ **Built-in Support for Multiple Image Protocols**: Also integrated with Überzug++ and Chafa, covering almost all terminals. - 🌟 **Built-in Code Highlighting and Image Decoding**: Combined with the pre-loading mechanism, greatly accelerates image and normal file loading. - πŸ”Œ **Concurrent Plugin System**: UI plugins (rewriting most of the UI), functional plugins, custom previewer/preloader/spotter/fetcher; Just some pieces of Lua. +- ☁️ **Virtual Filesystem**: Remote file management, custom search engines. - πŸ“‘ **Data Distribution Service**: Built on a client-server architecture (no additional server process required), integrated with a Lua-based publish-subscribe model, achieving cross-instance communication and state persistence. - πŸ“¦ **Package Manager**: Install plugins and themes with one command, keeping them up-to-date, or pin them to a specific version. - 🧰 Integration with ripgrep, fd, fzf, zoxide - πŸ’« Vim-like input/pick/confirm/which/notify component, auto-completion for cd paths - 🏷️ Multi-Tab Support, Cross-directory selection, Scrollable Preview (for videos, PDFs, archives, code, directories, etc.) - πŸ”„ Bulk Renaming, Archive Extraction, Visual Mode, File Chooser, [Git Integration](https://github.com/yazi-rs/plugins/tree/main/git.yazi), [Mount Manager](https://github.com/yazi-rs/plugins/tree/main/mount.yazi) -- 🎨 Theme System, Mouse Support, Trash Bin, Custom Layouts, Virtual Filesystem, CSI u, OSC 52 +- 🎨 Theme System, Mouse Support, Trash Bin, Custom Layouts, CSI u, OSC 52 - ... and more! https://github.com/sxyazi/yazi/assets/17523360/92ff23fa-0cd5-4f04-b387-894c12265cc7 diff --git a/yazi-actor/Cargo.toml b/yazi-actor/Cargo.toml index 42af4c39..71830932 100644 --- a/yazi-actor/Cargo.toml +++ b/yazi-actor/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-actor" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -16,22 +16,22 @@ default = [ "vendored-lua" ] vendored-lua = [ "mlua/vendored" ] [dependencies] -yazi-binding = { path = "../yazi-binding", version = "25.9.15" } -yazi-boot = { path = "../yazi-boot", version = "25.9.15" } -yazi-config = { path = "../yazi-config", version = "25.9.15" } -yazi-core = { path = "../yazi-core", version = "25.9.15" } -yazi-dds = { path = "../yazi-dds", version = "25.9.15" } -yazi-fs = { path = "../yazi-fs", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-parser = { path = "../yazi-parser", version = "25.9.15" } -yazi-plugin = { path = "../yazi-plugin", version = "25.9.15" } -yazi-proxy = { path = "../yazi-proxy", version = "25.9.15" } -yazi-scheduler = { path = "../yazi-scheduler", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } -yazi-term = { path = "../yazi-term", version = "25.9.15" } -yazi-vfs = { path = "../yazi-vfs", version = "25.9.15" } -yazi-watcher = { path = "../yazi-watcher", version = "25.9.15" } -yazi-widgets = { path = "../yazi-widgets", version = "25.9.15" } +yazi-binding = { path = "../yazi-binding", version = "25.12.29" } +yazi-boot = { path = "../yazi-boot", version = "25.12.29" } +yazi-config = { path = "../yazi-config", version = "25.12.29" } +yazi-core = { path = "../yazi-core", version = "25.12.29" } +yazi-dds = { path = "../yazi-dds", version = "25.12.29" } +yazi-fs = { path = "../yazi-fs", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-parser = { path = "../yazi-parser", version = "25.12.29" } +yazi-plugin = { path = "../yazi-plugin", version = "25.12.29" } +yazi-proxy = { path = "../yazi-proxy", version = "25.12.29" } +yazi-scheduler = { path = "../yazi-scheduler", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } +yazi-term = { path = "../yazi-term", version = "25.12.29" } +yazi-vfs = { path = "../yazi-vfs", version = "25.12.29" } +yazi-watcher = { path = "../yazi-watcher", version = "25.12.29" } +yazi-widgets = { path = "../yazi-widgets", version = "25.12.29" } # External dependencies anyhow = { workspace = true } diff --git a/yazi-actor/src/mgr/reveal.rs b/yazi-actor/src/mgr/reveal.rs index 590d0924..7da8ea1b 100644 --- a/yazi-actor/src/mgr/reveal.rs +++ b/yazi-actor/src/mgr/reveal.rs @@ -19,7 +19,7 @@ impl Actor for Reveal { // Cd to the parent directory act!(mgr:cd, cx, (parent, opt.source))?; - // Try to hover on the child file + // Try to hover over the child file let tab = cx.tab_mut(); render!(tab.current.hover(child)); @@ -30,7 +30,7 @@ impl Actor for Reveal { tab.current.update_pub(tab.id, op); } - // Now, we can safely hover on the target + // Now, we can safely hover over the target act!(mgr:hover, cx, Some(child.into()))?; act!(mgr:peek, cx)?; diff --git a/yazi-adapter/Cargo.toml b/yazi-adapter/Cargo.toml index b05d654a..af045c6e 100644 --- a/yazi-adapter/Cargo.toml +++ b/yazi-adapter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-adapter" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -12,11 +12,11 @@ repository = "https://github.com/sxyazi/yazi" workspace = true [dependencies] -yazi-config = { path = "../yazi-config", version = "25.9.15" } -yazi-fs = { path = "../yazi-fs", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } -yazi-term = { path = "../yazi-term", version = "25.9.15" } +yazi-config = { path = "../yazi-config", version = "25.12.29" } +yazi-fs = { path = "../yazi-fs", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } +yazi-term = { path = "../yazi-term", version = "25.12.29" } # External dependencies ansi-to-tui = { workspace = true } diff --git a/yazi-binding/Cargo.toml b/yazi-binding/Cargo.toml index 622720c2..bcb2fa1f 100644 --- a/yazi-binding/Cargo.toml +++ b/yazi-binding/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-binding" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -16,11 +16,11 @@ default = [ "vendored-lua" ] vendored-lua = [ "mlua/vendored" ] [dependencies] -yazi-adapter = { path = "../yazi-adapter", version = "25.9.15" } -yazi-config = { path = "../yazi-config", version = "25.9.15" } -yazi-fs = { path = "../yazi-fs", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } +yazi-adapter = { path = "../yazi-adapter", version = "25.12.29" } +yazi-config = { path = "../yazi-config", version = "25.12.29" } +yazi-fs = { path = "../yazi-fs", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } # External dependencies ansi-to-tui = { workspace = true } diff --git a/yazi-boot/Cargo.toml b/yazi-boot/Cargo.toml index 96cd9b92..1ffda475 100644 --- a/yazi-boot/Cargo.toml +++ b/yazi-boot/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-boot" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -12,12 +12,12 @@ repository = "https://github.com/sxyazi/yazi" workspace = true [dependencies] -yazi-adapter = { path = "../yazi-adapter", version = "25.9.15" } -yazi-config = { path = "../yazi-config", version = "25.9.15" } -yazi-fs = { path = "../yazi-fs", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } -yazi-vfs = { path = "../yazi-vfs", version = "25.9.15" } +yazi-adapter = { path = "../yazi-adapter", version = "25.12.29" } +yazi-config = { path = "../yazi-config", version = "25.12.29" } +yazi-fs = { path = "../yazi-fs", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } +yazi-vfs = { path = "../yazi-vfs", version = "25.12.29" } # External dependencies clap = { workspace = true } @@ -26,7 +26,7 @@ hashbrown = { workspace = true } regex = { workspace = true } [build-dependencies] -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } # External dependencies clap = { workspace = true } diff --git a/yazi-build/Cargo.toml b/yazi-build/Cargo.toml index 04bc8e69..200e9a7e 100644 --- a/yazi-build/Cargo.toml +++ b/yazi-build/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-build" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -18,7 +18,7 @@ panic = "abort" strip = true [build-dependencies] -yazi-term = { path = "../yazi-term", version = "25.9.15" } +yazi-term = { path = "../yazi-term", version = "25.12.29" } [[bin]] name = "yazi-build" diff --git a/yazi-cli/Cargo.toml b/yazi-cli/Cargo.toml index b62fa549..ac72a8b1 100644 --- a/yazi-cli/Cargo.toml +++ b/yazi-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-cli" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -22,11 +22,11 @@ inherits = "release" panic = "unwind" [dependencies] -yazi-boot = { path = "../yazi-boot", version = "25.9.15" } -yazi-dds = { path = "../yazi-dds", version = "25.9.15" } -yazi-fs = { path = "../yazi-fs", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } +yazi-boot = { path = "../yazi-boot", version = "25.12.29" } +yazi-dds = { path = "../yazi-dds", version = "25.12.29" } +yazi-fs = { path = "../yazi-fs", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } # External dependencies anyhow = { workspace = true } @@ -39,7 +39,7 @@ toml = { workspace = true } twox-hash = { workspace = true } [build-dependencies] -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } # External build dependencies anyhow = { workspace = true } diff --git a/yazi-codegen/Cargo.toml b/yazi-codegen/Cargo.toml index 08af4e41..ffc132d0 100644 --- a/yazi-codegen/Cargo.toml +++ b/yazi-codegen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-codegen" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] diff --git a/yazi-config/Cargo.toml b/yazi-config/Cargo.toml index 7736f0dc..b721f909 100644 --- a/yazi-config/Cargo.toml +++ b/yazi-config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-config" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -12,11 +12,11 @@ repository = "https://github.com/sxyazi/yazi" workspace = true [dependencies] -yazi-codegen = { path = "../yazi-codegen", version = "25.9.15" } -yazi-fs = { path = "../yazi-fs", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } -yazi-term = { path = "../yazi-term", version = "25.9.15" } +yazi-codegen = { path = "../yazi-codegen", version = "25.12.29" } +yazi-fs = { path = "../yazi-fs", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } +yazi-term = { path = "../yazi-term", version = "25.12.29" } # External dependencies anyhow = { workspace = true } diff --git a/yazi-config/preset/keymap-default.toml b/yazi-config/preset/keymap-default.toml index 7342a93c..96eadc9d 100644 --- a/yazi-config/preset/keymap-default.toml +++ b/yazi-config/preset/keymap-default.toml @@ -43,9 +43,9 @@ keymap = [ { on = "L", run = "forward", desc = "Forward to next directory" }, # Toggle - { on = "", run = [ "toggle", "arrow next" ], desc = "Toggle the current selection state" }, - { on = "", run = "toggle_all --state=on", desc = "Select all files" }, - { on = "", run = "toggle_all", desc = "Invert selection of all files" }, + { on = "", run = [ "toggle", "arrow 1" ], desc = "Toggle the current selection state" }, + { on = "", run = "toggle_all --state=on", desc = "Select all files" }, + { on = "", run = "toggle_all", desc = "Invert selection of all files" }, # Visual mode { on = "v", run = "visual_mode", desc = "Enter visual mode (selection mode)" }, diff --git a/yazi-config/src/mgr/mgr.rs b/yazi-config/src/mgr/mgr.rs index 3f176ce7..735a161d 100644 --- a/yazi-config/src/mgr/mgr.rs +++ b/yazi-config/src/mgr/mgr.rs @@ -2,7 +2,7 @@ use anyhow::{Result, bail}; use serde::Deserialize; use yazi_codegen::DeserializeOver2; use yazi_fs::{CWD, SortBy}; -use yazi_shared::{SyncCell, url::{UrlBuf, UrlLike}}; +use yazi_shared::{SyncCell, url::UrlLike}; use super::{MgrRatio, MouseEvents}; @@ -32,8 +32,8 @@ impl Mgr { return None; } - let home = UrlBuf::from(dirs::home_dir().unwrap_or_default()); - let cwd = if let Ok(p) = CWD.load().try_strip_prefix(&home) { + let home = dirs::home_dir().unwrap_or_default(); + let cwd = if let Ok(p) = CWD.load().try_strip_prefix(home) { format!("~{}{}", std::path::MAIN_SEPARATOR, p.display()) } else { format!("{}", CWD.load().display()) diff --git a/yazi-core/Cargo.toml b/yazi-core/Cargo.toml index 4a12ce0e..08bef453 100644 --- a/yazi-core/Cargo.toml +++ b/yazi-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-core" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -12,19 +12,19 @@ repository = "https://github.com/sxyazi/yazi" workspace = true [dependencies] -yazi-adapter = { path = "../yazi-adapter", version = "25.9.15" } -yazi-config = { path = "../yazi-config", version = "25.9.15" } -yazi-dds = { path = "../yazi-dds", version = "25.9.15" } -yazi-fs = { path = "../yazi-fs", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-parser = { path = "../yazi-parser", version = "25.9.15" } -yazi-plugin = { path = "../yazi-plugin", version = "25.9.15" } -yazi-proxy = { path = "../yazi-proxy", version = "25.9.15" } -yazi-scheduler = { path = "../yazi-scheduler", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } -yazi-vfs = { path = "../yazi-vfs", version = "25.9.15" } -yazi-watcher = { path = "../yazi-watcher", version = "25.9.15" } -yazi-widgets = { path = "../yazi-widgets", version = "25.9.15" } +yazi-adapter = { path = "../yazi-adapter", version = "25.12.29" } +yazi-config = { path = "../yazi-config", version = "25.12.29" } +yazi-dds = { path = "../yazi-dds", version = "25.12.29" } +yazi-fs = { path = "../yazi-fs", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-parser = { path = "../yazi-parser", version = "25.12.29" } +yazi-plugin = { path = "../yazi-plugin", version = "25.12.29" } +yazi-proxy = { path = "../yazi-proxy", version = "25.12.29" } +yazi-scheduler = { path = "../yazi-scheduler", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } +yazi-vfs = { path = "../yazi-vfs", version = "25.12.29" } +yazi-watcher = { path = "../yazi-watcher", version = "25.12.29" } +yazi-widgets = { path = "../yazi-widgets", version = "25.12.29" } # External dependencies anyhow = { workspace = true } diff --git a/yazi-dds/Cargo.toml b/yazi-dds/Cargo.toml index 7878cc8d..0262ba94 100644 --- a/yazi-dds/Cargo.toml +++ b/yazi-dds/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-dds" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -16,12 +16,12 @@ default = [ "vendored-lua" ] vendored-lua = [ "mlua/vendored" ] [dependencies] -yazi-binding = { path = "../yazi-binding", version = "25.9.15" } -yazi-boot = { path = "../yazi-boot", version = "25.9.15" } -yazi-fs = { path = "../yazi-fs", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-parser = { path = "../yazi-parser", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } +yazi-binding = { path = "../yazi-binding", version = "25.12.29" } +yazi-boot = { path = "../yazi-boot", version = "25.12.29" } +yazi-fs = { path = "../yazi-fs", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-parser = { path = "../yazi-parser", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } # External dependencies anyhow = { workspace = true } diff --git a/yazi-ffi/Cargo.toml b/yazi-ffi/Cargo.toml index 40ae271e..23d80428 100644 --- a/yazi-ffi/Cargo.toml +++ b/yazi-ffi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-ffi" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -12,7 +12,7 @@ repository = "https://github.com/sxyazi/yazi" workspace = true [dependencies] -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } # External dependencies anyhow = { workspace = true } diff --git a/yazi-fm/Cargo.toml b/yazi-fm/Cargo.toml index 3968ab5a..bfa2f30b 100644 --- a/yazi-fm/Cargo.toml +++ b/yazi-fm/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-fm" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -26,23 +26,23 @@ default = [ "vendored-lua" ] vendored-lua = [ "mlua/vendored" ] [dependencies] -yazi-actor = { path = "../yazi-actor", version = "25.9.15" } -yazi-adapter = { path = "../yazi-adapter", version = "25.9.15" } -yazi-binding = { path = "../yazi-binding", version = "25.9.15" } -yazi-boot = { path = "../yazi-boot", version = "25.9.15" } -yazi-config = { path = "../yazi-config", version = "25.9.15" } -yazi-core = { path = "../yazi-core", version = "25.9.15" } -yazi-dds = { path = "../yazi-dds", version = "25.9.15" } -yazi-fs = { path = "../yazi-fs", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-parser = { path = "../yazi-parser", version = "25.9.15" } -yazi-plugin = { path = "../yazi-plugin", version = "25.9.15" } -yazi-proxy = { path = "../yazi-proxy", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } -yazi-term = { path = "../yazi-term", version = "25.9.15" } -yazi-vfs = { path = "../yazi-vfs", version = "25.9.15" } -yazi-watcher = { path = "../yazi-watcher", version = "25.9.15" } -yazi-widgets = { path = "../yazi-widgets", version = "25.9.15" } +yazi-actor = { path = "../yazi-actor", version = "25.12.29" } +yazi-adapter = { path = "../yazi-adapter", version = "25.12.29" } +yazi-binding = { path = "../yazi-binding", version = "25.12.29" } +yazi-boot = { path = "../yazi-boot", version = "25.12.29" } +yazi-config = { path = "../yazi-config", version = "25.12.29" } +yazi-core = { path = "../yazi-core", version = "25.12.29" } +yazi-dds = { path = "../yazi-dds", version = "25.12.29" } +yazi-fs = { path = "../yazi-fs", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-parser = { path = "../yazi-parser", version = "25.12.29" } +yazi-plugin = { path = "../yazi-plugin", version = "25.12.29" } +yazi-proxy = { path = "../yazi-proxy", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } +yazi-term = { path = "../yazi-term", version = "25.12.29" } +yazi-vfs = { path = "../yazi-vfs", version = "25.12.29" } +yazi-watcher = { path = "../yazi-watcher", version = "25.12.29" } +yazi-widgets = { path = "../yazi-widgets", version = "25.12.29" } # External dependencies anyhow = { workspace = true } diff --git a/yazi-fs/Cargo.toml b/yazi-fs/Cargo.toml index 9222758c..d2b03e34 100644 --- a/yazi-fs/Cargo.toml +++ b/yazi-fs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-fs" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -12,10 +12,10 @@ repository = "https://github.com/sxyazi/yazi" workspace = true [dependencies] -yazi-ffi = { path = "../yazi-ffi", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } -yazi-shim = { path = "../yazi-shim", version = "25.9.15" } +yazi-ffi = { path = "../yazi-ffi", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } +yazi-shim = { path = "../yazi-shim", version = "25.12.29" } # External dependencies anyhow = { workspace = true } diff --git a/yazi-fs/src/provider/local/casefold.rs b/yazi-fs/src/provider/local/casefold.rs index dc576e34..7684b603 100644 --- a/yazi-fs/src/provider/local/casefold.rs +++ b/yazi-fs/src/provider/local/casefold.rs @@ -47,6 +47,7 @@ fn casefold_impl(path: PathBuf) -> io::Result { } #[cfg(any(target_os = "linux", target_os = "android"))] +#[allow(irrefutable_let_patterns)] fn casefold_impl(path: PathBuf) -> io::Result { use std::{ffi::{CString, OsStr, OsString}, fs::File, os::{fd::{AsRawFd, FromRawFd}, unix::{ffi::{OsStrExt, OsStringExt}, fs::MetadataExt}}}; @@ -54,7 +55,7 @@ fn casefold_impl(path: PathBuf) -> io::Result { let cstr = CString::new(path.into_os_string().into_vec())?; let path = Path::new(OsStr::from_bytes(cstr.as_bytes())); - let Some(parent) = path.parent() else { + let Some((parent, name)) = path.parent().zip(path.file_name()) else { return Ok(PathBuf::from(OsString::from_vec(cstr.into_bytes()))); }; @@ -64,34 +65,49 @@ fn casefold_impl(path: PathBuf) -> io::Result { }; // Fast path: if the `/proc/self/fd/N` matches - let oss = path.as_os_str(); if let Ok(p) = std::fs::read_link(format!("/proc/self/fd/{}", file.as_raw_fd())) - && let Some(b) = p.as_os_str().as_bytes().get(..oss.len()) - && b.eq_ignore_ascii_case(oss.as_bytes()) + && let path = path.as_os_str() + && let Some(b) = p.as_os_str().as_bytes().get(..path.len()) + && b.eq_ignore_ascii_case(path.as_bytes()) { let mut b = p.into_os_string().into_vec(); - b.truncate(oss.len()); + b.truncate(path.len()); return Ok(PathBuf::from(OsString::from_vec(b))); } - // Fallback: scan the directory for matching inodes + // Fast path: if the file isn't a symlink let meta = file.metadata()?; - let mut entries: Vec<_> = std::fs::read_dir(parent)? - .filter_map(Result::ok) - .filter_map(|e| e.metadata().ok().map(|m| (e, m))) - .filter(|(_, m)| m.dev() == meta.dev() && m.ino() == meta.ino()) - .map(|(e, _)| e.path()) - .collect(); + if !meta.is_symlink() + && let Some(n) = path.canonicalize()?.file_name() + { + return Ok(parent.join(n)); + } - if entries.len() == 1 { + // Fallback: scan the directory for matching inodes + let mut names = vec![]; + for entry in std::fs::read_dir(parent)? { + let entry = entry?; + let n = entry.file_name(); // TODO: use `file_name_ref()` when stabilized + + if n == name { + return Ok(PathBuf::from(OsString::from_vec(cstr.into_bytes()))); + } else if let m = entry.metadata()? + && m.ino() == meta.ino() + && m.dev() == meta.dev() + { + names.push(n); + } + } + + if names.len() == 1 { // No hardlink that shares the same inode - Ok(entries.remove(0)) - } else if let Some(i) = entries.iter().position(|p| p == path) { - // Exact match - Ok(entries.swap_remove(i)) - } else if let Some(i) = entries.iter().position(|p| p.as_os_str().eq_ignore_ascii_case(oss)) { + Ok(parent.join(&names[0])) + } else if let mut it = names.iter().enumerate().filter(|&(_, n)| n.eq_ignore_ascii_case(name)) + && let Some((i, _)) = it.next() + && it.next().is_none() + { // Case-insensitive match - Ok(entries.swap_remove(i)) + Ok(parent.join(&names[i])) } else { Err(io::Error::from(io::ErrorKind::NotFound)) } diff --git a/yazi-macro/Cargo.toml b/yazi-macro/Cargo.toml index 2b803c84..32f9d1e4 100644 --- a/yazi-macro/Cargo.toml +++ b/yazi-macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-macro" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] diff --git a/yazi-packing/Cargo.toml b/yazi-packing/Cargo.toml index 38fea9c8..d259b799 100644 --- a/yazi-packing/Cargo.toml +++ b/yazi-packing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-packing" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] diff --git a/yazi-parser/Cargo.toml b/yazi-parser/Cargo.toml index 48fdb2c1..a3147d2a 100644 --- a/yazi-parser/Cargo.toml +++ b/yazi-parser/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-parser" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -16,13 +16,13 @@ default = [ "vendored-lua" ] vendored-lua = [ "mlua/vendored" ] [dependencies] -yazi-binding = { path = "../yazi-binding", version = "25.9.15" } -yazi-boot = { path = "../yazi-boot", version = "25.9.15" } -yazi-config = { path = "../yazi-config", version = "25.9.15" } -yazi-fs = { path = "../yazi-fs", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } -yazi-vfs = { path = "../yazi-vfs", version = "25.9.15" } +yazi-binding = { path = "../yazi-binding", version = "25.12.29" } +yazi-boot = { path = "../yazi-boot", version = "25.12.29" } +yazi-config = { path = "../yazi-config", version = "25.12.29" } +yazi-fs = { path = "../yazi-fs", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } +yazi-vfs = { path = "../yazi-vfs", version = "25.12.29" } # External dependencies anyhow = { workspace = true } diff --git a/yazi-plugin/Cargo.toml b/yazi-plugin/Cargo.toml index b573428c..ef0553c4 100644 --- a/yazi-plugin/Cargo.toml +++ b/yazi-plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-plugin" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -16,19 +16,19 @@ default = [ "vendored-lua" ] vendored-lua = [ "mlua/vendored" ] [dependencies] -yazi-adapter = { path = "../yazi-adapter", version = "25.9.15" } -yazi-binding = { path = "../yazi-binding", version = "25.9.15" } -yazi-boot = { path = "../yazi-boot", version = "25.9.15" } -yazi-config = { path = "../yazi-config", version = "25.9.15" } -yazi-dds = { path = "../yazi-dds", version = "25.9.15" } -yazi-fs = { path = "../yazi-fs", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-parser = { path = "../yazi-parser", version = "25.9.15" } -yazi-proxy = { path = "../yazi-proxy", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } -yazi-shim = { path = "../yazi-shim", version = "25.9.15" } -yazi-vfs = { path = "../yazi-vfs", version = "25.9.15" } -yazi-widgets = { path = "../yazi-widgets", version = "25.9.15" } +yazi-adapter = { path = "../yazi-adapter", version = "25.12.29" } +yazi-binding = { path = "../yazi-binding", version = "25.12.29" } +yazi-boot = { path = "../yazi-boot", version = "25.12.29" } +yazi-config = { path = "../yazi-config", version = "25.12.29" } +yazi-dds = { path = "../yazi-dds", version = "25.12.29" } +yazi-fs = { path = "../yazi-fs", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-parser = { path = "../yazi-parser", version = "25.12.29" } +yazi-proxy = { path = "../yazi-proxy", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } +yazi-shim = { path = "../yazi-shim", version = "25.12.29" } +yazi-vfs = { path = "../yazi-vfs", version = "25.12.29" } +yazi-widgets = { path = "../yazi-widgets", version = "25.12.29" } # External dependencies anyhow = { workspace = true } diff --git a/yazi-plugin/preset/components/progress.lua b/yazi-plugin/preset/components/progress.lua index cb8bd1d9..5f76b71f 100644 --- a/yazi-plugin/preset/components/progress.lua +++ b/yazi-plugin/preset/components/progress.lua @@ -42,5 +42,8 @@ function Progress:redraw() end label = label .. string.format("%d left", summary.total - summary.success) - return gauge:percent(percent):label(ui.Span(label):style(th.status.progress_label)) + return { + ui.Clear(self._area), + gauge:percent(percent):label(ui.Span(label):style(th.status.progress_label)), + } end diff --git a/yazi-proxy/Cargo.toml b/yazi-proxy/Cargo.toml index a2ec00ac..00b684c1 100644 --- a/yazi-proxy/Cargo.toml +++ b/yazi-proxy/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-proxy" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -12,10 +12,10 @@ repository = "https://github.com/sxyazi/yazi" workspace = true [dependencies] -yazi-config = { path = "../yazi-config", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-parser = { path = "../yazi-parser", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } +yazi-config = { path = "../yazi-config", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-parser = { path = "../yazi-parser", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } # External dependencies anyhow = { workspace = true } diff --git a/yazi-scheduler/Cargo.toml b/yazi-scheduler/Cargo.toml index 01ae27d0..3279d3d7 100644 --- a/yazi-scheduler/Cargo.toml +++ b/yazi-scheduler/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-scheduler" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -12,16 +12,16 @@ repository = "https://github.com/sxyazi/yazi" workspace = true [dependencies] -yazi-binding = { path = "../yazi-binding", version = "25.9.15" } -yazi-config = { path = "../yazi-config", version = "25.9.15" } -yazi-dds = { path = "../yazi-dds", version = "25.9.15" } -yazi-fs = { path = "../yazi-fs", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-parser = { path = "../yazi-parser", version = "25.9.15" } -yazi-plugin = { path = "../yazi-plugin", version = "25.9.15" } -yazi-proxy = { path = "../yazi-proxy", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } -yazi-vfs = { path = "../yazi-vfs", version = "25.9.15" } +yazi-binding = { path = "../yazi-binding", version = "25.12.29" } +yazi-config = { path = "../yazi-config", version = "25.12.29" } +yazi-dds = { path = "../yazi-dds", version = "25.12.29" } +yazi-fs = { path = "../yazi-fs", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-parser = { path = "../yazi-parser", version = "25.12.29" } +yazi-plugin = { path = "../yazi-plugin", version = "25.12.29" } +yazi-proxy = { path = "../yazi-proxy", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } +yazi-vfs = { path = "../yazi-vfs", version = "25.12.29" } # External dependencies anyhow = { workspace = true } diff --git a/yazi-scheduler/src/scheduler.rs b/yazi-scheduler/src/scheduler.rs index a8ce3b12..ffcc83d5 100644 --- a/yazi-scheduler/src/scheduler.rs +++ b/yazi-scheduler/src/scheduler.rs @@ -392,8 +392,8 @@ impl Scheduler { let Some(task) = ongoing.get_mut(op.id) else { continue }; op.out.reduce(task); - if !task.prog.cooked() { - continue; // Not cooked yet + if !task.prog.cooked() && task.done.completed() != Some(false) { + continue; // Not cooked yet, also not canceled } else if task.prog.cleaned() == Some(false) { continue; // Failed to clean up } else if let Some(hook) = task.hook.take() { diff --git a/yazi-sftp/Cargo.toml b/yazi-sftp/Cargo.toml index b9f2606a..90a78f0d 100644 --- a/yazi-sftp/Cargo.toml +++ b/yazi-sftp/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-sftp" -version = "0.1.0" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "AspectUnk", "sxyazi " ] diff --git a/yazi-shared/Cargo.toml b/yazi-shared/Cargo.toml index 7a4cece6..2018368d 100644 --- a/yazi-shared/Cargo.toml +++ b/yazi-shared/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-shared" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -13,7 +13,7 @@ rust-version = "1.91.0" workspace = true [dependencies] -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } # External dependencies anyhow = { workspace = true } diff --git a/yazi-shared/src/event/cmd.rs b/yazi-shared/src/event/cmd.rs index 6d0c18d7..9b7222b0 100644 --- a/yazi-shared/src/event/cmd.rs +++ b/yazi-shared/src/event/cmd.rs @@ -214,23 +214,22 @@ impl Cmd { impl Display for Cmd { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{}", self.name)?; + + for i in 0..self.args.len() { + let Ok(s) = self.get::<&str>(i) else { break }; + write!(f, " {s}")?; + } + for (k, v) in &self.args { - match k { - DataKey::Integer(_) => { - if let Some(s) = v.as_str() { - write!(f, " {s}")?; - } + if let DataKey::String(k) = k { + if v.try_into().is_ok_and(|b| b) { + write!(f, " --{k}")?; + } else if let Some(s) = v.as_str() { + write!(f, " --{k}={s}")?; } - DataKey::String(k) => { - if v.try_into().is_ok_and(|b| b) { - write!(f, " --{k}")?; - } else if let Some(s) = v.as_str() { - write!(f, " --{k}={s}")?; - } - } - _ => {} } } + Ok(()) } } diff --git a/yazi-shared/src/path/error.rs b/yazi-shared/src/path/error.rs index 54b317ba..007885eb 100644 --- a/yazi-shared/src/path/error.rs +++ b/yazi-shared/src/path/error.rs @@ -17,6 +17,14 @@ pub enum JoinError { FromPathDyn(#[from] PathDynError), } +impl From for JoinError { + fn from(err: StartsWithError) -> Self { + match err { + StartsWithError::FromStrand(e) => Self::FromStrand(e), + } + } +} + impl From for std::io::Error { fn from(err: JoinError) -> Self { Self::other(err) } } diff --git a/yazi-shared/src/url/url.rs b/yazi-shared/src/url/url.rs index 1e767557..54fdd1e1 100644 --- a/yazi-shared/src/url/url.rs +++ b/yazi-shared/src/url/url.rs @@ -269,14 +269,25 @@ impl<'a> Url<'a> { Ok(match self { Self::Regular(_) => UrlBuf::Regular(joined.into_os()?.into()), - Self::Search { loc, domain } => UrlBuf::Search { + + Self::Search { loc, domain } if joined.try_starts_with(loc.base())? => UrlBuf::Search { loc: LocBuf::::new(joined.try_into()?, loc.base(), loc.base()), domain: domain.intern(), }, - Self::Archive { loc, domain } => UrlBuf::Archive { + Self::Search { domain, .. } => UrlBuf::Search { + loc: LocBuf::::zeroed(joined.into_os()?), + domain: domain.intern(), + }, + + Self::Archive { loc, domain } if joined.try_starts_with(loc.base())? => UrlBuf::Archive { loc: LocBuf::::floated(joined.try_into()?, loc.base()), domain: domain.intern(), }, + Self::Archive { domain, .. } => UrlBuf::Archive { + loc: LocBuf::::zeroed(joined.into_os()?), + domain: domain.intern(), + }, + Self::Sftp { domain, .. } => { UrlBuf::Sftp { loc: joined.into_unix()?.into(), domain: domain.intern() } } diff --git a/yazi-shim/Cargo.toml b/yazi-shim/Cargo.toml index 6933f1ab..d033d37e 100644 --- a/yazi-shim/Cargo.toml +++ b/yazi-shim/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-shim" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -12,7 +12,7 @@ repository = "https://github.com/sxyazi/yazi" workspace = true [dependencies] -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } # External dependencies twox-hash = { workspace = true } diff --git a/yazi-term/Cargo.toml b/yazi-term/Cargo.toml index d522deb5..8922b183 100644 --- a/yazi-term/Cargo.toml +++ b/yazi-term/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-term" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -12,8 +12,8 @@ repository = "https://github.com/sxyazi/yazi" workspace = true [dependencies] -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } # Logging tracing = { workspace = true } diff --git a/yazi-vfs/Cargo.toml b/yazi-vfs/Cargo.toml index 53c524b0..db0aad08 100644 --- a/yazi-vfs/Cargo.toml +++ b/yazi-vfs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-vfs" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -12,11 +12,11 @@ repository = "https://github.com/sxyazi/yazi" workspace = true [dependencies] -yazi-config = { path = "../yazi-config", version = "25.9.15" } -yazi-fs = { path = "../yazi-fs", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-sftp = { path = "../yazi-sftp", version = "0.1.0" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } +yazi-config = { path = "../yazi-config", version = "25.12.29" } +yazi-fs = { path = "../yazi-fs", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-sftp = { path = "../yazi-sftp", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } # External dependencies anyhow = { workspace = true } diff --git a/yazi-vfs/src/provider/sftp/sftp.rs b/yazi-vfs/src/provider/sftp/sftp.rs index 2678bffe..bc309947 100644 --- a/yazi-vfs/src/provider/sftp/sftp.rs +++ b/yazi-vfs/src/provider/sftp/sftp.rs @@ -64,6 +64,8 @@ impl<'a> Provider for Sftp<'a> { return Ok(entry.url()); } else if similar.is_none() { similar = Some(s.into_owned()); + } else { + return Err(io::Error::from(io::ErrorKind::NotFound)); } } diff --git a/yazi-watcher/Cargo.toml b/yazi-watcher/Cargo.toml index ed9af0ba..270f121d 100644 --- a/yazi-watcher/Cargo.toml +++ b/yazi-watcher/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-watcher" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -12,13 +12,13 @@ repository = "https://github.com/sxyazi/yazi" workspace = true [dependencies] -yazi-adapter = { path = "../yazi-adapter", version = "25.9.15" } -yazi-dds = { path = "../yazi-dds", version = "25.9.15" } -yazi-fs = { path = "../yazi-fs", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-proxy = { path = "../yazi-proxy", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } -yazi-vfs = { path = "../yazi-vfs", version = "25.9.15" } +yazi-adapter = { path = "../yazi-adapter", version = "25.12.29" } +yazi-dds = { path = "../yazi-dds", version = "25.12.29" } +yazi-fs = { path = "../yazi-fs", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-proxy = { path = "../yazi-proxy", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } +yazi-vfs = { path = "../yazi-vfs", version = "25.12.29" } # Logging tracing = { workspace = true } diff --git a/yazi-widgets/Cargo.toml b/yazi-widgets/Cargo.toml index b7909ba5..c089a141 100644 --- a/yazi-widgets/Cargo.toml +++ b/yazi-widgets/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yazi-widgets" -version = "25.9.15" +version = "25.12.29" edition = "2024" license = "MIT" authors = [ "sxyazi " ] @@ -12,12 +12,12 @@ repository = "https://github.com/sxyazi/yazi" workspace = true [dependencies] -yazi-binding = { path = "../yazi-binding", version = "25.9.15" } -yazi-config = { path = "../yazi-config", version = "25.9.15" } -yazi-macro = { path = "../yazi-macro", version = "25.9.15" } -yazi-parser = { path = "../yazi-parser", version = "25.9.15" } -yazi-shared = { path = "../yazi-shared", version = "25.9.15" } -yazi-term = { path = "../yazi-term", version = "25.9.15" } +yazi-binding = { path = "../yazi-binding", version = "25.12.29" } +yazi-config = { path = "../yazi-config", version = "25.12.29" } +yazi-macro = { path = "../yazi-macro", version = "25.12.29" } +yazi-parser = { path = "../yazi-parser", version = "25.12.29" } +yazi-shared = { path = "../yazi-shared", version = "25.12.29" } +yazi-term = { path = "../yazi-term", version = "25.12.29" } # External dependencies anyhow = { workspace = true }