mirror of
https://git.sr.ht/~nixgoat/vento
synced 2024-11-16 12:02:49 +00:00
Lux Aliaga
13e28e445c
I've backtracked from using Clap and instead will keep using my own custom command parser. I'll be using the man crate instead. These manpages have the new syntax which I'll implement in the following commits. This also uses cargo-make to install the manpages because I don't want the manpages being replaced everytime I rebuild.
111 lines
3.5 KiB
Rust
111 lines
3.5 KiB
Rust
/*
|
|
* Vento, a CLI inventory for your files.
|
|
* Copyright (C) 2022 Lux Aliaga
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
use anyhow::Result;
|
|
use man::prelude::*;
|
|
use std::env;
|
|
use std::fs::{create_dir_all, File};
|
|
use std::io::Write;
|
|
|
|
fn main() -> Result<()> {
|
|
if cfg!(unix) {
|
|
let pages = [vento()?, take()?, drop()?];
|
|
|
|
let tempdir = env::temp_dir().join("vento-man");
|
|
|
|
create_dir_all(tempdir.clone())?;
|
|
|
|
for page in 0..pages.len() {
|
|
let tempfile = tempdir.join(pages[page].clone().1);
|
|
let mut file = File::create(tempfile).unwrap();
|
|
write!(&mut file, "{}", pages[page].clone().0).unwrap();
|
|
}
|
|
}
|
|
Ok(())
|
|
}
|
|
|
|
fn vento() -> Result<(String, String)> {
|
|
let page = Manual::new("vento")
|
|
.about("a CLI inventory for your files")
|
|
.author(Author::new("Lux Aliaga").email("they@mint.lgbt"))
|
|
.description("List files and directories in the currently active inventory, the files in SLOT, the files in DIRECTORY or the files in DIRECTORY in SLOT.")
|
|
.flag(
|
|
Flag::new()
|
|
.short("-s")
|
|
.long("--switch")
|
|
.help("Switches inventory slots"),
|
|
)
|
|
.flag(
|
|
Flag::new()
|
|
.short("-i")
|
|
.long("--init")
|
|
.help("Initializes Vento with all its respective directories"),
|
|
)
|
|
.flag(
|
|
Flag::new()
|
|
.short("-h")
|
|
.long("--help")
|
|
.help("Shows the help message"),
|
|
)
|
|
.arg(Arg::new("[SLOT]"))
|
|
.arg(Arg::new("[DIRECTORY]"))
|
|
.custom(
|
|
Section::new("before starting")
|
|
.paragraph("Vento will first need to initialize the respective directories before usage. Do this by running vento -i.")
|
|
)
|
|
.render();
|
|
|
|
Ok((page, String::from("vento.1")))
|
|
}
|
|
|
|
fn take() -> Result<(String, String)> {
|
|
let page = Manual::new("take")
|
|
.about("a file grabber for Vento")
|
|
.author(Author::new("Lux Aliaga").email("they@mint.lgbt"))
|
|
.description("Take FILE and put it in the inventory.")
|
|
.option(
|
|
Opt::new("slot")
|
|
.short("-s")
|
|
.long("--slot")
|
|
.help("The slot to put the file in"),
|
|
)
|
|
.arg(Arg::new("FILE"))
|
|
.render();
|
|
|
|
Ok((page, String::from("take.1")))
|
|
}
|
|
|
|
fn drop() -> Result<(String, String)> {
|
|
let page = Manual::new("drop")
|
|
.about("a file dropper for Vento")
|
|
.author(Author::new("Lux Aliaga").email("they@mint.lgbt"))
|
|
.description("Take FILE off the inventory and drop it in DESTINATION.")
|
|
.option(
|
|
Opt::new("slot")
|
|
.short("-s")
|
|
.long("--slot")
|
|
.help("The slot to take the file from"),
|
|
)
|
|
.arg(Arg::new("FILE"))
|
|
.arg(Arg::new("[DESTINATION]"))
|
|
.render();
|
|
|
|
Ok((page, String::from("drop.1")))
|
|
}
|