Skip to content

Commit

Permalink
feat: add ctime linemode (#1295)
Browse files Browse the repository at this point in the history
  • Loading branch information
sxyazi committed Jul 14, 2024
1 parent ab88588 commit ec33085
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 25 deletions.
35 changes: 18 additions & 17 deletions yazi-config/preset/keymap.toml
Original file line number Diff line number Diff line change
Expand Up @@ -63,14 +63,14 @@ keymap = [
{ on = "O", run = "open --interactive", desc = "Open selected files interactively" },
{ on = "<Enter>", run = "open", desc = "Open selected files" },
{ on = "<S-Enter>", run = "open --interactive", desc = "Open selected files interactively" },
{ on = "y", run = "yank", desc = "Copy selected files" },
{ on = "x", run = "yank --cut", desc = "Cut the selected files" },
{ on = "Y", run = "unyank", desc = "Cancel the yank status" },
{ on = "X", run = "unyank", desc = "Cancel the yank status" },
{ on = "y", run = "yank", desc = "Yank selected files (copy)" },
{ on = "x", run = "yank --cut", desc = "Yank selected files (cut)" },
{ on = "p", run = "paste", desc = "Paste yanked files" },
{ on = "P", run = "paste --force", desc = "Paste yanked files (overwrite if the destination exists)" },
{ on = "-", run = "link", desc = "Symlink the absolute path of yanked files" },
{ on = "_", run = "link --relative", desc = "Symlink the relative path of yanked files" },
{ on = "Y", run = "unyank", desc = "Cancel the yank status" },
{ on = "X", run = "unyank", desc = "Cancel the yank status" },
{ on = "d", run = "remove", desc = "Trash selected files" },
{ on = "D", run = "remove --permanently", desc = "Permanently delete selected files" },
{ on = "a", run = "create", desc = "Create a file (ends with / for directories)" },
Expand All @@ -87,6 +87,7 @@ keymap = [
# Linemode
{ on = [ "m", "s" ], run = "linemode size", desc = "Set linemode to size" },
{ on = [ "m", "p" ], run = "linemode permissions", desc = "Set linemode to permissions" },
{ on = [ "m", "c" ], run = "linemode ctime", desc = "Set linemode to ctime" },
{ on = [ "m", "m" ], run = "linemode mtime", desc = "Set linemode to mtime" },
{ on = [ "m", "o" ], run = "linemode owner", desc = "Set linemode to owner" },
{ on = [ "m", "n" ], run = "linemode none", desc = "Set linemode to none" },
Expand All @@ -107,19 +108,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" },
Expand Down
6 changes: 3 additions & 3 deletions yazi-config/src/preview/preview.rs
Original file line number Diff line number Diff line change
@@ -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};
Expand Down Expand Up @@ -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))
}
}

Expand Down
21 changes: 19 additions & 2 deletions yazi-plugin/preset/components/linemode.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion yazi-plugin/preset/plugins/zoxide.lua
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ local function entry()

local target = output.stdout:gsub("\n$", "")
if target ~= "" then
ya.manager_emit("cd", { output.stdout:gsub("\n$", "") })
ya.manager_emit("cd", { target })
end
end

Expand Down
5 changes: 3 additions & 2 deletions yazi-shared/src/time.rs
Original file line number Diff line number Diff line change
@@ -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 _
}

0 comments on commit ec33085

Please sign in to comment.