From 885a3e1d37c4ab041058d5adc3f6f4ae459fc347 Mon Sep 17 00:00:00 2001 From: quak Date: Wed, 20 Nov 2024 23:18:51 +0100 Subject: [PATCH] clap is weird --- bash_setup.sh | 11 +++++++--- src/args.rs | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 19 +++++----------- 3 files changed, 74 insertions(+), 17 deletions(-) create mode 100644 src/args.rs diff --git a/bash_setup.sh b/bash_setup.sh index abf5811..f84fe02 100644 --- a/bash_setup.sh +++ b/bash_setup.sh @@ -2,15 +2,20 @@ export PATH="$PATH:$PWD/target/debug/" pid=( $(ps -o ppid) ) +arg_pid=" --pid ${pid[-2]} " nav() { - cd "$(navigate ${pid[-2]} $*)" + cd "$(navigate ${arg_pid} $*)" } push() { - cd "$(navigate ${pid[-2]} push $*)" + cd "$(navigate push ${arg_pid} $*)" } pop() { - cd "$(navigate ${pid[-2]} pop $*)" + cd "$(navigate pop ${arg_pid} $*)" } + +stack() { + "navigate stack ${arg_pid}" +} \ No newline at end of file diff --git a/src/args.rs b/src/args.rs new file mode 100644 index 0000000..717fd0a --- /dev/null +++ b/src/args.rs @@ -0,0 +1,61 @@ +use clap:: {Parser, Args, Subcommand}; + +/// implements stack for cd wrapper script +#[derive(Debug, Parser)] +#[clap(author, version, about)] +pub struct CommandArgs +{ + + /// subcommand + #[clap(subcommand)] + action: Action, + + /// process id of parent shell + #[arg(long="pid")] + pid: u32, +} + +#[derive(Debug, Clone, Subcommand)] +pub enum Action +{ + /// navigate to path and add current path to the stack + push(PushArgs), + + /// navigate to last entry in stack and remove it + pop(PopArgs), + + /// display stack + stack(StackArgs), + + // bookmark(BookmarkArgs), +} + +#[derive(Debug, Clone, Args)] +pub struct PushArgs +{ + /// show stack + show_stack: Option, + + /// change to + path: String, +} + +#[derive(Debug, Clone, Args)] +pub struct PopArgs +{ + /// show stack + #[arg(short, long)] + show_stack: Option, +} + +#[derive(Debug, Clone, Args)] +pub struct StackArgs +{ + /// hide entry numbers + #[arg(short, long)] + hide_numbers: Option, + + /// show n entries + #[arg(short, long="lines")] + lines: Option, +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 202fc14..c9774ec 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,20 +1,11 @@ +mod args; + use std::env; +use clap::Parser; +use args::CommandArgs; fn main() { - let mut args : Vec = env::args().collect(); - let pid : i32 = args[1].parse().unwrap(); - - // remove arguments which don't require parsing - args.remove(0); // remove command name - args.remove(0); // remove pid - - for arg in args - { - if !(arg.clone().chars().nth(0).unwrap() == '-') - { - println!("{}", arg) - } - } + let args = CommandArgs::parse(); }