diff --git a/yazi-config/preset/keymap.toml b/yazi-config/preset/keymap.toml index 8443f885..9d9505bb 100644 --- a/yazi-config/preset/keymap.toml +++ b/yazi-config/preset/keymap.toml @@ -88,6 +88,7 @@ keymap = [ { on = [ "m", "s" ], run = "linemode size", desc = "Set linemode to size" }, { on = [ "m", "p" ], run = "linemode permissions", desc = "Set linemode to permissions" }, { 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" }, # Copy diff --git a/yazi-plugin/preset/components/folder.lua b/yazi-plugin/preset/components/folder.lua index 05b73860..9f25ae28 100644 --- a/yazi-plugin/preset/components/folder.lua +++ b/yazi-plugin/preset/components/folder.lua @@ -21,6 +21,14 @@ function Folder:linemode(area, files) spans[#spans + 1] = ui.Span(time and os.date("%y-%m-%d %H:%M", time // 1) or "") elseif mode == "permissions" then spans[#spans + 1] = ui.Span(f.cha:permissions() or "") + elseif mode == "owner" then + if f.cha.uid and f.cha.gid then + local user = ya.user_name(f.cha.uid) + local group = ya.user_name(f.cha.uid) + if user and group then + spans[#spans + 1] = ui.Span(user .. ":" .. group) + end + end end spans[#spans + 1] = ui.Span(" ") diff --git a/yazi-plugin/src/cha/cha.rs b/yazi-plugin/src/cha/cha.rs index af3e4813..f0874ac4 100644 --- a/yazi-plugin/src/cha/cha.rs +++ b/yazi-plugin/src/cha/cha.rs @@ -1,6 +1,6 @@ use std::time::{Duration, SystemTime, UNIX_EPOCH}; -use mlua::{AnyUserData, ExternalError, Lua, Table, UserDataFields, UserDataMethods, UserDataRef}; +use mlua::{AnyUserData, ExternalError, Lua, Table, UserDataFields, UserDataMethods, UserDataRef, Value::Nil}; use yazi_shared::fs::ChaKind; use crate::bindings::Cast; @@ -23,10 +23,20 @@ impl Cha { reg.add_field_method_get("is_exec", |_, me| Ok(me.is_exec())); reg.add_field_method_get("is_sticky", |_, me| Ok(me.is_sticky())); - #[cfg(unix)] + #[allow(unused_variables)] { - reg.add_field_method_get("uid", |_, me| Ok(me.uid)); - reg.add_field_method_get("gid", |_, me| Ok(me.gid)); + reg.add_field_method_get("uid", |_, me| { + #[cfg(unix)] + return Ok(me.uid); + #[cfg(windows)] + return Ok(Nil); + }); + reg.add_field_method_get("gid", |_, me| { + #[cfg(unix)] + return Ok(me.gid); + #[cfg(windows)] + return Ok(Nil); + }); } reg.add_field_method_get("length", |_, me| Ok(me.len)); @@ -39,6 +49,7 @@ impl Cha { reg.add_field_method_get("accessed", |_, me| { Ok(me.accessed.and_then(|t| t.duration_since(UNIX_EPOCH).map(|d| d.as_secs_f64()).ok())) }); + #[allow(unused_variables)] reg.add_method("permissions", |_, me, ()| { Ok( #[cfg(unix)]