diff options
author | Kyohei Uto <im@kyoheiu.dev> | 2024-03-03 11:32:22 +0900 |
---|---|---|
committer | Kyohei Uto <im@kyoheiu.dev> | 2024-03-03 11:32:27 +0900 |
commit | b0ce98e39b4ee369b2ab1d602381734c08c8a4a3 (patch) | |
tree | 41236f632e763294de608ebf21d4f5a07d28f717 | |
parent | b1e69d6d4479f4f9a8eb044d00dc4967bbd262c1 (diff) |
Show pointed path when symlink
-rw-r--r-- | src/state.rs | 94 |
1 files changed, 53 insertions, 41 deletions
diff --git a/src/state.rs b/src/state.rs index 23c17dc..6deac74 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1647,56 +1647,68 @@ impl State { /// Return footer string. fn make_footer(&self, item: &ItemInfo) -> String { - match &item.file_ext { - Some(ext) => { - let footer = match item.permissions { - Some(permissions) => { - format!( - " {}/{} {} {} {}", + let mut footer = String::new(); + if item.file_type == FileType::Symlink { + footer = " linked to: ".to_owned(); + match &item.symlink_dir_path { + Some(true_path) => { + footer.push_str(true_path.to_str().unwrap_or("(invalid unicode path)")) + } + None => match fs::read_link(&item.file_path) { + Ok(true_path) => { + footer.push_str(true_path.to_str().unwrap_or("(invalid unicode path)")) + } + Err(_) => footer.push_str("Broken link"), + }, + } + } else { + match &item.file_ext { + Some(ext) => { + footer = match item.permissions { + Some(permissions) => { + format!( + " {}/{} {} {} {}", + self.layout.nums.index + 1, + self.list.len(), + ext.clone(), + to_proper_size(item.file_size), + convert_to_permissions(permissions) + ) + } + None => format!( + " {}/{} {} {}", self.layout.nums.index + 1, self.list.len(), ext.clone(), to_proper_size(item.file_size), - convert_to_permissions(permissions) - ) - } - None => format!( - " {}/{} {} {}", - self.layout.nums.index + 1, - self.list.len(), - ext.clone(), - to_proper_size(item.file_size), - ), - }; - footer - .chars() - .take(self.layout.terminal_column.into()) - .collect() - } - None => { - let footer = match item.permissions { - Some(permissions) => { - format!( - " {}/{} {} {}", + ), + }; + } + None => { + footer = match item.permissions { + Some(permissions) => { + format!( + " {}/{} {} {}", + self.layout.nums.index + 1, + self.list.len(), + to_proper_size(item.file_size), + convert_to_permissions(permissions) + ) + } + None => format!( + " {}/{} {}", self.layout.nums.index + 1, self.list.len(), to_proper_size(item.file_size), - convert_to_permissions(permissions) - ) - } - None => format!( - " {}/{} {}", - self.layout.nums.index + 1, - self.list.len(), - to_proper_size(item.file_size), - ), - }; - footer - .chars() - .take(self.layout.terminal_column.into()) - .collect() + ), + }; + } } } + footer + .chars() + .take(self.layout.terminal_column.into()) + .collect() } /// Scroll down previewed text. |