65 lines
2.2 KiB
Bash
Executable File
65 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# Install shell completions for myagents, myclaude, mykimi to user directory only
|
|
# Usage: install_completion.sh <venv_bin_dir> <comp_dir>
|
|
|
|
VENV_BIN_DIR="$1"
|
|
COMP_DIR="$2"
|
|
|
|
if [[ -z "$VENV_BIN_DIR" || -z "$COMP_DIR" ]]; then
|
|
echo "Usage: $0 <venv_bin_dir> <comp_dir>" >&2
|
|
exit 1
|
|
fi
|
|
|
|
USER_SHELL=$(basename "$SHELL")
|
|
|
|
# Portable uppercase helper (macOS bash 3.2 lacks ${var^^}).
|
|
_upcase() {
|
|
printf '%s' "$1" | tr '[:lower:]' '[:upper:]'
|
|
}
|
|
|
|
install_zsh_completion() {
|
|
local cmd="$1"
|
|
local out="$2"
|
|
local var="_$(_upcase "$cmd")_COMPLETE"
|
|
mkdir -p "$COMP_DIR" 2>/dev/null || { echo "Error: cannot create $COMP_DIR" >&2; return 1; }
|
|
if eval "$var=zsh_source ${VENV_BIN_DIR}/${cmd}" > "$out" 2>/dev/null; then
|
|
echo "Installed zsh completion: $out"
|
|
return 0
|
|
else
|
|
echo "Warning: failed to generate zsh completion for $cmd" >&2
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
install_bash_completion() {
|
|
local cmd="$1"
|
|
local out="$2"
|
|
local var="_$(_upcase "$cmd")_COMPLETE"
|
|
mkdir -p "$COMP_DIR" 2>/dev/null || { echo "Error: cannot create $COMP_DIR" >&2; return 1; }
|
|
if eval "$var=bash_source ${VENV_BIN_DIR}/${cmd}" > "$out" 2>/dev/null; then
|
|
echo "Installed bash completion: $out"
|
|
return 0
|
|
else
|
|
echo "Warning: failed to generate bash completion for $cmd" >&2
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
if [[ "$USER_SHELL" == "zsh" ]]; then
|
|
install_zsh_completion myagents "$COMP_DIR/_myagents"
|
|
install_zsh_completion myclaude "$COMP_DIR/_myclaude"
|
|
install_zsh_completion mykimi "$COMP_DIR/_mykimi"
|
|
elif [[ "$USER_SHELL" == "bash" ]]; then
|
|
install_bash_completion myagents "$COMP_DIR/myagents.bash"
|
|
install_bash_completion myclaude "$COMP_DIR/myclaude.bash"
|
|
install_bash_completion mykimi "$COMP_DIR/mykimi.bash"
|
|
else
|
|
echo "Shell '$USER_SHELL' is not supported for automatic completion installation."
|
|
echo "To install completions manually, run one of the following commands:"
|
|
for cmd in myagents myclaude mykimi; do
|
|
var="_$(_upcase "$cmd")_COMPLETE"
|
|
echo " zsh: $var=zsh_source ${VENV_BIN_DIR}/${cmd} > /path/to/completions/_${cmd}"
|
|
echo " bash: $var=bash_source ${VENV_BIN_DIR}/${cmd} > /path/to/completions/${cmd}.bash"
|
|
done
|
|
fi
|