From 5c0d2d07d0aa42fa6c30777a1864bbdab36fc6fc Mon Sep 17 00:00:00 2001 From: Ben S Date: Sat, 21 Jun 2014 10:11:50 +0100 Subject: [PATCH] Show files on the end of symlinks --- file.rs | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/file.rs b/file.rs index 497f23e..d4886a9 100644 --- a/file.rs +++ b/file.rs @@ -17,11 +17,11 @@ use filetype::HasType; // the actual path. pub struct File<'a> { - pub name: &'a str, - pub dir: &'a Dir<'a>, - pub ext: Option<&'a str>, - pub path: &'a Path, - pub stat: io::FileStat, + pub name: &'a str, + pub dir: &'a Dir<'a>, + pub ext: Option<&'a str>, + pub path: &'a Path, + pub stat: io::FileStat, pub parts: Vec, } @@ -88,10 +88,11 @@ impl<'a> File<'a> { _ => vec![], } } + pub fn display(&self, column: &Column) -> String { match *column { Permissions => self.permissions_string(), - FileName => self.file_colour().paint(self.name), + FileName => self.file_name(), FileSize(use_iec) => self.file_size(use_iec), // Display the ID if the user/group doesn't exist, which @@ -104,7 +105,23 @@ impl<'a> File<'a> { Group => get_group_name(self.stat.unstable.gid as u32).unwrap_or(self.stat.unstable.gid.to_str()), } } - + + fn file_name(&self) -> String { + let displayed_name = self.file_colour().paint(self.name); + if self.stat.kind == io::TypeSymlink { + match fs::readlink(self.path) { + Ok(path) => format!("{} => {}", displayed_name, path.display()), + Err(e) => { + println!("{}", e); + displayed_name + }, + } + } + else { + displayed_name + } + } + fn file_size(&self, use_iec_prefixes: bool) -> String { // Don't report file sizes for directories. I've never looked // at one of those numbers and gained any information from it. -- GitLab