summaryrefslogtreecommitdiffstats
path: root/contrib/bash-completion
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bash-completion')
-rw-r--r--contrib/bash-completion47
1 files changed, 41 insertions, 6 deletions
diff --git a/contrib/bash-completion b/contrib/bash-completion
index 0c8fb78..1adad22 100644
--- a/contrib/bash-completion
+++ b/contrib/bash-completion
@@ -2,19 +2,54 @@
_hostinfo_hosts="$(for file in /usr/local/share/hostinfo/* ; do basename $file | sed 's/.spline.inf.fu-berlin.de//' ; done)"
+_get_first_hostinfo_arg()
+{
+ local i
+
+ arg=
+ for (( i=1; i < COMP_CWORD; i++ )); do
+ if [[ "${COMP_WORDS[i]}" != -* ]]; then
+ arg=${COMP_WORDS[i]}
+ break
+ fi
+
+ [[ "${COMP_WORDS[i]}" == "--path" || "${COMP_WORDS[i]}" == "-p" ]] && i=$((i+1))
+ done
+}
+
+_get_hostinfo_path()
+{
+ local i
+
+ path=
+ for (( i=1; i < COMP_CWORD; i++ )); do
+ if [[ "${COMP_WORDS[i]}" == "--path" || "${COMP_WORDS[i]}" == "-p" ]]; then
+ path="--path ${COMP_WORDS[i+1]}"
+ break
+ fi
+ done
+}
+
_hostinfo() {
local cur prev
COMPREPLY=()
_get_comp_words_by_ref cur prev
- _get_first_arg
- if [[ -z "$arg" ]]; then
- _completion="$_hostinfo_hosts"
+ if [[ "$prev" == "-p" || "$prev" == "--path" ]]; then
+ COMPREPLY=( $( compgen -d -o dirnames -S "/" $cur ) )
+ compopt -o nospace
else
- _completion="$(hostinfo --keys $arg 2>/dev/null)"
- fi
+ _get_first_hostinfo_arg
+ _get_hostinfo_path
+ if [[ -z "$arg" ]]; then
+ _completion="$_hostinfo_hosts"
+ else
+ _completion="$(hostinfo $path --keys $arg 2>/dev/null)"
+ fi
- COMPREPLY=( $( compgen -W "-o --oneline -f --file -k --keys -h -? --help $_completion" -- $cur ) )
+ COMPREPLY=( $( compgen -W "-o --oneline -f --file -k --keys -h -? --help
+ -p --path $_completion" -- $cur ) )
+ fi
}
complete -F _hostinfo hostinfo