From 73815e97a91cd51db9d3b96d69891f6f6c1f58d0 Mon Sep 17 00:00:00 2001 From: axtlos Date: Fri, 19 Apr 2024 23:10:16 +0200 Subject: Add program --- src/main.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/main.rs (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..18ee8e9 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,51 @@ +mod args; +use std::fs; +use std::env; +use std::process::exit; +use clap::Parser; +use crate::args::Cli; + +fn main() { + let cli = Cli::parse(); + + let args: Vec = env::args().collect(); + let xdg_data_dirs = std::env::var("XDG_DATA_DIRS").unwrap(); + let data_dirs = xdg_data_dirs.split(":"); + + let mut found = false; + let home = match env::var("HOME") { + Ok(var) => var, + Err(_) => exit(1), + }; + for dirs in data_dirs { + if (dirs.starts_with(&home) && cli.skip_home) || (dirs.starts_with(".") && cli.skip_dot) { + continue + } + + let files = match fs::read_dir(format!("{}/applications",dirs)) { + Ok(file) => file, + Err(_) => continue, + }; + for file in files { + let desktop_file = format!("{}", file.as_ref().unwrap().file_name().into_string().unwrap()); + if desktop_file.contains(&cli.search) { + let path = file.as_ref().unwrap().path(); + let out = if cli.show_tilde { + format!("{}", path.display().to_string().replace(&home, "~")) + } else { + path.display().to_string() + }; + println!("{}", out); + found = true; + if !cli.all { + return + } + } + } + } + + if !found { + eprintln!("No {} in ({})", args[1], xdg_data_dirs); + exit(1); + } +} -- cgit v1.2.3