diff options
author | qkzk <qu3nt1n@gmail.com> | 2023-11-05 14:53:23 +0100 |
---|---|---|
committer | qkzk <qu3nt1n@gmail.com> | 2023-11-05 14:53:23 +0100 |
commit | a92709acb4ded784a718e5d47dafd51eb24730de (patch) | |
tree | 380f0f93363b37e8f5f3ec0051341e51619c4eb3 | |
parent | 5afa594ed846ab9317072adbf4cbc53ac8a8ec84 (diff) |
add fold symbols in filesystem
-rw-r--r-- | src/trees.rs | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/trees.rs b/src/trees.rs index 307c362..f1b66ec 100644 --- a/src/trees.rs +++ b/src/trees.rs @@ -297,11 +297,11 @@ impl FileSystem { let mut selected_index = 0; while let Some((prefix, current)) = stack.pop() { - let Some(node) = &self.nodes.get(current) else { + let Some(current_node) = &self.nodes.get(current) else { continue; }; - if node.selected { + if current_node.selected { selected_index = content.len(); } @@ -311,20 +311,29 @@ impl FileSystem { let filename = filename_from_path(current).unwrap_or_default().to_owned(); let mut color_effect = ColorEffect::new(&fileinfo); - if node.selected { + if current_node.selected { color_effect.effect |= tuikit::attr::Effect::REVERSE; } + let filename_text = if current.is_dir() && !current.is_symlink() { + if current_node.folded { + format!("▸ {}", filename) + } else { + format!("▾ {}", filename) + } + } else { + filename + }; content.push(( fileinfo.format_no_filename().unwrap_or_default(), prefix.to_owned(), - ColoredString::new(filename, color_effect, current.to_owned()), + ColoredString::new(filename_text, color_effect, current.to_owned()), )); - if !node.folded { + if current.is_dir() && !current.is_symlink() && !current_node.folded { let first_prefix = first_prefix(prefix.clone()); let other_prefix = other_prefix(prefix); - if let Some(children) = &node.children { + if let Some(children) = ¤t_node.children { let mut leaves = children.iter(); let Some(first_leaf) = leaves.next() else { continue; @@ -336,6 +345,7 @@ impl FileSystem { } } } + if content.len() > required_height { break; } |