Koha/debian/koha-common.bash-completion
Tomas Cohen Arazi 9043a27b03 Bug 14727: koha-indexer tab completion in bash
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>
2015-10-13 11:37:55 -03:00

280 lines
7.6 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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