Skip to content

Commit ec33085

Browse files
committed
feat: add ctime linemode (#1295)
1 parent ab88588 commit ec33085

File tree

5 files changed

+44
-25
lines changed

5 files changed

+44
-25
lines changed

yazi-config/preset/keymap.toml

+18-17
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,14 @@ keymap = [
6363
{ on = "O", run = "open --interactive", desc = "Open selected files interactively" },
6464
{ on = "<Enter>", run = "open", desc = "Open selected files" },
6565
{ on = "<S-Enter>", run = "open --interactive", desc = "Open selected files interactively" },
66-
{ on = "y", run = "yank", desc = "Copy selected files" },
67-
{ on = "x", run = "yank --cut", desc = "Cut the selected files" },
68-
{ on = "Y", run = "unyank", desc = "Cancel the yank status" },
69-
{ on = "X", run = "unyank", desc = "Cancel the yank status" },
66+
{ on = "y", run = "yank", desc = "Yank selected files (copy)" },
67+
{ on = "x", run = "yank --cut", desc = "Yank selected files (cut)" },
7068
{ on = "p", run = "paste", desc = "Paste yanked files" },
7169
{ on = "P", run = "paste --force", desc = "Paste yanked files (overwrite if the destination exists)" },
7270
{ on = "-", run = "link", desc = "Symlink the absolute path of yanked files" },
7371
{ on = "_", run = "link --relative", desc = "Symlink the relative path of yanked files" },
72+
{ on = "Y", run = "unyank", desc = "Cancel the yank status" },
73+
{ on = "X", run = "unyank", desc = "Cancel the yank status" },
7474
{ on = "d", run = "remove", desc = "Trash selected files" },
7575
{ on = "D", run = "remove --permanently", desc = "Permanently delete selected files" },
7676
{ on = "a", run = "create", desc = "Create a file (ends with / for directories)" },
@@ -87,6 +87,7 @@ keymap = [
8787
# Linemode
8888
{ on = [ "m", "s" ], run = "linemode size", desc = "Set linemode to size" },
8989
{ on = [ "m", "p" ], run = "linemode permissions", desc = "Set linemode to permissions" },
90+
{ on = [ "m", "c" ], run = "linemode ctime", desc = "Set linemode to ctime" },
9091
{ on = [ "m", "m" ], run = "linemode mtime", desc = "Set linemode to mtime" },
9192
{ on = [ "m", "o" ], run = "linemode owner", desc = "Set linemode to owner" },
9293
{ on = [ "m", "n" ], run = "linemode none", desc = "Set linemode to none" },
@@ -107,19 +108,19 @@ keymap = [
107108
{ on = "N", run = "find_arrow --previous", desc = "Go to the previous found" },
108109

109110
# Sorting
110-
{ on = [ ",", "m" ], run = "sort modified --reverse=no", desc = "Sort by modified time" },
111-
{ on = [ ",", "M" ], run = "sort modified --reverse", desc = "Sort by modified time (reverse)" },
112-
{ on = [ ",", "c" ], run = "sort created --reverse=no", desc = "Sort by created time" },
113-
{ on = [ ",", "C" ], run = "sort created --reverse", desc = "Sort by created time (reverse)" },
114-
{ on = [ ",", "e" ], run = "sort extension --reverse=no", desc = "Sort by extension" },
115-
{ on = [ ",", "E" ], run = "sort extension --reverse", desc = "Sort by extension (reverse)" },
116-
{ on = [ ",", "a" ], run = "sort alphabetical --reverse=no", desc = "Sort alphabetically" },
117-
{ on = [ ",", "A" ], run = "sort alphabetical --reverse", desc = "Sort alphabetically (reverse)" },
118-
{ on = [ ",", "n" ], run = "sort natural --reverse=no", desc = "Sort naturally" },
119-
{ on = [ ",", "N" ], run = "sort natural --reverse", desc = "Sort naturally (reverse)" },
120-
{ on = [ ",", "s" ], run = "sort size --reverse=no", desc = "Sort by size" },
121-
{ on = [ ",", "S" ], run = "sort size --reverse", desc = "Sort by size (reverse)" },
122-
{ on = [ ",", "r" ], run = "sort random --reverse=no", desc = "Sort randomly" },
111+
{ on = [ ",", "m" ], run = [ "sort modified --reverse=no", "linemode mtime" ], desc = "Sort by modified time" },
112+
{ on = [ ",", "M" ], run = [ "sort modified --reverse", "linemode mtime" ], desc = "Sort by modified time (reverse)" },
113+
{ on = [ ",", "c" ], run = [ "sort created --reverse=no", "linemode ctime" ], desc = "Sort by created time" },
114+
{ on = [ ",", "C" ], run = [ "sort created --reverse", "linemode ctime" ], desc = "Sort by created time (reverse)" },
115+
{ on = [ ",", "e" ], run = "sort extension --reverse=no", desc = "Sort by extension" },
116+
{ on = [ ",", "E" ], run = "sort extension --reverse", desc = "Sort by extension (reverse)" },
117+
{ on = [ ",", "a" ], run = "sort alphabetical --reverse=no", desc = "Sort alphabetically" },
118+
{ on = [ ",", "A" ], run = "sort alphabetical --reverse", desc = "Sort alphabetically (reverse)" },
119+
{ on = [ ",", "n" ], run = "sort natural --reverse=no", desc = "Sort naturally" },
120+
{ on = [ ",", "N" ], run = "sort natural --reverse", desc = "Sort naturally (reverse)" },
121+
{ on = [ ",", "s" ], run = [ "sort size --reverse=no", "linemode size" ], desc = "Sort by size" },
122+
{ on = [ ",", "S" ], run = [ "sort size --reverse", "linemode size" ], desc = "Sort by size (reverse)" },
123+
{ on = [ ",", "r" ], run = "sort random --reverse=no", desc = "Sort randomly" },
123124

124125
# Tabs
125126
{ on = "t", run = "tab_create --current", desc = "Create a new tab with CWD" },

yazi-config/src/preview/preview.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::{path::PathBuf, str::FromStr, time::{self, SystemTime}};
1+
use std::{path::PathBuf, str::FromStr, time::{SystemTime, UNIX_EPOCH}};
22

33
use anyhow::Context;
44
use serde::{Deserialize, Serialize};
@@ -26,8 +26,8 @@ pub struct Preview {
2626
impl Preview {
2727
#[inline]
2828
pub fn tmpfile(&self, prefix: &str) -> PathBuf {
29-
let nanos = SystemTime::now().duration_since(time::UNIX_EPOCH).unwrap().as_nanos();
30-
self.cache_dir.join(format!("{prefix}-{}", nanos / 1000))
29+
let time = SystemTime::now().duration_since(UNIX_EPOCH).expect("Time went backwards");
30+
self.cache_dir.join(format!("{prefix}-{}", time.as_nanos() / 1000))
3131
}
3232
}
3333

yazi-plugin/preset/components/linemode.lua

+19-2
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,26 @@ function Linemode:size(file)
2424
return ui.Line(size and ya.readable_size(size) or "")
2525
end
2626

27+
function Linemode:ctime(file)
28+
local time = (file.cha.created or 0) // 1
29+
if time == 0 then
30+
return ui.Line("")
31+
elseif os.date("%Y", time) == os.date("%Y") then
32+
return ui.Line(os.date("%m/%d %H:%M", time))
33+
else
34+
return ui.Line(os.date("%m/%d %Y", time))
35+
end
36+
end
37+
2738
function Linemode:mtime(file)
28-
local time = file.cha.modified
29-
return ui.Line(time and os.date("%y-%m-%d %H:%M", time // 1) or "")
39+
local time = (file.cha.modified or 0) // 1
40+
if time == 0 then
41+
return ui.Line("")
42+
elseif os.date("%Y", time) == os.date("%Y") then
43+
return ui.Line(os.date("%m/%d %H:%M", time))
44+
else
45+
return ui.Line(os.date("%m/%d %Y", time))
46+
end
3047
end
3148

3249
function Linemode:permissions(file) return ui.Line(file.cha:permissions() or "") end

yazi-plugin/preset/plugins/zoxide.lua

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ local function entry()
8181

8282
local target = output.stdout:gsub("\n$", "")
8383
if target ~= "" then
84-
ya.manager_emit("cd", { output.stdout:gsub("\n$", "") })
84+
ya.manager_emit("cd", { target })
8585
end
8686
end
8787

yazi-shared/src/time.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
use std::time::{self, SystemTime};
1+
use std::time::{SystemTime, UNIX_EPOCH};
22

3+
#[inline]
34
pub fn timestamp_us() -> u64 {
4-
SystemTime::now().duration_since(time::UNIX_EPOCH).unwrap().as_micros() as u64
5+
SystemTime::now().duration_since(UNIX_EPOCH).expect("Time went backwards").as_micros() as _
56
}

0 commit comments

Comments
 (0)