blob: 27a4a79eae4b90b33bddb8853d1e2fa26dcbf506 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
// SPDX-License-Identifier: GPL-3.0-only
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<String> = 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());
let mut name = desktop_file.split(".");
if name.find(|x| *x == cli.search.strip_suffix(".desktop").unwrap_or(&cli.search)).is_some() {
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);
}
}
|