diff --git a/yazi-actor/src/input/history.rs b/yazi-actor/src/input/history.rs new file mode 100644 index 00000000..1464e172 --- /dev/null +++ b/yazi-actor/src/input/history.rs @@ -0,0 +1,17 @@ +use anyhow::Result; +use yazi_shared::data::Data; +use yazi_widgets::input::parser::HistoryOpt; + +use crate::{Actor, Ctx}; + +pub struct History; + +impl Actor for History { + type Form = HistoryOpt; + + const NAME: &str = "history"; + + fn act(cx: &mut Ctx, form: Self::Form) -> Result { + cx.input.navigate_history(form) + } +} \ No newline at end of file diff --git a/yazi-actor/src/input/mod.rs b/yazi-actor/src/input/mod.rs index 16e44b0e..7dd25a81 100644 --- a/yazi-actor/src/input/mod.rs +++ b/yazi-actor/src/input/mod.rs @@ -1 +1 @@ -yazi_macro::mod_flat!(close complete escape show); +yazi_macro::mod_flat!(close complete escape history show); diff --git a/yazi-core/src/input/input.rs b/yazi-core/src/input/input.rs index c595a2dc..f697321a 100644 --- a/yazi-core/src/input/input.rs +++ b/yazi-core/src/input/input.rs @@ -3,7 +3,7 @@ use std::ops::{Deref, DerefMut}; use anyhow::Result; use yazi_config::popup::Position; use yazi_macro::{render, succ}; -use yazi_shared::{data::Data, event::ActionCow, SStr}; +use yazi_shared::{data::Data, SStr}; use yazi_widgets::input::{InputOp, parser::HistoryOpt}; #[derive(Default)] @@ -17,13 +17,6 @@ pub struct Input { } impl Input { - pub fn execute(&mut self, action: ActionCow) -> Result { - if action.name == "history" { - return self.navigate_history(action.into()); - } - self.inner.execute(action) - } - pub fn history(&mut self) -> &mut yazi_widgets::input::InputHistory { if !self.history.contains_key(&self.inner.id) { self.history.insert(self.inner.id.clone(), yazi_widgets::input::InputHistory::new()); diff --git a/yazi-fm/src/executor.rs b/yazi-fm/src/executor.rs index 3a8c461f..d69d7c42 100644 --- a/yazi-fm/src/executor.rs +++ b/yazi-fm/src/executor.rs @@ -270,6 +270,7 @@ impl<'a> Executor<'a> { on!(escape); on!(show); on!(close); + on!(history); match mode { InputMode::Normal => { diff --git a/yazi-parser/src/spark/spark.rs b/yazi-parser/src/spark/spark.rs index a6cbc703..3fdbd403 100644 --- a/yazi-parser/src/spark/spark.rs +++ b/yazi-parser/src/spark/spark.rs @@ -122,6 +122,7 @@ pub enum Spark<'a> { InputEscape(crate::VoidForm), InputForward(yazi_widgets::input::parser::ForwardOpt), InputInsert(yazi_widgets::input::parser::InsertOpt), + InputHistory(yazi_widgets::input::parser::HistoryOpt), InputKill(yazi_widgets::input::parser::KillOpt), InputMove(yazi_widgets::input::parser::MoveOpt), InputPaste(yazi_widgets::input::parser::PasteOpt), @@ -310,6 +311,7 @@ impl<'a> IntoLua for Spark<'a> { Self::InputEscape(b) => b.into_lua(lua), Self::InputForward(b) => b.into_lua(lua), Self::InputInsert(b) => b.into_lua(lua), + Self::InputHistory(b) => b.into_lua(lua), Self::InputKill(b) => b.into_lua(lua), Self::InputMove(b) => b.into_lua(lua), Self::InputPaste(b) => b.into_lua(lua), @@ -448,6 +450,7 @@ try_from_spark!(crate::which::ActivateForm, which:activate); try_from_spark!(yazi_dds::Payload<'a>, app:accept_payload); try_from_spark!(yazi_widgets::input::InputOpt, input:show); try_from_spark!(yazi_widgets::input::parser::BackspaceOpt, input:backspace); +try_from_spark!(yazi_widgets::input::parser::HistoryOpt, input:history); try_from_spark!(yazi_widgets::input::parser::BackwardOpt, input:backward); try_from_spark!(yazi_widgets::input::parser::CompleteOpt, input:complete); try_from_spark!(yazi_widgets::input::parser::DeleteOpt, input:delete); diff --git a/yazi-widgets/src/input/snaps.rs b/yazi-widgets/src/input/snaps.rs index 0bfbd539..f54ca246 100644 --- a/yazi-widgets/src/input/snaps.rs +++ b/yazi-widgets/src/input/snaps.rs @@ -1,5 +1,6 @@ use std::mem; +use crate::input::InputMode; use super::InputSnap; #[derive(PartialEq, Eq)]