mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-05-07 05:53:06 +00:00
Add autocompletion feature, simply source this file to enable it for bash and zsh shells
This commit is contained in:
parent
4505528f3b
commit
c377906553
1 changed files with 99 additions and 0 deletions
99
tester/liblinphone_completion
Normal file
99
tester/liblinphone_completion
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
# Copyright (C) 2012 Belledonne Comunications, Grenoble, France
|
||||
#
|
||||
# This program 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 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program 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 this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
# Created by Gautier Pelloux-Prayer on 2014/10/24.
|
||||
# This script adds auto-completion for liblinphone_tester binary for Bash and
|
||||
# zsh. To use it, just type: `source liblinphone_completion`, then use
|
||||
# `./liblinphone_tester [tab] to get auto-completions. To use it permanently,
|
||||
# source this file in your .rc file
|
||||
|
||||
_liblinphone_complete() {
|
||||
local completions command_require_argument latest_arg available_tasks has_not_set_suite suite_name
|
||||
# these commands expect an argument
|
||||
command_require_argument=(--list-tests --config --domain --auth-domain --dns-hosts --suite --test)
|
||||
|
||||
|
||||
if [ -n "$BASH_VERSION" ]; then
|
||||
set -- "${COMP_WORDS[@]}" #convert them to arguments (eg $1,$#,$@,etc.)
|
||||
elif [ -n "$ZSH_VERSION" ]; then
|
||||
local args
|
||||
read -cA args #read list of arguments user entered
|
||||
set -- "${args[@]}" #convert them to arguments (eg $1,$#,$@,etc.)
|
||||
fi
|
||||
#skip program name
|
||||
shift
|
||||
|
||||
|
||||
# if user required help, do not complete anything
|
||||
if ! grep -q -- "--help" <<< "$@"; then
|
||||
|
||||
# retrieve the last argument
|
||||
latest_arg=""
|
||||
for arg in "$@"; do
|
||||
if [ ! -z "$arg" ]; then
|
||||
latest_arg="$arg"
|
||||
fi
|
||||
done
|
||||
|
||||
# get the tasks available, from --help
|
||||
available_tasks="$(liblinphone_tester 2>&1 --help | sed -nE "s/.*--([^ ]*).*/--\\1/p")"
|
||||
# remove all already provided tasks (it's useless to provide them twice)
|
||||
if [[ ! -z "$@" ]]; then
|
||||
current_tasks=$(echo $@ | grep -Eo -- "--([^ ])*" | tr '\n' '|' | sed 's/|/$|/g')--$
|
||||
if [ ! -z "$current_tasks" ]; then
|
||||
available_tasks=$(echo "$available_tasks" | grep -vE -- "(${current_tasks})")
|
||||
fi
|
||||
fi
|
||||
# remove --test option if --suite is not provided yet!
|
||||
has_not_set_suite=$(grep -q -- "--suite" <<< "$@"; echo $?)
|
||||
if [ $has_not_set_suite = 1 ]; then
|
||||
available_tasks=$(echo "$available_tasks" | grep -v -- --test)
|
||||
fi
|
||||
|
||||
# if latest arg does not start with '--', it is a custom value; just output all available commands
|
||||
if ! grep -q -- '^--' <<< "$latest_arg"; then
|
||||
completions="$available_tasks"
|
||||
elif [ "$latest_arg" = "--test" ]; then
|
||||
if [ $has_not_set_suite = 0 ]; then
|
||||
suite_name=$(echo $@ | sed -nE 's/.*--suite (.*) .*/\1/p')
|
||||
completions="$(liblinphone_tester --list-tests "$suite_name")"
|
||||
fi
|
||||
elif [ "$latest_arg" = "--suite" ] || [ "$latest_arg" = "--list-tests" ]; then
|
||||
completions="$(liblinphone_tester --list-suites)"
|
||||
# we are waiting for a custom value, so do not hint anything
|
||||
elif grep -q -- " $latest_arg " <<< "$command_require_argument"; then
|
||||
completions=""
|
||||
else
|
||||
completions="$available_tasks"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$BASH_VERSION" ]; then
|
||||
# COMPREPLY=( $(echo $completions | sed 's/ /\\ /g' )) #| sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' ') )
|
||||
IFS=$'\n'
|
||||
COMPREPLY=($(compgen -W "${completions}" -- ${COMP_WORDS[COMP_CWORD]}))
|
||||
elif [ -n "$ZSH_VERSION" ]; then
|
||||
reply=( "${(ps:\n:)completions}" )
|
||||
fi
|
||||
}
|
||||
|
||||
if [ -n "$BASH_VERSION" ]; then
|
||||
complete -F _liblinphone_complete liblinphone_tester
|
||||
elif [ -n "$ZSH_VERSION" ]; then
|
||||
compctl -K _liblinphone_complete liblinphone_tester
|
||||
else
|
||||
echo "Your shell might be not supported! Only bash and zsh tested."
|
||||
fi
|
||||
Loading…
Add table
Reference in a new issue