From b540d103ab0f26df803238fabc53071ac8398353 Mon Sep 17 00:00:00 2001 From: sxyazi Date: Sun, 26 May 2024 19:29:17 +0800 Subject: [PATCH] Simplify the code --- yazi-config/preset/keymap.toml | 24 +++++++++---------- yazi-config/preset/yazi.toml | 6 ++--- yazi-config/src/keymap/run.rs | 37 ++++-------------------------- yazi-core/src/tab/commands/sort.rs | 36 +++++++---------------------- yazi-shared/src/event/data.rs | 2 ++ 5 files changed, 30 insertions(+), 75 deletions(-) diff --git a/yazi-config/preset/keymap.toml b/yazi-config/preset/keymap.toml index f4c0146a..110376ca 100644 --- a/yazi-config/preset/keymap.toml +++ b/yazi-config/preset/keymap.toml @@ -106,18 +106,18 @@ keymap = [ { on = [ "N" ], run = "find_arrow --previous", desc = "Go to previous found file" }, # Sorting - { on = [ ",", "m" ], run = "sort modified", desc = "Sort by modified time" }, - { on = [ ",", "M" ], run = "sort modified --reverse", desc = "Sort by modified time (reverse)" }, - { on = [ ",", "c" ], run = "sort created", desc = "Sort by created time" }, - { on = [ ",", "C" ], run = "sort created --reverse", desc = "Sort by created time (reverse)" }, - { on = [ ",", "e" ], run = "sort extension", desc = "Sort by extension" }, - { on = [ ",", "E" ], run = "sort extension --reverse", desc = "Sort by extension (reverse)" }, - { on = [ ",", "a" ], run = "sort alphabetical", desc = "Sort alphabetically" }, - { on = [ ",", "A" ], run = "sort alphabetical --reverse", desc = "Sort alphabetically (reverse)" }, - { on = [ ",", "n" ], run = "sort natural", desc = "Sort naturally" }, - { on = [ ",", "N" ], run = "sort natural --reverse", desc = "Sort naturally (reverse)" }, - { on = [ ",", "s" ], run = "sort size", desc = "Sort by size" }, - { on = [ ",", "S" ], run = "sort size --reverse", desc = "Sort by size (reverse)" }, + { on = [ ",", "m" ], run = "sort modified --reverse=no", desc = "Sort by modified time" }, + { on = [ ",", "M" ], run = "sort modified --reverse", desc = "Sort by modified time (reverse)" }, + { on = [ ",", "c" ], run = "sort created --reverse=no", desc = "Sort by created time" }, + { on = [ ",", "C" ], run = "sort created --reverse", desc = "Sort by created time (reverse)" }, + { on = [ ",", "e" ], run = "sort extension --reverse=no", desc = "Sort by extension" }, + { on = [ ",", "E" ], run = "sort extension --reverse", desc = "Sort by extension (reverse)" }, + { on = [ ",", "a" ], run = "sort alphabetical --reverse=no", desc = "Sort alphabetically" }, + { on = [ ",", "A" ], run = "sort alphabetical --reverse", desc = "Sort alphabetically (reverse)" }, + { on = [ ",", "n" ], run = "sort natural --reverse=no", desc = "Sort naturally" }, + { on = [ ",", "N" ], run = "sort natural --reverse", desc = "Sort naturally (reverse)" }, + { on = [ ",", "s" ], run = "sort size --reverse=no", desc = "Sort by size" }, + { on = [ ",", "S" ], run = "sort size --reverse", desc = "Sort by size (reverse)" }, # Tabs { on = [ "t" ], run = "tab_create --current", desc = "Create a new tab using the current path" }, diff --git a/yazi-config/preset/yazi.toml b/yazi-config/preset/yazi.toml index 781ef330..b2059686 100644 --- a/yazi-config/preset/yazi.toml +++ b/yazi-config/preset/yazi.toml @@ -186,9 +186,9 @@ open_origin = "hovered" open_offset = [ 0, 1, 50, 7 ] [which] -sort_by = "none" -sort_sensitive = false -sort_reverse = false +sort_by = "none" +sort_sensitive = false +sort_reverse = false sort_transliteration = false [log] diff --git a/yazi-config/src/keymap/run.rs b/yazi-config/src/keymap/run.rs index 65307a9c..645d2349 100644 --- a/yazi-config/src/keymap/run.rs +++ b/yazi-config/src/keymap/run.rs @@ -1,8 +1,8 @@ -use std::{fmt, mem}; +use std::{fmt, str::FromStr}; -use anyhow::{bail, Result}; +use anyhow::Result; use serde::{de::{self, Visitor}, Deserializer}; -use yazi_shared::event::{Cmd, Data}; +use yazi_shared::event::Cmd; pub(super) fn run_deserialize<'de, D>(deserializer: D) -> Result, D::Error> where @@ -10,33 +10,6 @@ where { struct RunVisitor; - #[allow(clippy::explicit_counter_loop)] - fn parse(s: &str) -> Result { - let mut args = shell_words::split(s)?; - let mut cmd = Cmd { name: mem::take(&mut args[0]), ..Default::default() }; - - let mut i = 0usize; - for arg in args.into_iter().skip(1) { - let Some(arg) = arg.strip_prefix("--") else { - cmd.args.insert(i.to_string(), Data::String(arg)); - i += 1; - continue; - }; - - let mut parts = arg.splitn(2, '='); - let Some(key) = parts.next().map(|s| s.to_owned()) else { - bail!("invalid argument: {arg}"); - }; - - if let Some(val) = parts.next() { - cmd.args.insert(key, Data::String(val.to_owned())); - } else { - cmd.args.insert(key, Data::Boolean(true)); - } - } - Ok(cmd) - } - impl<'de> Visitor<'de> for RunVisitor { type Value = Vec; @@ -50,7 +23,7 @@ where { let mut cmds = vec![]; while let Some(value) = &seq.next_element::()? { - cmds.push(parse(value).map_err(de::Error::custom)?); + cmds.push(Cmd::from_str(value).map_err(de::Error::custom)?); } if cmds.is_empty() { return Err(de::Error::custom("`run` within keymap.toml cannot be empty")); @@ -62,7 +35,7 @@ where where E: de::Error, { - Ok(vec![parse(value).map_err(de::Error::custom)?]) + Ok(vec![Cmd::from_str(value).map_err(de::Error::custom)?]) } } diff --git a/yazi-core/src/tab/commands/sort.rs b/yazi-core/src/tab/commands/sort.rs index ed032a97..aff75c05 100644 --- a/yazi-core/src/tab/commands/sort.rs +++ b/yazi-core/src/tab/commands/sort.rs @@ -4,40 +4,20 @@ use yazi_config::manager::SortBy; use yazi_proxy::ManagerProxy; use yazi_shared::event::Cmd; -use crate::{tab::{Config, Tab}, tasks::Tasks}; +use crate::{tab::Tab, tasks::Tasks}; impl Tab { pub fn sort(&mut self, mut c: Cmd, tasks: &Tasks) { - let defaults = Config::default(); + let conf = &mut self.conf; if let Some(by) = c.take_first_str() { - self.conf.sort_by = SortBy::from_str(&by).unwrap_or_default(); - } else { - self.conf.sort_by = defaults.sort_by; + conf.sort_by = SortBy::from_str(&by).unwrap_or_default(); } - if let Some(rev) = c.maybe_bool("reverse") { - self.conf.sort_reverse = rev; - } else { - self.conf.sort_reverse = defaults.sort_reverse; - } - - if let Some(d_f) = c.maybe_bool("dir-first") { - self.conf.sort_dir_first = d_f; - } else { - self.conf.sort_dir_first = defaults.sort_dir_first; - } - - if let Some(sen) = c.maybe_bool("sensitive") { - self.conf.sort_sensitive = sen; - } else { - self.conf.sort_sensitive = defaults.sort_sensitive; - } - - if let Some(tran) = c.maybe_bool("transliteration") { - self.conf.sort_transliteration = tran; - } else { - self.conf.sort_transliteration = defaults.sort_transliteration; - } + conf.sort_reverse = c.maybe_bool("reverse").unwrap_or(conf.sort_reverse); + conf.sort_dir_first = c.maybe_bool("dir-first").unwrap_or(conf.sort_dir_first); + conf.sort_sensitive = c.maybe_bool("sensitive").unwrap_or(conf.sort_sensitive); + conf.sort_transliteration = + c.maybe_bool("transliteration").unwrap_or(conf.sort_transliteration); self.apply_files_attrs(); ManagerProxy::update_paged(); diff --git a/yazi-shared/src/event/data.rs b/yazi-shared/src/event/data.rs index 927b7567..2b833e7e 100644 --- a/yazi-shared/src/event/data.rs +++ b/yazi-shared/src/event/data.rs @@ -25,6 +25,8 @@ impl Data { pub fn as_bool(&self) -> Option { match self { Self::Boolean(b) => Some(*b), + Self::String(s) if s == "no" => Some(false), + Self::String(s) if s == "yes" => Some(true), _ => None, } }