summaryrefslogtreecommitdiffstats
path: root/completions/kldload
diff options
context:
space:
mode:
Diffstat (limited to 'completions/kldload')
-rw-r--r--completions/kldload31
1 files changed, 21 insertions, 10 deletions
diff --git a/completions/kldload b/completions/kldload
index f511158..3c2396d 100644
--- a/completions/kldload
+++ b/completions/kldload
@@ -2,20 +2,31 @@
[[ $OSTYPE == *freebsd* ]] || return 1
-_kldload()
+_comp_cmd_kldload()
{
- local cur prev words cword
- _init_completion || return
+ local cur prev words cword comp_args
+ _comp_initialize -- "$@" || return
- local moddir=/modules/
- [[ -d $moddir ]] || moddir=/boot/kernel/
+ if _comp_looks_like_path "$cur"; then
+ _comp_compgen_filedir ko
+ return
+ fi
- compopt -o filenames
- COMPREPLY=($(compgen -f "$moddir$cur"))
- COMPREPLY=(${COMPREPLY[@]#$moddir})
- COMPREPLY=(${COMPREPLY[@]%.ko})
+ local moddirs modules i
+ if _comp_split -F ";" moddirs "$(kldconfig -r 2>/dev/null)"; then
+ compopt -o filenames
+ for i in "${moddirs[@]}"; do
+ _comp_compgen -v modules -c "$i/$cur" -- -f &&
+ COMPREPLY+=("${modules[@]#$i/}")
+ done
+ ((${#COMPREPLY[@]})) &&
+ COMPREPLY=("${COMPREPLY[@]%.ko}")
+ fi
+
+ # also add dirs in current dir
+ _comp_compgen -a filedir -d
} &&
- complete -F _kldload kldload
+ complete -F _comp_cmd_kldload kldload
# ex: filetype=sh