@@ -8,6 +8,10 @@ description = "Static site generator" | |||||
homepage = "https://github.com/Keats/gutenberg" | homepage = "https://github.com/Keats/gutenberg" | ||||
repository = "https://github.com/Keats/gutenberg" | repository = "https://github.com/Keats/gutenberg" | ||||
keywords = ["static", "site", "generator", "blog"] | keywords = ["static", "site", "generator", "blog"] | ||||
build = "build.rs" | |||||
[build-dependencies] | |||||
clap = "2" | |||||
[[bin]] | [[bin]] | ||||
name = "gutenberg" | name = "gutenberg" | ||||
@@ -0,0 +1,15 @@ | |||||
#[macro_use] | |||||
extern crate clap; | |||||
use clap::Shell; | |||||
include!("src/cli.rs"); | |||||
fn main() { | |||||
let mut app = build_cli(); | |||||
println!("hello"); | |||||
app.gen_completions("gutenberg", Shell::Bash, "completions/"); | |||||
app.gen_completions("gutenberg", Shell::Fish, "completions/"); | |||||
app.gen_completions("gutenberg", Shell::Zsh, "completions/"); | |||||
app.gen_completions("gutenberg", Shell::PowerShell, "completions/"); | |||||
} |
@@ -0,0 +1,101 @@ | |||||
#compdef gutenberg | |||||
_gutenberg() { | |||||
typeset -A opt_args | |||||
local ret=1 | |||||
local context curcontext="$curcontext" state line | |||||
_arguments -s -S -C \ | |||||
"-c+[Path to a config file other than config.toml]" \ | |||||
"--config+[Path to a config file other than config.toml]" \ | |||||
"-h[Prints help information]" \ | |||||
"--help[Prints help information]" \ | |||||
"-V[Prints version information]" \ | |||||
"--version[Prints version information]" \ | |||||
"1:: :_gutenberg_commands" \ | |||||
"*:: :->Gutenberg" \ | |||||
&& ret=0 | |||||
case $state in | |||||
(Gutenberg) | |||||
curcontext="${curcontext%:*:*}:gutenberg-command-$words[1]:" | |||||
case $line[1] in | |||||
(init) | |||||
_arguments -s -S -C \ | |||||
"-h[Prints help information]" \ | |||||
"--help[Prints help information]" \ | |||||
"-V[Prints version information]" \ | |||||
"--version[Prints version information]" \ | |||||
"1:: :_gutenberg__init_commands" \ | |||||
&& ret=0 | |||||
;; | |||||
(build) | |||||
_arguments -s -S -C \ | |||||
"-h[Prints help information]" \ | |||||
"--help[Prints help information]" \ | |||||
"-V[Prints version information]" \ | |||||
"--version[Prints version information]" \ | |||||
&& ret=0 | |||||
;; | |||||
(serve) | |||||
_arguments -s -S -C \ | |||||
"-h[Prints help information]" \ | |||||
"--help[Prints help information]" \ | |||||
"-V[Prints version information]" \ | |||||
"--version[Prints version information]" \ | |||||
"1:: :_gutenberg__serve_commands" \ | |||||
&& ret=0 | |||||
;; | |||||
(help) | |||||
_arguments -s -S -C \ | |||||
"-h[Prints help information]" \ | |||||
"--help[Prints help information]" \ | |||||
"-V[Prints version information]" \ | |||||
"--version[Prints version information]" \ | |||||
&& ret=0 | |||||
;; | |||||
esac | |||||
;; | |||||
esac | |||||
} | |||||
(( $+functions[_gutenberg_commands] )) || | |||||
_gutenberg_commands() { | |||||
local commands; commands=( | |||||
"init:Create a new Gutenberg project" \ | |||||
"build:Builds the site" \ | |||||
"serve:Serve the site. Rebuild and reload on change automatically" \ | |||||
"help:Prints this message or the help of the given subcommand(s)" \ | |||||
) | |||||
_describe -t commands 'gutenberg commands' commands "$@" | |||||
} | |||||
(( $+functions[_gutenberg__build_commands] )) || | |||||
_gutenberg__build_commands() { | |||||
local commands; commands=( | |||||
) | |||||
_describe -t commands 'gutenberg build commands' commands "$@" | |||||
} | |||||
(( $+functions[_gutenberg__help_commands] )) || | |||||
_gutenberg__help_commands() { | |||||
local commands; commands=( | |||||
) | |||||
_describe -t commands 'gutenberg help commands' commands "$@" | |||||
} | |||||
(( $+functions[_gutenberg__init_commands] )) || | |||||
_gutenberg__init_commands() { | |||||
local commands; commands=( | |||||
"NAME:Name of the project. Will create a directory with that name in the current directory" \ | |||||
) | |||||
_describe -t commands 'gutenberg init commands' commands "$@" | |||||
} | |||||
(( $+functions[_gutenberg__serve_commands] )) || | |||||
_gutenberg__serve_commands() { | |||||
local commands; commands=( | |||||
"INTERFACE:Interface to bind on (default to 127.0.0.1)" \ | |||||
"PORT:Which port to use (default to 1111)" \ | |||||
) | |||||
_describe -t commands 'gutenberg serve commands' commands "$@" | |||||
} | |||||
_gutenberg "$@" |
@@ -0,0 +1,74 @@ | |||||
@('gutenberg', './gutenberg') | %{ | |||||
Register-ArgumentCompleter -Native -CommandName $_ -ScriptBlock { | |||||
param($wordToComplete, $commandAst, $cursorPosition) | |||||
$command = '_gutenberg' | |||||
$commandAst.CommandElements | | |||||
Select-Object -Skip 1 | | |||||
%{ | |||||
switch ($_.ToString()) { | |||||
'Gutenberg' { | |||||
$command += '_Gutenberg' | |||||
break | |||||
} | |||||
'init' { | |||||
$command += '_init' | |||||
break | |||||
} | |||||
'build' { | |||||
$command += '_build' | |||||
break | |||||
} | |||||
'serve' { | |||||
$command += '_serve' | |||||
break | |||||
} | |||||
'help' { | |||||
$command += '_help' | |||||
break | |||||
} | |||||
default { | |||||
break | |||||
} | |||||
} | |||||
} | |||||
$completions = @() | |||||
switch ($command) { | |||||
'_gutenberg' { | |||||
$completions = @('init', 'build', 'serve', 'help', '-h', '-V', '-c', '--help', '--version', '--config') | |||||
} | |||||
'_gutenberg_init' { | |||||
$completions = @('-h', '-V', '--help', '--version') | |||||
} | |||||
'_gutenberg_build' { | |||||
$completions = @('-h', '-V', '--help', '--version') | |||||
} | |||||
'_gutenberg_serve' { | |||||
$completions = @('-h', '-V', '--help', '--version') | |||||
} | |||||
'_gutenberg_help' { | |||||
$completions = @('-h', '-V', '--help', '--version') | |||||
} | |||||
} | |||||
$completions | | |||||
?{ $_ -like "$wordToComplete*" } | | |||||
Sort-Object | | |||||
%{ New-Object System.Management.Automation.CompletionResult $_, $_, 'ParameterValue', $_ } | |||||
} | |||||
} |
@@ -0,0 +1,121 @@ | |||||
_gutenberg() { | |||||
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 | |||||
gutenberg) | |||||
cmd="gutenberg" | |||||
;; | |||||
build) | |||||
cmd+="__build" | |||||
;; | |||||
help) | |||||
cmd+="__help" | |||||
;; | |||||
init) | |||||
cmd+="__init" | |||||
;; | |||||
serve) | |||||
cmd+="__serve" | |||||
;; | |||||
*) | |||||
;; | |||||
esac | |||||
done | |||||
case "${cmd}" in | |||||
gutenberg) | |||||
opts=" -h -V -c --help --version --config init build serve help" | |||||
if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then | |||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) | |||||
return 0 | |||||
fi | |||||
case "${prev}" in | |||||
--config) | |||||
COMPREPLY=("<config>") | |||||
return 0 | |||||
;; | |||||
-c) | |||||
COMPREPLY=("<config>") | |||||
return 0 | |||||
;; | |||||
*) | |||||
COMPREPLY=() | |||||
;; | |||||
esac | |||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) | |||||
return 0 | |||||
;; | |||||
gutenberg__build) | |||||
opts=" -h -V --help --version " | |||||
if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then | |||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) | |||||
return 0 | |||||
fi | |||||
case "${prev}" in | |||||
*) | |||||
COMPREPLY=() | |||||
;; | |||||
esac | |||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) | |||||
return 0 | |||||
;; | |||||
gutenberg__help) | |||||
opts=" -h -V --help --version " | |||||
if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then | |||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) | |||||
return 0 | |||||
fi | |||||
case "${prev}" in | |||||
*) | |||||
COMPREPLY=() | |||||
;; | |||||
esac | |||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) | |||||
return 0 | |||||
;; | |||||
gutenberg__init) | |||||
opts=" -h -V --help --version <name> " | |||||
if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then | |||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) | |||||
return 0 | |||||
fi | |||||
case "${prev}" in | |||||
*) | |||||
COMPREPLY=() | |||||
;; | |||||
esac | |||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) | |||||
return 0 | |||||
;; | |||||
gutenberg__serve) | |||||
opts=" -h -V --help --version <interface> <port> " | |||||
if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then | |||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) | |||||
return 0 | |||||
fi | |||||
case "${prev}" in | |||||
*) | |||||
COMPREPLY=() | |||||
;; | |||||
esac | |||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) | |||||
return 0 | |||||
;; | |||||
esac | |||||
} | |||||
complete -F _gutenberg -o bashdefault -o default gutenberg |
@@ -0,0 +1,28 @@ | |||||
function __fish_using_command | |||||
set cmd (commandline -opc) | |||||
if [ (count $cmd) -eq (count $argv) ] | |||||
for i in (seq (count $argv)) | |||||
if [ $cmd[$i] != $argv[$i] ] | |||||
return 1 | |||||
end | |||||
end | |||||
return 0 | |||||
end | |||||
return 1 | |||||
end | |||||
complete -c gutenberg -n "__fish_using_command gutenberg" -s c -l config -d "Path to a config file other than config.toml" | |||||
complete -c gutenberg -n "__fish_using_command gutenberg" -s h -l help -d "Prints help information" | |||||
complete -c gutenberg -n "__fish_using_command gutenberg" -s V -l version -d "Prints version information" | |||||
complete -c gutenberg -n "__fish_using_command gutenberg" -f -a "init" -d "Create a new Gutenberg project" | |||||
complete -c gutenberg -n "__fish_using_command gutenberg" -f -a "build" -d "Builds the site" | |||||
complete -c gutenberg -n "__fish_using_command gutenberg" -f -a "serve" -d "Serve the site. Rebuild and reload on change automatically" | |||||
complete -c gutenberg -n "__fish_using_command gutenberg" -f -a "help" -d "Prints this message or the help of the given subcommand(s)" | |||||
complete -c gutenberg -n "__fish_using_command gutenberg init" -s h -l help -d "Prints help information" | |||||
complete -c gutenberg -n "__fish_using_command gutenberg init" -s V -l version -d "Prints version information" | |||||
complete -c gutenberg -n "__fish_using_command gutenberg build" -s h -l help -d "Prints help information" | |||||
complete -c gutenberg -n "__fish_using_command gutenberg build" -s V -l version -d "Prints version information" | |||||
complete -c gutenberg -n "__fish_using_command gutenberg serve" -s h -l help -d "Prints help information" | |||||
complete -c gutenberg -n "__fish_using_command gutenberg serve" -s V -l version -d "Prints version information" | |||||
complete -c gutenberg -n "__fish_using_command gutenberg help" -s h -l help -d "Prints help information" | |||||
complete -c gutenberg -n "__fish_using_command gutenberg help" -s V -l version -d "Prints version information" |
@@ -0,0 +1,24 @@ | |||||
use clap::App; | |||||
pub fn build_cli() -> App<'static, 'static> { | |||||
clap_app!(Gutenberg => | |||||
(version: crate_version!()) | |||||
(author: "Vincent Prouillet") | |||||
(about: "Static site generator") | |||||
(@setting SubcommandRequiredElseHelp) | |||||
(@arg config: -c --config +takes_value "Path to a config file other than config.toml") | |||||
(@subcommand init => | |||||
(about: "Create a new Gutenberg project") | |||||
(@arg name: +required "Name of the project. Will create a directory with that name in the current directory") | |||||
) | |||||
(@subcommand build => | |||||
(about: "Builds the site") | |||||
) | |||||
(@subcommand serve => | |||||
(about: "Serve the site. Rebuild and reload on change automatically") | |||||
(@arg interface: "Interface to bind on (default to 127.0.0.1)") | |||||
(@arg port: "Which port to use (default to 1111)") | |||||
) | |||||
) | |||||
} |
@@ -20,28 +20,11 @@ use std::time::Instant; | |||||
mod cmd; | mod cmd; | ||||
mod console; | mod console; | ||||
mod rebuild; | mod rebuild; | ||||
mod cli; | |||||
fn main() { | fn main() { | ||||
let matches = clap_app!(Gutenberg => | |||||
(version: crate_version!()) | |||||
(author: "Vincent Prouillet") | |||||
(about: "Static site generator") | |||||
(@setting SubcommandRequiredElseHelp) | |||||
(@arg config: -c --config +takes_value "Path to a config file other than config.toml") | |||||
(@subcommand init => | |||||
(about: "Create a new Gutenberg project") | |||||
(@arg name: +required "Name of the project. Will create a directory with that name in the current directory") | |||||
) | |||||
(@subcommand build => | |||||
(about: "Builds the site") | |||||
) | |||||
(@subcommand serve => | |||||
(about: "Serve the site. Rebuild and reload on change automatically") | |||||
(@arg interface: "Interface to bind on (default to 127.0.0.1)") | |||||
(@arg port: "Which port to use (default to 1111)") | |||||
) | |||||
).get_matches(); | |||||
let matches = cli::build_cli().get_matches(); | |||||
let config_file = matches.value_of("config").unwrap_or("config.toml"); | let config_file = matches.value_of("config").unwrap_or("config.toml"); | ||||