Skip to content

Commit e2cf028

Browse files
committed
Allow sorting by name (PR #1138)
1 parent 2c9ed1a commit e2cf028

File tree

3 files changed

+26
-6
lines changed

3 files changed

+26
-6
lines changed

doc/lsd.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@ lsd is a ls command with a lot of pretty colours and some other stuff to enrich
7474
`-r`, `--reverse`
7575
: Reverse the order of the sort
7676

77+
`--namesort`
78+
: Sort by name
79+
7780
`-S`, `--sizesort`
7881
: Sort by size
7982

@@ -129,7 +132,7 @@ lsd is a ls command with a lot of pretty colours and some other stuff to enrich
129132
: How to display size [default: default] [possible values: default, short, bytes]
130133

131134
`--sort <WORD>...`
132-
: Sort by WORD instead of name [possible values: size, time, version, extension, git]
135+
: Sort by WORD instead of the configured default (name, unless configured otherwise) [possible values: name, size, time, version, extension, git]
133136

134137
`-U`, `--no-sort`
135138
: Do not sort. List entries in directory order

src/app.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ pub struct Cli {
8484
#[arg(long, value_parser = validate_date_argument)]
8585
pub date: Option<String>,
8686

87+
/// Sort by name
88+
#[arg(long)]
89+
pub namesort: bool,
90+
8791
/// Sort by time modified
8892
#[arg(short = 't', long)]
8993
pub timesort: bool,
@@ -104,17 +108,17 @@ pub struct Cli {
104108
#[arg(short = 'v', long)]
105109
pub versionsort: bool,
106110

107-
/// Sort by TYPE instead of name
111+
/// Sort by TYPE instead of the configured default (name, unless configured otherwise)
108112
#[arg(
109113
long,
110114
value_name = "TYPE",
111-
value_parser = ["size", "time", "version", "extension", "git", "none"],
112-
overrides_with_all = ["timesort", "sizesort", "extensionsort", "versionsort", "gitsort", "no_sort"]
115+
value_parser = ["name", "size", "time", "version", "extension", "git", "none"],
116+
overrides_with_all = ["namesort", "timesort", "sizesort", "extensionsort", "versionsort", "gitsort", "no_sort"]
113117
)]
114118
pub sort: Option<String>,
115119

116120
/// Do not sort. List entries in directory order
117-
#[arg(short = 'U', long, overrides_with_all = ["timesort", "sizesort", "extensionsort", "versionsort", "gitsort", "sort"])]
121+
#[arg(short = 'U', long, overrides_with_all = ["namesort", "timesort", "sizesort", "extensionsort", "versionsort", "gitsort", "sort"])]
118122
pub no_sort: bool,
119123

120124
/// Reverse the order of the sort

src/flags/sorting.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ impl Configurable<Self> for SortColumn {
5555
fn from_cli(cli: &Cli) -> Option<Self> {
5656
let sort = cli.sort.as_deref();
5757

58-
if cli.timesort || sort == Some("time") {
58+
if cli.namesort || sort == Some("name") {
59+
Some(Self::Name)
60+
} else if cli.timesort || sort == Some("time") {
5961
Some(Self::Time)
6062
} else if cli.sizesort || sort == Some("size") {
6163
Some(Self::Size)
@@ -229,6 +231,13 @@ mod test_sort_column {
229231
assert_eq!(Some(SortColumn::Version), SortColumn::from_cli(&cli));
230232
}
231233

234+
#[test]
235+
fn test_from_cli_name() {
236+
let argv = ["lsd", "--namesort"];
237+
let cli = Cli::try_parse_from(argv).unwrap();
238+
assert_eq!(Some(SortColumn::Name), SortColumn::from_cli(&cli));
239+
}
240+
232241
#[test]
233242
fn test_from_cli_no_sort() {
234243
let argv = ["lsd", "--no-sort"];
@@ -238,6 +247,10 @@ mod test_sort_column {
238247

239248
#[test]
240249
fn test_from_cli_sort() {
250+
let argv = ["lsd", "--sort", "name"];
251+
let cli = Cli::try_parse_from(argv).unwrap();
252+
assert_eq!(Some(SortColumn::Name), SortColumn::from_cli(&cli));
253+
241254
let argv = ["lsd", "--sort", "time"];
242255
let cli = Cli::try_parse_from(argv).unwrap();
243256
assert_eq!(Some(SortColumn::Time), SortColumn::from_cli(&cli));

0 commit comments

Comments
 (0)