From 559a46e399c11fdf0c01c16e598dddbc272799d8 Mon Sep 17 00:00:00 2001 From: simonborje Date: Wed, 9 Jul 2025 18:12:51 +0200 Subject: [PATCH] feat: make `ticket` optional for `cmp:trigger` (#2968) Co-authored-by: sxyazi --- Cargo.lock | 69 ++++++++++++++++----- Cargo.toml | 4 +- yazi-config/src/lib.rs | 9 +-- yazi-core/src/cmp/commands/trigger.rs | 13 ++-- yazi-fm/src/executor.rs | 11 +--- yazi-parser/src/cmp/trigger.rs | 4 +- yazi-widgets/src/input/commands/commands.rs | 7 +-- 7 files changed, 75 insertions(+), 42 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 951e7f5a..63673596 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1385,9 +1385,9 @@ dependencies = [ [[package]] name = "lru" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0281c2e25e62316a5c9d98f2d2e9e95a37841afdaf4383c177dbb5c1dfab0568" +checksum = "86ea4e65087ff52f3862caff188d489f1fab49a0cb09e01b2e3f1a617b10aaed" dependencies = [ "hashbrown", ] @@ -2351,6 +2351,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" +dependencies = [ + "serde", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -2532,7 +2541,7 @@ dependencies = [ "cfg-expr", "heck", "pkg-config", - "toml", + "toml 0.8.23", "version-compare", ] @@ -2723,11 +2732,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", - "serde_spanned", - "toml_datetime", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", "toml_edit", ] +[[package]] +name = "toml" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f271e09bde39ab52250160a67e88577e0559ad77e9085de6e9051a2c4353f8f8" +dependencies = [ + "indexmap", + "serde", + "serde_spanned 1.0.0", + "toml_datetime 0.7.0", + "toml_parser", + "toml_writer", + "winnow", +] + [[package]] name = "toml_datetime" version = "0.6.11" @@ -2737,6 +2761,15 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" +dependencies = [ + "serde", +] + [[package]] name = "toml_edit" version = "0.22.27" @@ -2745,17 +2778,25 @@ checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap", "serde", - "serde_spanned", - "toml_datetime", - "toml_write", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", "winnow", ] [[package]] -name = "toml_write" -version = "0.1.2" +name = "toml_parser" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +checksum = "b5c1c469eda89749d2230d8156a5969a69ffe0d6d01200581cdc6110674d293e" +dependencies = [ + "winnow", +] + +[[package]] +name = "toml_writer" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b679217f2848de74cabd3e8fc5e6d66f40b7da40f8e1954d92054d9010690fd5" [[package]] name = "tracing" @@ -3503,7 +3544,7 @@ dependencies = [ "serde", "serde_json", "tokio", - "toml", + "toml 0.9.0", "twox-hash", "vergen-gitcl", "yazi-boot", @@ -3534,7 +3575,7 @@ dependencies = [ "ratatui", "regex", "serde", - "toml", + "toml 0.9.0", "tracing", "yazi-codegen", "yazi-fs", @@ -3771,7 +3812,7 @@ dependencies = [ "async-priority-channel", "futures", "libc", - "lru 0.15.0", + "lru 0.16.0", "parking_lot", "scopeguard", "tokio", diff --git a/Cargo.toml b/Cargo.toml index 444577f9..44882855 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,7 +33,7 @@ futures = "0.3.31" globset = "0.4.16" indexmap = { version = "2.10.0", features = [ "serde" ] } libc = "0.2.174" -lru = "0.15.0" +lru = "0.16.0" mlua = { version = "0.10.5", features = [ "anyhow", "async", "error-send", "lua54", "macros", "serialize" ] } objc = "0.2.7" ordered-float = { version = "5.0.0", features = [ "serde" ] } @@ -48,7 +48,7 @@ syntect = { version = "5.2.0", default-features = false, features = tokio = { version = "1.46.1", features = [ "full" ] } tokio-stream = "0.1.17" tokio-util = "0.7.15" -toml = { version = "0.8.23" } +toml = { version = "0.9.0" } tracing = { version = "0.1.41", features = [ "max_level_debug", "release_max_level_debug" ] } twox-hash = { version = "2.1.1", default-features = false, features = [ "std", "random", "xxhash3_128" ] } unicode-width = { version = "0.2.0", default-features = false } diff --git a/yazi-config/src/lib.rs b/yazi-config/src/lib.rs index 04de7fe4..57f8b011 100644 --- a/yazi-config/src/lib.rs +++ b/yazi-config/src/lib.rs @@ -27,8 +27,8 @@ fn try_init(merge: bool) -> anyhow::Result<()> { let mut keymap = Preset::keymap()?; if merge { - yazi = yazi.deserialize_over(toml::Deserializer::new(&yazi::Yazi::read()?))?; - keymap = keymap.deserialize_over(toml::Deserializer::new(&keymap::Keymap::read()?))?; + yazi = yazi.deserialize_over(toml::Deserializer::parse(&yazi::Yazi::read()?)?)?; + keymap = keymap.deserialize_over(toml::Deserializer::parse(&keymap::Keymap::read()?)?)?; } YAZI.init(yazi.reshape()?); @@ -48,9 +48,10 @@ fn try_init_flavor(light: bool, merge: bool) -> anyhow::Result<()> { let mut theme = Preset::theme(light)?; if merge { - let shadow = theme::Theme::deserialize_shadow(toml::Deserializer::new(&theme::Theme::read()?))?; + let shadow = + theme::Theme::deserialize_shadow(toml::Deserializer::parse(&theme::Theme::read()?)?)?; let flavor = shadow.flavor.as_ref().map(theme::Flavor::from).unwrap_or_default().read(light)?; - theme = theme.deserialize_over(toml::Deserializer::new(&flavor))?; + theme = theme.deserialize_over(toml::Deserializer::parse(&flavor)?)?; theme = theme.deserialize_over_with::(shadow)?; } diff --git a/yazi-core/src/cmp/commands/trigger.rs b/yazi-core/src/cmp/commands/trigger.rs index 01534fba..94b8c9c5 100644 --- a/yazi-core/src/cmp/commands/trigger.rs +++ b/yazi-core/src/cmp/commands/trigger.rs @@ -12,18 +12,23 @@ use crate::cmp::Cmp; impl Cmp { #[yazi_codegen::command] pub fn trigger(&mut self, opt: TriggerOpt) { - if opt.ticket < self.ticket { - return; + if let Some(t) = opt.ticket { + if t < self.ticket { + return; + } + self.ticket = t; } - self.ticket = opt.ticket; let Some((parent, word)) = Self::split_path(&opt.word) else { return self.close(false); }; if self.caches.contains_key(&parent) { return self.show( - Cmd::default().with_any("cache-name", parent).with("word", word).with("ticket", opt.ticket), + Cmd::default() + .with_any("cache-name", parent) + .with("word", word) + .with("ticket", self.ticket), ); } diff --git a/yazi-fm/src/executor.rs b/yazi-fm/src/executor.rs index 63da30c1..ca012549 100644 --- a/yazi-fm/src/executor.rs +++ b/yazi-fm/src/executor.rs @@ -157,11 +157,6 @@ impl<'a> Executor<'a> { return self.app.cx.tasks.$name(cmd); } }; - ($name:ident, $alias:literal) => { - if cmd.name == $alias { - return self.app.cx.tasks.$name(cmd); - } - }; } on!(show); @@ -249,11 +244,7 @@ impl<'a> Executor<'a> { _ => {} } } - InputMode::Insert => match cmd.name.as_ref() { - "complete" if cmd.bool("trigger") => return self.app.cx.cmp.trigger(cmd), - _ => {} - }, - InputMode::Replace => {} + InputMode::Insert | InputMode::Replace => {} }; self.app.cx.input.execute(cmd) diff --git a/yazi-parser/src/cmp/trigger.rs b/yazi-parser/src/cmp/trigger.rs index ea752347..72a55a36 100644 --- a/yazi-parser/src/cmp/trigger.rs +++ b/yazi-parser/src/cmp/trigger.rs @@ -2,14 +2,14 @@ use yazi_shared::{Id, SStr, event::{CmdCow, Data}}; pub struct TriggerOpt { pub word: SStr, - pub ticket: Id, + pub ticket: Option, } impl From for TriggerOpt { fn from(mut c: CmdCow) -> Self { Self { word: c.take_first_str().unwrap_or_default(), - ticket: c.get("ticket").and_then(Data::as_id).unwrap_or_default(), + ticket: c.get("ticket").and_then(Data::as_id), } } } diff --git a/yazi-widgets/src/input/commands/commands.rs b/yazi-widgets/src/input/commands/commands.rs index 61cd7cfa..688b4990 100644 --- a/yazi-widgets/src/input/commands/commands.rs +++ b/yazi-widgets/src/input/commands/commands.rs @@ -10,14 +10,9 @@ impl Input { return self.$name(cmd); } }; - ($name:ident, $alias:literal) => { - if cmd.name == $alias { - return self.$name(cmd); - } - }; } - on!(r#move, "move"); + on!(r#move); on!(backward); on!(forward);