Skip to content

Commit 777e226

Browse files
committed
feat: support setting combined sort methods in keymaps
1 parent 3c71192 commit 777e226

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

yazi-actor/src/mgr/sort.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use anyhow::Result;
22
use yazi_core::tab::Folder;
3-
use yazi_fs::{FilesSorter, FolderStage, SortBys};
3+
use yazi_fs::{FilesSorter, FolderStage };
44
use yazi_macro::{act, render, render_and, succ};
55
use yazi_parser::mgr::SortOpt;
66
use yazi_shared::event::Data;
@@ -16,7 +16,7 @@ impl Actor for Sort {
1616

1717
fn act(cx: &mut Ctx, opt: Self::Options) -> Result<Data> {
1818
let pref = &mut cx.tab_mut().pref;
19-
opt.by.inspect(|by| pref.sort_by = SortBys(by.clone()));
19+
pref.sort_by = opt.by.unwrap_or_else(|| pref.sort_by.clone());
2020
pref.sort_reverse = opt.reverse.unwrap_or(pref.sort_reverse);
2121
pref.sort_dir_first = opt.dir_first.unwrap_or(pref.sort_dir_first);
2222
pref.sort_sensitive = opt.sensitive.unwrap_or(pref.sort_sensitive);

yazi-parser/src/mgr/sort.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
use std::str::FromStr;
22

33
use mlua::{ExternalError, FromLua, IntoLua, Lua, Value};
4-
use yazi_fs::SortBy;
4+
use yazi_fs::{SortBys, SortBy};
55
use yazi_shared::event::CmdCow;
66

77
#[derive(Debug, Default)]
88
pub struct SortOpt {
9-
pub by: Option<Vec<SortBy>>,
9+
pub by: Option<SortBys>,
1010
pub reverse: Option<bool>,
1111
pub dir_first: Option<bool>,
1212
pub sensitive: Option<bool>,
@@ -17,9 +17,13 @@ impl TryFrom<CmdCow> for SortOpt {
1717
type Error = anyhow::Error;
1818

1919
fn try_from(c: CmdCow) -> Result<Self, Self::Error> {
20+
let by = (0..)
21+
.map_while(|i| c.str(i))
22+
.map(SortBy::from_str)
23+
.collect::<Result<Vec<SortBy>, _>>()?;
24+
2025
Ok(Self {
21-
// TODO(SuniRein): multiple sort by methods
22-
by: c.first_str().map(SortBy::from_str).transpose()?.map(|v| vec![v]),
26+
by: if by.is_empty() {None} else {Some(SortBys(by))},
2327
reverse: c.maybe_bool("reverse"),
2428
dir_first: c.maybe_bool("dir-first"),
2529
sensitive: c.maybe_bool("sensitive"),

0 commit comments

Comments
 (0)