mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
Simplify the code
This commit is contained in:
parent
7849712648
commit
b540d103ab
5 changed files with 30 additions and 75 deletions
|
|
@ -106,17 +106,17 @@ 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
|
||||||
|
|
|
||||||
|
|
@ -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)?])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue