Tomas Cohen Arazi
9043a27b03
This patch introduces tab-completion in bash to the koha-indexer command. It completes using valid option switches and instance names. It stops completing then -h or --help are issued, and once a command switch is chosen (either --start, --stop or --restart) it goes ahead with valid instances completion. To test: - Have a packages install (kohadevbox works) - Run: $ . debian/koha-common.bash-completion - Type koha-indexer <tab> - Play with all the options => SUCCESS: They work as they should. - Sign off :-D Note: it fixes a small glitch on the plack completion. Signed-off-by: Jesse Weaver <pianohacker@gmail.com> Verified working, including filtering out already used options and instances. Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
280 lines
7.6 KiB
Bash
280 lines
7.6 KiB
Bash
#!/bin/bash
|
||
#
|
||
# koha-common.bash-completion script for koha-* commands
|
||
#
|
||
# This file is part of Koha.
|
||
#
|
||
# Copyright 2013 Universidad Nacional de Cordoba
|
||
# Tomas Cohen Arazi
|
||
#
|
||
# Koha is free software; you can redistribute it and/or modify it under the
|
||
# terms of the GNU General Public License as published by the Free Software
|
||
# Foundation; either version 3 of the License, or (at your option) any later
|
||
# version.
|
||
#
|
||
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
|
||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||
#
|
||
# You should have received a copy of the GNU General Public License along
|
||
# with Koha; if not, see <http://www.gnu.org/licenses>.
|
||
|
||
_build_substract_switches()
|
||
{
|
||
local substract
|
||
|
||
for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do
|
||
if [[ ${COMP_WORDS[i]} == -* ]]; then
|
||
substract="$substract -e ${COMP_WORDS[i]}"
|
||
fi
|
||
done
|
||
|
||
echo "$substract"
|
||
}
|
||
|
||
_build_substract_instances()
|
||
{
|
||
local substract
|
||
|
||
for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do
|
||
substract="$substract -e ${COMP_WORDS[i]}"
|
||
done
|
||
|
||
echo "$substract"
|
||
}
|
||
|
||
_koha_single_instance()
|
||
{
|
||
local filter=$1
|
||
|
||
cur=${COMP_WORDS[COMP_CWORD]}
|
||
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||
if [ $COMP_CWORD -eq 1 ]; then
|
||
COMPREPLY=( $( compgen -W "$(koha-list $filter)" $cur ) )
|
||
else
|
||
COMPREPLY=()
|
||
fi
|
||
|
||
return 0
|
||
}
|
||
|
||
_koha_list_cmd()
|
||
{
|
||
local filter=$1
|
||
|
||
local cur substract instancelist
|
||
_get_comp_words_by_ref cur
|
||
|
||
# Build a list of the already used words
|
||
substract=`_build_substract_instances`
|
||
|
||
if [[ "$substract" != "" ]]; then
|
||
instancelist=$( koha-list $filter | grep -v -x $substract )
|
||
else
|
||
instancelist=$( koha-list $filter )
|
||
fi
|
||
|
||
COMPREPLY=( $(compgen -W "$instancelist" -- $cur ) )
|
||
return 0
|
||
}
|
||
|
||
_koha_email_disable()
|
||
{
|
||
_koha_list_cmd "--email"
|
||
return 0
|
||
}
|
||
complete -F _koha_email_disable koha-email-disable
|
||
|
||
_koha_email_enable()
|
||
{
|
||
_koha_list_cmd "--noemail"
|
||
return 0
|
||
}
|
||
complete -F _koha_email_enable koha-email-enable
|
||
|
||
_koha_sip_enabled_instances()
|
||
{
|
||
_koha_list_cmd "--sip"
|
||
return 0
|
||
}
|
||
|
||
# koha-*-sip autocomplete with sip-enabled instances
|
||
complete -F _koha_sip_enabled_instances koha-start-sip
|
||
complete -F _koha_sip_enabled_instances koha-restart-sip
|
||
complete -F _koha_sip_enabled_instances koha-stop-sip
|
||
|
||
_koha_sip_disabled()
|
||
{
|
||
_koha_list_cmd "--nosip"
|
||
return 0
|
||
}
|
||
|
||
# koha-enable-sip autocompletes with sip-disabled instances
|
||
complete -F _koha_sip_disabled koha-enable-sip
|
||
|
||
_koha_disabled_instances()
|
||
{
|
||
_koha_list_cmd "--disabled"
|
||
return 0
|
||
}
|
||
|
||
_koha_enabled_instances()
|
||
{
|
||
_koha_list_cmd "--enabled"
|
||
return 0
|
||
}
|
||
|
||
# koha-enable autocompletes with disabled instances
|
||
complete -F _koha_disabled_instances koha-enable
|
||
|
||
# koha-disable autocompletes with enabled instances
|
||
complete -F _koha_enabled_instances koha-disable
|
||
|
||
# koha-*-zebra autocomplete with enabled instances
|
||
complete -F _koha_enabled_instances koha-start-zebra
|
||
complete -F _koha_enabled_instances koha-restart-zebra
|
||
complete -F _koha_enabled_instances koha-stop-zebra
|
||
|
||
# koha-mysql autocompletes with a single instance name
|
||
complete -F _koha_single_instance koha-mysql
|
||
|
||
_koha_list()
|
||
{
|
||
local cur opts substract
|
||
|
||
COMPREPLY=()
|
||
_get_comp_words_by_ref cur
|
||
opts="--enabled --disabled --email --noemail --plack --noplack --sip --nosip --help -h"
|
||
|
||
# Build a list of the already used option switches
|
||
for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do
|
||
if [[ ${COMP_WORDS[i]} == -* ]]; then
|
||
case ${COMP_WORDS[i]} in
|
||
--disabled)
|
||
substract="$substract -e --enabled"; ;;
|
||
--enabled)
|
||
substract="$substract -e --disabled"; ;;
|
||
--email)
|
||
substract="$substract -e --noemail"; ;;
|
||
--noemail)
|
||
substract="$substract -e --email"; ;;
|
||
--plack)
|
||
substract="$substract -e --noplack"; ;;
|
||
--noplack)
|
||
substract="$substract -e --plack"; ;;
|
||
--sip)
|
||
substract="$substract -e --nosip"; ;;
|
||
--nosip)
|
||
substract="$substract -e --sip"; ;;
|
||
--help)
|
||
substract="$substract -e -h"; ;;
|
||
-h)
|
||
substract="$substract -e --help"; ;;
|
||
esac
|
||
substract="$substract -e ${COMP_WORDS[i]}"
|
||
fi
|
||
done
|
||
|
||
if [[ "$substract" != "" ]]; then
|
||
opts=$( echo $opts | sed -e 's/ /\n/g' | grep -v -x $substract )
|
||
fi
|
||
|
||
COMPREPLY=( $(compgen -W "$opts" -- $cur ) )
|
||
|
||
return 0
|
||
}
|
||
complete -F _koha_list koha-list
|
||
|
||
_koha_plack_instances()
|
||
{
|
||
_koha_list_cmd "--plack"
|
||
return 0
|
||
}
|
||
|
||
_koha_noplack_instances()
|
||
{
|
||
_koha_list_cmd "--noplack"
|
||
return 0
|
||
}
|
||
|
||
_koha-plack()
|
||
{
|
||
local cur opts substract
|
||
|
||
COMPREPLY=()
|
||
_get_comp_words_by_ref cur
|
||
opts="--start --stop --restart --enable --disable --quiet -q --help -h"
|
||
|
||
# Build a list of the already used option switches
|
||
for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do
|
||
if [[ ${COMP_WORDS[i]} == -* ]]; then
|
||
case ${COMP_WORDS[i]} in
|
||
--start) _koha_plack_instances ; return 0 ;;
|
||
--stop) _koha_plack_instances ; return 0 ;;
|
||
--restart) _koha_plack_instances ; return 0 ;;
|
||
--enable) _koha_noplack_instances ; return 0 ;;
|
||
--disable) _koha_plack_instances ; return 0 ;;
|
||
--help) COMPREPLY=() ; return 0 ;; # no more completions
|
||
-h) COMPREPLY=() ; return 0 ;; # no more completions
|
||
--quiet) # filter the other quiet switches and go on
|
||
substract="$substract -e -q"; ;;
|
||
-q) # filter the other quiet switches and go on
|
||
substract="$substract -e --quiet"; ;;
|
||
esac
|
||
substract="$substract -e ${COMP_WORDS[i]}"
|
||
fi
|
||
done
|
||
|
||
if [[ "$substract" != "" ]]; then
|
||
opts=$( echo $opts | sed -e 's/ /\n/g' | grep -v -x $substract )
|
||
fi
|
||
|
||
COMPREPLY=( $(compgen -W "$opts" -- $cur ) )
|
||
|
||
return 0
|
||
}
|
||
complete -F _koha-plack koha-plack
|
||
|
||
_koha-indexer()
|
||
{
|
||
local cur opts substract
|
||
|
||
COMPREPLY=()
|
||
_get_comp_words_by_ref cur
|
||
opts="--start --stop --restart --quiet -q --help -h"
|
||
|
||
# Build a list of the already used option switches
|
||
for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do
|
||
if [[ ${COMP_WORDS[i]} == -* ]]; then
|
||
case ${COMP_WORDS[i]} in
|
||
--start) _koha_list_cmd ; return 0 ;;
|
||
--stop) _koha_list_cmd ; return 0 ;;
|
||
--restart) _koha_list_cmd ; return 0 ;;
|
||
--help) COMPREPLY=() ; return 0 ;; # no more completions
|
||
-h) COMPREPLY=() ; return 0 ;; # no more completions
|
||
--quiet) # filter the other quiet switches and go on
|
||
substract="$substract -e -q"; ;;
|
||
-q) # filter the other quiet switches and go on
|
||
substract="$substract -e --quiet"; ;;
|
||
esac
|
||
substract="$substract -e ${COMP_WORDS[i]}"
|
||
fi
|
||
done
|
||
|
||
if [[ "$substract" != "" ]]; then
|
||
opts=$( echo $opts | sed -e 's/ /\n/g' | grep -v -x $substract )
|
||
fi
|
||
|
||
COMPREPLY=( $(compgen -W "$opts" -- $cur ) )
|
||
|
||
return 0
|
||
}
|
||
complete -F _koha-indexer koha-indexer
|
||
|
||
# Local variables:
|
||
# mode: shell-script
|
||
# sh-basic-offset: 4
|
||
# sh-indent-comment: t
|
||
# indent-tabs-mode: nil
|
||
# End:
|
||
# ex: ts=4 sw=4 et filetype=sh
|