diff options
Diffstat (limited to 'libexec/recit-init')
-rwxr-xr-x | libexec/recit-init | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/libexec/recit-init b/libexec/recit-init new file mode 100755 index 0000000..a5df7d1 --- /dev/null +++ b/libexec/recit-init @@ -0,0 +1,94 @@ +#!/usr/bin/env bash +set -e + +print="" +if [ "$1" = "-" ]; then + print=1 + shift +fi + +shell="$1" +if [ -z "$shell" ]; then + shell="$(basename "$SHELL")" +fi + +resolve_link() { + $(type -p greadlink readlink | head -1) $1 +} + +abs_dirname() { + local cwd="$(pwd)" + local path="$1" + + while [ -n "$path" ]; do + cd "${path%/*}" + local name="${path##*/}" + path="$(resolve_link "$name" || true)" + done + + pwd + cd "$cwd" +} + +root="$(abs_dirname "$0")/.." + +if [ -z "$print" ]; then + case "$shell" in + bash ) + profile='~/.bash_profile' + ;; + zsh ) + profile='~/.zshenv' + ;; + * ) + profile='your profile' + ;; + esac + + { echo "# Load recit automatically by adding" + echo "# the following to ${profile}:" + echo + echo "eval \"\$(${_RECIT_ROOT}/bin/recit init -)\"" + echo + } >&2 + + exit 1 +fi + +echo "export PATH=\"\${PATH}:${_RECIT_ROOT}/bin\"" + +case "$shell" in +bash | zsh ) + echo "source \"$root/completions/recit.${shell}\"" + ;; +esac + +commands=(`recit commands --sh`) +IFS="|" +cat <<EOS +_recit_wrapper() { + local command="\$1" + if [ "\$#" -gt 0 ]; then + shift + fi + + case "\$command" in + ${commands[*]}) + eval \`recit "sh-\$command" "\$@"\`;; + *) + command recit "\$command" "\$@";; + esac +} +EOS + +# zsh can't pass argument with aliases, but bash can. +# zsh can have functions with the name being only numbers, but bash can't. +# fix both cases here by letting zsh have a function, and bash have its alias. +case "$shell" in +bash ) + echo "alias recit=_recit_wrapper" + ;; +zsh ) + echo "recit=_recit_wrapper" + ;; +esac |