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" },
# 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" },

View file

@ -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]

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 yazi_shared::event::{Cmd, Data};
use yazi_shared::event::Cmd;
pub(super) fn run_deserialize<'de, D>(deserializer: D) -> Result<Vec<Cmd>, D::Error>
where
@ -10,33 +10,6 @@ where
{
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 {
type Value = Vec<Cmd>;
@ -50,7 +23,7 @@ where
{
let mut cmds = vec![];
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() {
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)?])
}
}

View file

@ -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();

View file

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