From 54e4cce0841d670aeb9d5631bb4e614dc688b4ce Mon Sep 17 00:00:00 2001 From: Dheepak Krishnamurthy Date: Tue, 11 May 2021 11:14:03 -0600 Subject: [PATCH] Add completion --- Cargo.lock | 141 ++++++++++++++++++++++++++++++- Cargo.toml | 4 + build.rs | 37 ++++++++ completions/.gitkeep | 0 completions/_taskwarrior-tui | 38 +++++++++ completions/taskwarrior-tui.bash | 57 +++++++++++++ completions/taskwarrior-tui.fish | 4 + 7 files changed, 279 insertions(+), 2 deletions(-) create mode 100644 build.rs create mode 100644 completions/.gitkeep create mode 100644 completions/_taskwarrior-tui create mode 100644 completions/taskwarrior-tui.bash create mode 100644 completions/taskwarrior-tui.fish diff --git a/Cargo.lock b/Cargo.lock index 3e8c73a..dda324f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -336,11 +336,52 @@ dependencies = [ "atty", "bitflags", "strsim 0.8.0", - "textwrap", + "textwrap 0.11.0", "unicode-width", "vec_map", ] +[[package]] +name = "clap" +version = "3.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd1061998a501ee7d4b6d449020df3266ca3124b941ec56cf2005c3779ca142" +dependencies = [ + "atty", + "bitflags", + "clap_derive", + "indexmap", + "lazy_static", + "os_str_bytes", + "strsim 0.10.0", + "termcolor", + "textwrap 0.12.1", + "unicode-width", + "vec_map", +] + +[[package]] +name = "clap_derive" +version = "3.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "370f715b81112975b1b69db93e0b56ea4cd4e5002ac43b2da8474106a54096a1" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_generate" +version = "3.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adf420f8b687b628d2915ccfd43a660c437a170432e3fbcb66944e8717a0d68f" +dependencies = [ + "clap 3.0.0-beta.2", +] + [[package]] name = "clicolors-control" version = "1.0.1" @@ -766,6 +807,21 @@ dependencies = [ "web-sys", ] +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" + +[[package]] +name = "heck" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "hermit-abi" version = "0.1.18" @@ -781,6 +837,16 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +[[package]] +name = "indexmap" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" +dependencies = [ + "autocfg", + "hashbrown", +] + [[package]] name = "instant" version = "0.1.9" @@ -973,6 +1039,12 @@ version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3" +[[package]] +name = "os_str_bytes" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb2e1c3ee07430c2cf76151675e583e0f19985fa6efae47d6848a3e2c824f85" + [[package]] name = "parking" version = "2.0.0" @@ -1034,6 +1106,30 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + [[package]] name = "proc-macro-hack" version = "0.5.19" @@ -1341,6 +1437,12 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "syn" version = "1.0.67" @@ -1388,7 +1490,9 @@ dependencies = [ "better-panic", "cassowary", "chrono", - "clap", + "clap 2.33.3", + "clap 3.0.0-beta.2", + "clap_generate", "crossterm", "dirs", "futures", @@ -1411,6 +1515,15 @@ dependencies = [ "uuid", ] +[[package]] +name = "termcolor" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +dependencies = [ + "winapi-util", +] + [[package]] name = "termios" version = "0.3.3" @@ -1429,6 +1542,15 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "textwrap" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "203008d98caf094106cfaba70acfed15e18ed3ddb7d94e49baec153a2b462789" +dependencies = [ + "unicode-width", +] + [[package]] name = "time" version = "0.1.43" @@ -1516,6 +1638,12 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +[[package]] +name = "version_check" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" + [[package]] name = "waker-fn" version = "1.1.0" @@ -1635,6 +1763,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 3cf6566..1e323ba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,6 +45,10 @@ unicode-truncate = "0.2" unicode-width = "0.1" uuid = { version = "0.8.1", features = ["serde", "v4"] } +[build-dependencies] +clap = "3.0.0-beta.2" +clap_generate = "3.0.0-beta.2" + [package.metadata.rpm] package = "taskwarrior-tui" diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..86a27d2 --- /dev/null +++ b/build.rs @@ -0,0 +1,37 @@ +#![allow(dead_code)] +use clap::{App, Arg}; +use clap_generate::{generate_to, generators::*}; + +const APP_VERSION: &str = env!("CARGO_PKG_VERSION"); +const APP_NAME: &str = env!("CARGO_PKG_NAME"); + +fn main() { + let mut app = App::new(APP_NAME) + .version(APP_VERSION) + .author("Dheepak Krishnamurthy <@kdheepak>") + .about("A taskwarrior terminal user interface") + .arg( + Arg::new("config") + .short('c') + .long("config") + .value_name("FILE") + .about("Sets a custom config file") + .takes_value(true), + ) + .arg( + Arg::new("report") + .short('r') + .long("report") + .value_name("STRING") + .about("Sets default report") + .takes_value(true), + ); + + app.set_bin_name(APP_NAME); + let name = app.get_name().to_string(); + let outdir = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("completions/"); + dbg!(&outdir); + generate_to::(&mut app, &name, &outdir); + generate_to::(&mut app, &name, &outdir); + generate_to::(&mut app, &name, &outdir); +} diff --git a/completions/.gitkeep b/completions/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/completions/_taskwarrior-tui b/completions/_taskwarrior-tui new file mode 100644 index 0000000..eeb638e --- /dev/null +++ b/completions/_taskwarrior-tui @@ -0,0 +1,38 @@ +#compdef taskwarrior-tui + +autoload -U is-at-least + +_taskwarrior-tui() { + typeset -A opt_args + typeset -a _arguments_options + local ret=1 + + if is-at-least 5.2; then + _arguments_options=(-s -S -C) + else + _arguments_options=(-s -C) + fi + + local context curcontext="$curcontext" state line + _arguments "${_arguments_options[@]}" \ +'-c+[Sets a custom config file]' \ +'--config=[Sets a custom config file]' \ +'-r+[Sets default report]' \ +'--report=[Sets default report]' \ +'-h[Prints help information]' \ +'--help[Prints help information]' \ +'-V[Prints version information]' \ +'--version[Prints version information]' \ +&& ret=0 + +} + +(( $+functions[_taskwarrior-tui_commands] )) || +_taskwarrior-tui_commands() { + local commands; commands=( + + ) + _describe -t commands 'taskwarrior-tui commands' commands "$@" +} + +_taskwarrior-tui "$@" \ No newline at end of file diff --git a/completions/taskwarrior-tui.bash b/completions/taskwarrior-tui.bash new file mode 100644 index 0000000..7436bc7 --- /dev/null +++ b/completions/taskwarrior-tui.bash @@ -0,0 +1,57 @@ +_taskwarrior-tui() { + local i cur prev opts cmds + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + cmd="" + opts="" + + for i in ${COMP_WORDS[@]} + do + case "${i}" in + taskwarrior-tui) + cmd="taskwarrior__tui" + ;; + + *) + ;; + esac + done + + case "${cmd}" in + taskwarrior__tui) + opts=" -c -r -h -V --config --report --help --version " + if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + + --config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --report) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -r) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + + esac +} + +complete -F _taskwarrior-tui -o bashdefault -o default taskwarrior-tui diff --git a/completions/taskwarrior-tui.fish b/completions/taskwarrior-tui.fish new file mode 100644 index 0000000..d6afe62 --- /dev/null +++ b/completions/taskwarrior-tui.fish @@ -0,0 +1,4 @@ +complete -c taskwarrior-tui -n "__fish_use_subcommand" -s c -l config -d 'Sets a custom config file' -r +complete -c taskwarrior-tui -n "__fish_use_subcommand" -s r -l report -d 'Sets default report' -r +complete -c taskwarrior-tui -n "__fish_use_subcommand" -s h -l help -d 'Prints help information' +complete -c taskwarrior-tui -n "__fish_use_subcommand" -s V -l version -d 'Prints version information'