diff --git a/yazi-config/preset/keymap.toml b/yazi-config/preset/keymap.toml index 5139472d..a9afe2b9 100644 --- a/yazi-config/preset/keymap.toml +++ b/yazi-config/preset/keymap.toml @@ -107,19 +107,19 @@ keymap = [ { on = "N", run = "find_arrow --previous", desc = "Go to the previous found" }, # Sorting - { 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)" }, - { on = [ ",", "r" ], run = "sort random --reverse=no", desc = "Sort randomly" }, + { on = [ ",", "m" ], run = [ "sort modified --reverse=no", "linemode mtime" ], desc = "Sort by modified time" }, + { on = [ ",", "M" ], run = [ "sort modified --reverse", "linemode mtime" ], desc = "Sort by modified time (reverse)" }, + { on = [ ",", "c" ], run = [ "sort created --reverse=no", "linemode ctime" ], desc = "Sort by created time" }, + { on = [ ",", "C" ], run = [ "sort created --reverse", "linemode ctime" ], 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", "linemode size" ], desc = "Sort by size" }, + { on = [ ",", "S" ], run = [ "sort size --reverse", "linemode size" ], desc = "Sort by size (reverse)" }, + { on = [ ",", "r" ], run = "sort random --reverse=no", desc = "Sort randomly" }, # Tabs { on = "t", run = "tab_create --current", desc = "Create a new tab with CWD" }, diff --git a/yazi-config/src/preview/preview.rs b/yazi-config/src/preview/preview.rs index 5f38a109..866b3f32 100644 --- a/yazi-config/src/preview/preview.rs +++ b/yazi-config/src/preview/preview.rs @@ -1,4 +1,4 @@ -use std::{path::PathBuf, str::FromStr, time::{self, SystemTime}}; +use std::{path::PathBuf, str::FromStr, time::{SystemTime, UNIX_EPOCH}}; use anyhow::Context; use serde::{Deserialize, Serialize}; @@ -26,8 +26,8 @@ pub struct Preview { impl Preview { #[inline] pub fn tmpfile(&self, prefix: &str) -> PathBuf { - let nanos = SystemTime::now().duration_since(time::UNIX_EPOCH).unwrap().as_nanos(); - self.cache_dir.join(format!("{prefix}-{}", nanos / 1000)) + let time = SystemTime::now().duration_since(UNIX_EPOCH).expect("Time went backwards"); + self.cache_dir.join(format!("{prefix}-{}", time.as_nanos() / 1000)) } } diff --git a/yazi-plugin/preset/components/linemode.lua b/yazi-plugin/preset/components/linemode.lua index 4c61af37..3e4ccc6a 100644 --- a/yazi-plugin/preset/components/linemode.lua +++ b/yazi-plugin/preset/components/linemode.lua @@ -24,9 +24,26 @@ function Linemode:size(file) return ui.Line(size and ya.readable_size(size) or "") end +function Linemode:ctime(file) + local time = (file.cha.created or 0) // 1 + if time == 0 then + return ui.Line("") + elseif os.date("%Y", time) == os.date("%Y") then + return ui.Line(os.date("%m/%d %H:%M", time)) + else + return ui.Line(os.date("%m/%d %Y", time)) + end +end + function Linemode:mtime(file) - local time = file.cha.modified - return ui.Line(time and os.date("%y-%m-%d %H:%M", time // 1) or "") + local time = (file.cha.modified or 0) // 1 + if time == 0 then + return ui.Line("") + elseif os.date("%Y", time) == os.date("%Y") then + return ui.Line(os.date("%m/%d %H:%M", time)) + else + return ui.Line(os.date("%m/%d %Y", time)) + end end function Linemode:permissions(file) return ui.Line(file.cha:permissions() or "") end diff --git a/yazi-shared/src/time.rs b/yazi-shared/src/time.rs index 6a75756a..8d7b1f38 100644 --- a/yazi-shared/src/time.rs +++ b/yazi-shared/src/time.rs @@ -1,5 +1,6 @@ -use std::time::{self, SystemTime}; +use std::time::{SystemTime, UNIX_EPOCH}; +#[inline] pub fn timestamp_us() -> u64 { - SystemTime::now().duration_since(time::UNIX_EPOCH).unwrap().as_micros() as u64 + SystemTime::now().duration_since(UNIX_EPOCH).expect("Time went backwards").as_micros() as _ }