#!/bin/bash # kf2-srv is a command line tool for managing a set of Killing Floor 2 servers. # Copyright (C) 2019-2021 GenZmeY # mailto: genzmey@gmail.com # # This file is part of kf2-srv. # # kf2-srv 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. # # 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, see . function _kf2_srv_completions () { function groups_list () { find "$GrpDir" \ -mindepth 1 \ -maxdepth 1 \ -type d \ -printf "%f\n" } function commands_list () # $1: Command group { test -d "$GrpDir/$1" && \ find "$GrpDir/$1" \ -mindepth 1 \ -maxdepth 1 \ -type f \ -printf "%f\n" } function instances_list () { find "$InsDir" \ -mindepth 1 \ -maxdepth 1 \ -type d \ -printf "%f\n" } function command_usage_processing () # $1: Command group, $2: Command, $3: Current argument position { local CmdParams=$("$KF2Srv" "$1" "$2" "usage") local LocalPosition; ((LocalPosition = $3 - 2)) local ParamIndex=0 local LastParam for Param in $CmdParams do ((ParamIndex++)) if [[ "$ParamIndex" -eq "$LocalPosition" ]]; then if echo "$Param" | grep -Fq ''; then COMPREPLY=($(compgen -W "$(instances_list)" -- "${CURARG}")) fi return 0 fi LastParam="$Param" done if echo "$LastParam" | grep -Fq '...'; then COMPREPLY=($(compgen -W "$(instances_list)" -- "${CURARG}")) fi } COMPREPLY=() CURARG="${COMP_WORDS[COMP_CWORD]}" case "${COMP_CWORD}" in 1 ) COMPREPLY=($(compgen -W "$(groups_list)" -- "${CURARG}")) ;; 2 ) COMPREPLY=($(compgen -W "$(commands_list ${COMP_WORDS[1]})" -- "${CURARG}")) ;; * ) command_usage_processing "${COMP_WORDS[1]}" "${COMP_WORDS[2]}" "${COMP_CWORD}";; esac return 0 } function _kf2_srv_main_completions () { local GrpDir=":DEFINE_PREFIX:/share/kf2-srv/cmdgrp" local InsDir="/etc/kf2-srv/instances" local KF2Srv=":DEFINE_PREFIX:/bin/kf2-srv" _kf2_srv_completions } function _kf2_srv_beta_completions () { local GrpDir=":DEFINE_PREFIX:/share/kf2-srv/cmdgrp" local InsDir="/etc/kf2-srv/instances-beta" local KF2Srv=":DEFINE_PREFIX:/bin/kf2-srv-beta" _kf2_srv_completions } complete -F _kf2_srv_main_completions kf2-srv complete -F _kf2_srv_beta_completions kf2-srv-beta