提交 8805ce9e 编写于 作者: B Ben S

Add case-insensitive extension sorting

This finishes off and closes #102. The code in this and the previous commit
were partly authored by `zv0n` on GitHub.
上级 3e9616cf
...@@ -366,18 +366,26 @@ impl FileFilter { ...@@ -366,18 +366,26 @@ impl FileFilter {
use self::SortCase::{Sensitive, Insensitive}; use self::SortCase::{Sensitive, Insensitive};
match self.sort_field { match self.sort_field {
SortField::Unsorted => cmp::Ordering::Equal, SortField::Unsorted => cmp::Ordering::Equal,
SortField::Name(Sensitive) => natord::compare(&a.name, &b.name),
SortField::Name(Insensitive) => natord::compare_ignore_case(&a.name, &b.name), SortField::Name(Sensitive) => natord::compare(&a.name, &b.name),
SortField::Size => a.metadata.len().cmp(&b.metadata.len()), SortField::Name(Insensitive) => natord::compare_ignore_case(&a.name, &b.name),
SortField::FileInode => a.metadata.ino().cmp(&b.metadata.ino()),
SortField::ModifiedDate => a.metadata.mtime().cmp(&b.metadata.mtime()), SortField::Size => a.metadata.len().cmp(&b.metadata.len()),
SortField::AccessedDate => a.metadata.atime().cmp(&b.metadata.atime()), SortField::FileInode => a.metadata.ino().cmp(&b.metadata.ino()),
SortField::CreatedDate => a.metadata.ctime().cmp(&b.metadata.ctime()), SortField::ModifiedDate => a.metadata.mtime().cmp(&b.metadata.mtime()),
SortField::Extension => match a.ext.cmp(&b.ext) { SortField::AccessedDate => a.metadata.atime().cmp(&b.metadata.atime()),
SortField::CreatedDate => a.metadata.ctime().cmp(&b.metadata.ctime()),
SortField::Extension(Sensitive) => match a.ext.cmp(&b.ext) {
cmp::Ordering::Equal => natord::compare(&*a.name, &*b.name), cmp::Ordering::Equal => natord::compare(&*a.name, &*b.name),
order => order, order => order,
}, },
SortField::Extension(Insensitive) => match a.ext.cmp(&b.ext) {
cmp::Ordering::Equal => natord::compare_ignore_case(&*a.name, &*b.name),
order => order,
},
} }
} }
} }
...@@ -462,12 +470,14 @@ impl RecurseOptions { ...@@ -462,12 +470,14 @@ impl RecurseOptions {
/// User-supplied field to sort by. /// User-supplied field to sort by.
#[derive(PartialEq, Debug, Copy, Clone)] #[derive(PartialEq, Debug, Copy, Clone)]
pub enum SortField { pub enum SortField {
Unsorted, Name(SortCase), Extension, Size, FileInode, Unsorted,
Name(SortCase), Extension(SortCase),
Size, FileInode,
ModifiedDate, AccessedDate, CreatedDate, ModifiedDate, AccessedDate, CreatedDate,
} }
/// Whether a field should be sorted case-sensitively or case-insensitively. /// Whether a field should be sorted case-sensitively or case-insensitively.
/// ///
/// This determines which of the `natord` functions to use. /// This determines which of the `natord` functions to use.
#[derive(PartialEq, Debug, Copy, Clone)] #[derive(PartialEq, Debug, Copy, Clone)]
pub enum SortCase { pub enum SortCase {
...@@ -488,7 +498,8 @@ impl OptionSet for SortField { ...@@ -488,7 +498,8 @@ impl OptionSet for SortField {
"name" | "filename" => Ok(SortField::Name(SortCase::Sensitive)), "name" | "filename" => Ok(SortField::Name(SortCase::Sensitive)),
"Name" | "Filename" => Ok(SortField::Name(SortCase::Insensitive)), "Name" | "Filename" => Ok(SortField::Name(SortCase::Insensitive)),
"size" | "filesize" => Ok(SortField::Size), "size" | "filesize" => Ok(SortField::Size),
"ext" | "extension" => Ok(SortField::Extension), "ext" | "extension" => Ok(SortField::Extension(SortCase::Sensitive)),
"Ext" | "Extension" => Ok(SortField::Extension(SortCase::Insensitive)),
"mod" | "modified" => Ok(SortField::ModifiedDate), "mod" | "modified" => Ok(SortField::ModifiedDate),
"acc" | "accessed" => Ok(SortField::AccessedDate), "acc" | "accessed" => Ok(SortField::AccessedDate),
"cr" | "created" => Ok(SortField::CreatedDate), "cr" | "created" => Ok(SortField::CreatedDate),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册