From ca0ecf6d69063fbeb6265752261032b772441126 Mon Sep 17 00:00:00 2001 From: steven-omaha <35634100+steven-omaha@users.noreply.github.com> Date: Thu, 12 Jan 2023 12:04:51 +0100 Subject: [PATCH] improve printing of found packages --- src/args.rs | 2 +- src/core.rs | 41 +++++++++++++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/args.rs b/src/args.rs index e1ad1e9..445a02e 100644 --- a/src/args.rs +++ b/src/args.rs @@ -46,7 +46,7 @@ fn get_arg_parser() -> Command<'static> { ) .subcommand( Command::new(SEARCH) - .about("search for packages which match a provided regex") + .about("search for packages which match a provided string literal or regex") .arg_required_else_help(true) .arg(Arg::new("string")), ) diff --git a/src/core.rs b/src/core.rs index dd9a5ed..caca216 100644 --- a/src/core.rs +++ b/src/core.rs @@ -12,6 +12,7 @@ use crate::args; use crate::backend::{Backend, Backends, ToDoPerBackend}; use crate::cmd::run_edit_command; use crate::env::get_single_var; +use crate::grouping::{Package, Section}; use crate::path::get_pacdef_group_dir; use crate::ui::get_user_confirmation; use crate::Group; @@ -30,7 +31,6 @@ impl Pacdef { #[allow(clippy::unit_arg)] pub fn run_action_from_arg(self) -> Result<()> { // TODO review - // TODO search match self.args.subcommand() { Some((action::CLEAN, _)) => Ok(self.clean_packages()), Some((action::EDIT, groups)) => { @@ -259,16 +259,45 @@ impl Pacdef { } } - vec.sort_unstable(); - - for (g, s, p) in vec { - println!("{}:{}:{}", g.name, s.name, p.name); - } + print_triples(vec); Ok(()) } } +fn print_triples(mut vec: Vec<(&Group, &Section, &Package)>) { + vec.sort_unstable(); + + let mut g0 = String::new(); + let mut s0 = String::new(); + + let mut iter = vec.into_iter().peekable(); + + while let Some((g, s, p)) = iter.next() { + if g.name != g0 { + println!("{}", g.name); + for _ in 0..g.name.len() { + print!("-"); + } + println!(); + s0.clear(); + } + if s.name != s0 { + println!("[{}]", s.name); + } + println!("{p}"); + + g0 = g.name.clone(); + s0 = s.name.clone(); + + if let Some((g, _, _)) = iter.peek() { + if g.name != g0 { + println!(); + } + } + } +} + fn get_assumed_group_file_names(arg_match: &ArgMatches) -> Result> { let groups_dir = get_pacdef_group_dir()?;