aboutsummaryrefslogtreecommitdiff
path: root/libexec/recit-init
diff options
context:
space:
mode:
authorJulio Capote <jcapote@gmail.com>2022-07-14 03:40:24 +0000
committerJulio Capote <jcapote@gmail.com>2022-07-14 03:40:24 +0000
commit891f946e86f8a0911f67983d52fccacc9f8ebbad (patch)
tree36b032deb891f4adf5c047b255eb0ca6da275fef /libexec/recit-init
downloadrecit-891f946e86f8a0911f67983d52fccacc9f8ebbad.tar.gz
initial
Diffstat (limited to 'libexec/recit-init')
-rwxr-xr-xlibexec/recit-init94
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