More documentation

This commit is contained in:
Salt 2021-03-06 06:00:27 -06:00
parent 3e918875be
commit f688616fe9
2 changed files with 56 additions and 2 deletions

View File

@ -10,6 +10,34 @@ proj learncpp
If the project exists in your project directory, it will spawn a subshell in that directory. Advanced usage and hooks are detailed below, but you can use it as a glorified `cd` if that's all you need. If the project exists in your project directory, it will spawn a subshell in that directory. Advanced usage and hooks are detailed below, but you can use it as a glorified `cd` if that's all you need.
## Behavior
When invoked as specified in usage (with any number of valid flags plus exactly one non-flag argument referred to here as `$arg1`), `proj` will do the following:
* `cd` to `project_dir` (normally `~/Projects`)
* Check for the existence of `$arg1`
* If `$arg1` is a directory or symbolic link, proceed
* If `$arg1` is any other type of file, panic
* If `$arg1` does not exist, then:
* Execute the pre-create hook if configured to do so
* Create `$arg1` as a directory
* Initialize an empty git repository if configured to do so
* `cd` to `$arg1`
* Execute a subshell, and
* Source `.projenv` if configured to do so
* Execute `$SHELL`
## Flags ## Flags
flag|description|args flag|description|args
@ -26,4 +54,13 @@ git\_auto\_init\_always|If not set to `0`, automatically initialize a git reposi
git\_auto\_init\_gitignore|A colon-separated ($PATH-style) list of items to include in the initial `.gitignore`|`*.swp` git\_auto\_init\_gitignore|A colon-separated ($PATH-style) list of items to include in the initial `.gitignore`|`*.swp`
hook\_pre\_create|Path to a script invoked (not sourced) before a project is created. Script will be executed relative to `project_dir`|Empty string hook\_pre\_create|Path to a script invoked (not sourced) before a project is created. Script will be executed relative to `project_dir`|Empty string
hook\_pre\_spawn|Path to a script invoked (not sourced) before a shell is spawned in the project directory. Script will be executed relative to the project's root directory|Empty string hook\_pre\_spawn|Path to a script invoked (not sourced) before a shell is spawned in the project directory. Script will be executed relative to the project's root directory|Empty string
hook\_env|Path to a script to *source in* after entering a project directory but before a shell is spawned. Script will be sourced relative to the project's root directory|`.projenv`
project\_dir|Path to where projects should be stored.|`$HOME/Projects` project\_dir|Path to where projects should be stored.|`$HOME/Projects`
## Return Codes
code|description
---|---
0|Success
2|Invalid flag or missing flag argument
50|Non-flag arguments have errors or are nonsensical

21
proj
View File

@ -17,6 +17,7 @@ declare -a _config=(
[git_auto_init_gitignore]="*.swp" [git_auto_init_gitignore]="*.swp"
[hook_pre_create]="" [hook_pre_create]=""
[hook_pre_spawn]="" [hook_pre_spawn]=""
[hook_env]=".projenv"
[project_dir]="$HOME/Projects" [project_dir]="$HOME/Projects"
) )
declare _optconfigfile="${XDG_CONFIG_HOME:-$HOME/.config}/${_name}.conf" declare _optconfigfile="${XDG_CONFIG_HOME:-$HOME/.config}/${_name}.conf"
@ -71,6 +72,15 @@ has() {
done done
return 0 return 0
} }
validateline() {
# Takes a line and errors if it's just whitespace or a comment
local linenows=${1//[[:space:]]}
if ! [ "${1#\#}" = "$1" ] || [ -z "$linenows" ]; then
return 1
fi
return 0
}
# Core program functions # Core program functions
printhelp() { printhelp() {
@ -85,6 +95,10 @@ Copyright (c) 2021 rehashedsalt@cock.li
Licensed under the MIT license Licensed under the MIT license
EOF EOF
} }
proj() {
# Do the do
:
}
# Main # Main
main() { main() {
@ -137,6 +151,10 @@ main() {
fi fi
# Validate critical options # Validate critical options
# TODO: That # TODO: That
# Validate arguments
if [ "${#_args[@]}" -ne "1" ]; then
error "Required exactly 1 argument, got ${#_args[@]}" 50
fi
# Validate core program dependencies # Validate core program dependencies
log "Validating dependencies" 2 log "Validating dependencies" 2
if ! has basename; then if ! has basename; then
@ -144,8 +162,7 @@ main() {
fi fi
# Do the do # Do the do
# TODO: The do proj
warn "Nothing to do"
exit 0 exit 0
} }