Simplify the code

This commit is contained in:
sxyazi 2024-05-26 19:29:17 +08:00
parent 7849712648
commit b540d103ab
No known key found for this signature in database
5 changed files with 30 additions and 75 deletions

View file

@ -106,18 +106,18 @@ keymap = [
{ on = [ "N" ], run = "find_arrow --previous", desc = "Go to previous found file" }, { on = [ "N" ], run = "find_arrow --previous", desc = "Go to previous found file" },
# Sorting # Sorting
{ on = [ ",", "m" ], run = "sort modified", desc = "Sort by modified time" }, { 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 = [ ",", "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=no", desc = "Sort by created time" },
{ on = [ ",", "C" ], run = "sort created --reverse", desc = "Sort by created time (reverse)" }, { 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=no", desc = "Sort by extension" },
{ on = [ ",", "E" ], run = "sort extension --reverse", desc = "Sort by extension (reverse)" }, { 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=no", desc = "Sort alphabetically" },
{ on = [ ",", "A" ], run = "sort alphabetical --reverse", desc = "Sort alphabetically (reverse)" }, { on = [ ",", "A" ], run = "sort alphabetical --reverse", desc = "Sort alphabetically (reverse)" },
{ on = [ ",", "n" ], run = "sort natural", desc = "Sort naturally" }, { on = [ ",", "n" ], run = "sort natural --reverse=no", desc = "Sort naturally" },
{ on = [ ",", "N" ], run = "sort natural --reverse", desc = "Sort naturally (reverse)" }, { 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=no", desc = "Sort by size" },
{ on = [ ",", "S" ], run = "sort size --reverse", desc = "Sort by size (reverse)" }, { on = [ ",", "S" ], run = "sort size --reverse", desc = "Sort by size (reverse)" },
# Tabs # Tabs
{ on = [ "t" ], run = "tab_create --current", desc = "Create a new tab using the current path" }, { on = [ "t" ], run = "tab_create --current", desc = "Create a new tab using the current path" },

View file

@ -186,9 +186,9 @@ open_origin = "hovered"
open_offset = [ 0, 1, 50, 7 ] open_offset = [ 0, 1, 50, 7 ]
[which] [which]
sort_by = "none" sort_by = "none"
sort_sensitive = false sort_sensitive = false
sort_reverse = false sort_reverse = false
sort_transliteration = false sort_transliteration = false
[log] [log]

View file

@ -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 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<Vec<Cmd>, D::Error> pub(super) fn run_deserialize<'de, D>(deserializer: D) -> Result<Vec<Cmd>, D::Error>
where where
@ -10,33 +10,6 @@ where
{ {
struct RunVisitor; struct RunVisitor;
#[allow(clippy::explicit_counter_loop)]
fn parse(s: &str) -> Result<Cmd> {
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 { impl<'de> Visitor<'de> for RunVisitor {
type Value = Vec<Cmd>; type Value = Vec<Cmd>;
@ -50,7 +23,7 @@ where
{ {
let mut cmds = vec![]; let mut cmds = vec![];
while let Some(value) = &seq.next_element::<String>()? { while let Some(value) = &seq.next_element::<String>()? {
cmds.push(parse(value).map_err(de::Error::custom)?); cmds.push(Cmd::from_str(value).map_err(de::Error::custom)?);
} }
if cmds.is_empty() { if cmds.is_empty() {
return Err(de::Error::custom("`run` within keymap.toml cannot be empty")); return Err(de::Error::custom("`run` within keymap.toml cannot be empty"));
@ -62,7 +35,7 @@ where
where where
E: de::Error, E: de::Error,
{ {
Ok(vec![parse(value).map_err(de::Error::custom)?]) Ok(vec![Cmd::from_str(value).map_err(de::Error::custom)?])
} }
} }

View file

@ -4,40 +4,20 @@ use yazi_config::manager::SortBy;
use yazi_proxy::ManagerProxy; use yazi_proxy::ManagerProxy;
use yazi_shared::event::Cmd; use yazi_shared::event::Cmd;
use crate::{tab::{Config, Tab}, tasks::Tasks}; use crate::{tab::Tab, tasks::Tasks};
impl Tab { impl Tab {
pub fn sort(&mut self, mut c: Cmd, tasks: &Tasks) { 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() { if let Some(by) = c.take_first_str() {
self.conf.sort_by = SortBy::from_str(&by).unwrap_or_default(); conf.sort_by = SortBy::from_str(&by).unwrap_or_default();
} else {
self.conf.sort_by = defaults.sort_by;
} }
if let Some(rev) = c.maybe_bool("reverse") { conf.sort_reverse = c.maybe_bool("reverse").unwrap_or(conf.sort_reverse);
self.conf.sort_reverse = rev; conf.sort_dir_first = c.maybe_bool("dir-first").unwrap_or(conf.sort_dir_first);
} else { conf.sort_sensitive = c.maybe_bool("sensitive").unwrap_or(conf.sort_sensitive);
self.conf.sort_reverse = defaults.sort_reverse; conf.sort_transliteration =
} c.maybe_bool("transliteration").unwrap_or(conf.sort_transliteration);
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;
}
self.apply_files_attrs(); self.apply_files_attrs();
ManagerProxy::update_paged(); ManagerProxy::update_paged();

View file

@ -25,6 +25,8 @@ impl Data {
pub fn as_bool(&self) -> Option<bool> { pub fn as_bool(&self) -> Option<bool> {
match self { match self {
Self::Boolean(b) => Some(*b), Self::Boolean(b) => Some(*b),
Self::String(s) if s == "no" => Some(false),
Self::String(s) if s == "yes" => Some(true),
_ => None, _ => None,
} }
} }