smeserver-lib-compspec/root/etc/profile.d/e-smith-lib_compspec.sh

125 lines
3.2 KiB
Bash

_esmith_signal-event ()
{
if [ ! $(which $1 2>/dev/null) ]; then return 0; fi
local cur; cur=${COMP_WORDS[$COMP_CWORD]}
case $COMP_CWORD in
1)
COMPREPLY=( $(find /etc/e-smith/events/ -maxdepth 1 -type d \
\( -name 'actions' -prune -o \
-name "$cur*" -printf "%f\n" \)) )
;;
*) ;;
esac
return 0
}
complete -F _esmith_signal-event signal-event
_esmith_expand-template ()
{
if [ ! $(which $1 2>/dev/null) ]; then return 0; fi
local cur; cur=$(echo ${COMP_WORDS[$COMP_CWORD]}| sed 's/\./\\./g')
case $COMP_CWORD in
1) # need to distinguish between templates and fragments
COMPREPLY=( $(find /etc/e-smith/templates \
/etc/e-smith/templates-custom \
/etc/e-smith/templates.metadata \
-regex "/etc/e-smith/templates\(-custom\|.metadata\)?$cur.*" \
-printf "[ -f /%P ] && echo /%P\n" \
| sh | uniq) )
;;
*) ;;
esac
return 0
}
complete -F _esmith_expand-template expand-template
_esmith_db ()
{
if [ ! $(which $1 2>/dev/null) ]; then return 0; fi
local cur; cur=${COMP_WORDS[$COMP_CWORD]}
local Commands=$(/sbin/e-smith/db 2>&1 | grep "dbfile" | awk '{print $3}')
case $COMP_CWORD in
1) # config file
COMPREPLY=( $(find /home/e-smith /home/e-smith/db -maxdepth 1 -type f \
\( -name '.*' -prune -o \
-name "$cur*" -printf "%f\n" \)) )
;;
2) # subcommand
COMPREPLY=( $(/sbin/e-smith/db 2>&1 | grep "dbfile"|awk '{print $3}' \
|grep "^$cur" ) )
;;
3) # key
local file; file=${COMP_WORDS[1]}
local cmd; cmd=${COMP_WORDS[2]}
local haskey
echo "$Commands" | grep -q "^$cmd"
if [ $? -eq 1 ] ; then
COMPREPLY+=("Unknown command '$cmd'" ""); return 0
fi
haskey=$(/sbin/e-smith/db 2>&1 | grep "dbfile $cmd" | awk '{print $4}')
if [ -n "$haskey" ]; then
COMPREPLY=( $(/sbin/e-smith/db $file keys |grep "^$cur") )
fi
;;
*) # type/prop/val
local file; file=${COMP_WORDS[1]}
local cmd; cmd=${COMP_WORDS[2]}
local key; key=${COMP_WORDS[3]}
local i; i=$COMP_CWORD
local prev
local valtype
echo "$Commands" | grep -q "^$cmd"
if [ $? -eq 1 ] ; then
COMPREPLY+=("Unknown command '$cmd'" ""); return 0
fi
while [ "$valtype" == "..." ] || [ "$valtype" == "" ]; do
prev=${COMP_WORDS[$[i-1]]}
PAT='$3'
for j in $(seq 4 $[i+1]); do PAT="$PAT,\$$j"; done
valtype=$(/sbin/e-smith/db 2>&1 | awk "{print $PAT}" \
| grep "^$cmd" | awk "{print \$$[i-1]}")
i=$[i-2]
done
case $(echo "$valtype" |sed -e 's/[][0-9]//g') in
"type") COMPREPLY=( $(/sbin/e-smith/db $file gettype $key \
| grep "^$cur") )
;;
"prop")
COMPREPLY=( $(/sbin/e-smith/db $file printprop $key \
| sed -e 's/=.*//' | grep "^$cur") )
;;
"val") COMPREPLY=( $(/sbin/e-smith/db $file getprop $key $prev \
| grep "^$cur"))
;;
*) ;;
esac
;;
esac
return 0
}
complete -F _esmith_db db
_esmith_config ()
{
cmd=$(echo $1 | sed -e 's/config$/db/')
COMP_WORDS=($cmd ${COMP_WORDS[*]})
COMP_WORDS[1]=configuration
COMP_CWORD=$[ $COMP_CWORD + 1 ]
_esmith_db $*
return $?
}
complete -F _esmith_config config