Skip to content

Instantly share code, notes, and snippets.

@jojo2357
Created September 16, 2023 00:46
Show Gist options
  • Save jojo2357/d056ba908a74ee26fdaea64ffadc5644 to your computer and use it in GitHub Desktop.
Save jojo2357/d056ba908a74ee26fdaea64ffadc5644 to your computer and use it in GitHub Desktop.
Kiwix-zim Bash Autocomplete
#!/usr/bin/bash
# this file is a part of kiwix-zim. See the License here: https://github.com/jojo2357/kiwix-zim/LICENSE
countryCodes() {
echo "AF"; echo "AL"; echo "DZ"; echo "AS"; echo "AD"; echo "AO"; echo "AI"; echo "AQ"; echo "AG"; echo "AR"; echo "AM"; echo "AW"; echo "AU"; echo "AT"; echo "AZ"; echo "BS"; echo "BH"; echo "BD"; echo "BB"; echo "BY"; echo "BE"; echo "BZ"; echo "BJ"; echo "BM"; echo "BT"; echo "BO"; echo "BO"; echo "BA"; echo "BW"; echo "BV"; echo "BR"; echo "IO"; echo "BN"; echo "BN"; echo "BG"; echo "BF"; echo "BI"; echo "KH"; echo "CM"; echo "CA"; echo "CV"; echo "KY"; echo "CF"; echo "TD"; echo "CL"; echo "CN"; echo "CX"; echo "CC"; echo "CO"; echo "KM"; echo "CG"; echo "CD"; echo "CK"; echo "CR"; echo "CI"; echo "CI"; echo "HR"; echo "CU"; echo "CY"; echo "CZ"; echo "DK"; echo "DJ"; echo "DM"; echo "DO"; echo "EC"; echo "EG"; echo "SV"; echo "GQ"; echo "ER"; echo "EE"; echo "ET"; echo "FK"; echo "FO"; echo "FJ"; echo "FI"; echo "FR"; echo "GF"; echo "PF"; echo "TF"; echo "GA"; echo "GM"; echo "GE"; echo "DE"; echo "GH"; echo "GI"; echo "GR"; echo "GL"; echo "GD"; echo "GP"; echo "GU"; echo "GT"; echo "GG"; echo "GN"; echo "GW"; echo "GY"; echo "HT"; echo "HM"; echo "VA"; echo "HN"; echo "HK"; echo "HU"; echo "IS"; echo "IN"; echo "ID"; echo "IR"; echo "IQ"; echo "IE"; echo "IM"; echo "IL"; echo "IT"; echo "JM"; echo "JP"; echo "JE"; echo "JO"; echo "KZ"; echo "KE"; echo "KI"; echo "KP"; echo "KR"; echo "KR"; echo "KW"; echo "KG"; echo "LA"; echo "LV"; echo "LB"; echo "LS"; echo "LR"; echo "LY"; echo "LY"; echo "LI"; echo "LT"; echo "LU"; echo "MO"; echo "MK"; echo "MG"; echo "MW"; echo "MY"; echo "MV"; echo "ML"; echo "MT"; echo "MH"; echo "MQ"; echo "MR"; echo "MU"; echo "YT"; echo "MX"; echo "FM"; echo "MD"; echo "MC"; echo "MN"; echo "ME"; echo "MS"; echo "MA"; echo "MZ"; echo "MM"; echo "MM"; echo "NA"; echo "NR"; echo "NP"; echo "NL"; echo "AN"; echo "NC"; echo "NZ"; echo "NI"; echo "NE"; echo "NG"; echo "NU"; echo "NF"; echo "MP"; echo "NO"; echo "OM"; echo "PK"; echo "PW"; echo "PS"; echo "PA"; echo "PG"; echo "PY"; echo "PE"; echo "PH"; echo "PN"; echo "PL"; echo "PT"; echo "PR"; echo "QA"; echo "RE"; echo "RO"; echo "RU"; echo "RU"; echo "RW"; echo "SH"; echo "KN"; echo "LC"; echo "PM"; echo "VC"; echo "VC"; echo "VC"; echo "WS"; echo "SM"; echo "ST"; echo "SA"; echo "SN"; echo "RS"; echo "SC"; echo "SL"; echo "SG"; echo "SK"; echo "SI"; echo "SB"; echo "SO"; echo "ZA"; echo "GS"; echo "SS"; echo "ES"; echo "LK"; echo "SD"; echo "SR"; echo "SJ"; echo "SZ"; echo "SE"; echo "CH"; echo "SY"; echo "TW"; echo "TW"; echo "TJ"; echo "TZ"; echo "TH"; echo "TL"; echo "TG"; echo "TK"; echo "TO"; echo "TT"; echo "TN"; echo "TR"; echo "TM"; echo "TC"; echo "TV"; echo "UG"; echo "UA"; echo "AE"; echo "GB"; echo "US"; echo "UM"; echo "UY"; echo "UZ"; echo "VU"; echo "VE"; echo "VE"; echo "VN"; echo "VN"; echo "VG"; echo "VI"; echo "WF"; echo "EH"; echo "YE"; echo "ZM"; echo "ZW"
}
options() {
echo "-h"; echo "--help"; echo "-d"; echo "--disable-dry-run"; echo "-v"; echo "--version"; echo "-p"; echo "--skip-purge"; echo "-n"; echo "--min-size"; echo "-x"; echo "--max-size"; echo "-l"; echo "--location"; echo "-c"; echo "--calculate-checksum"; echo "-f"; echo "--verify-library"; echo "-u"; echo "--skip-update"; echo "-g"; echo "--get-index";
}
_kiwiz-zim-updater_comps() {
cur=${COMP_WORDS[COMP_CWORD]}
if [ $COMP_CWORD -ge 2 ]; then
case ${COMP_WORDS[COMP_CWORD - 1]} in
-l)
mapfile -t patterns < <( countryCodes )
mapfile -t COMPREPLY < <( compgen -W "$( printf '%q ' "${patterns[@]}" )" -- "$cur" | awk '/ / { print "\""$0"\"" } /^[^ ]+$/ { print $0 }' )
return
;;
esac
fi
if [ "$cur" == "" ]; then
IFS=$'\n' DIRS=(*/)
unset IFS
mapfile -t opts < <( options )
COMPREPLY=("${DIRS[@]}" "${opts[@]}")
return
fi
if [[ "$cur" == -* ]]; then
mapfile -t opts < <( options )
mapfile -t COMPREPLY < <( compgen -W "$( printf '%q ' "${opts[@]}" )" -- "$cur" | awk '/ / { print "\""$0"\"" } /^[^ ]+$/ { print $0 }' )
else
for ((i = 0; i < ${#COMP_WORDS[@]}; i++)); do
[[ $i -eq $COMP_CWORD ]] && continue
[[ -d ${COMP_WORDS[$i]} ]] && return;
done
IFS=
newdirs=($cur*/)
unset IFS
[[ -d "${newdirs[0]}" ]] || return
mapfile -t COMPREPLY < <( compgen -W "$( printf '%q ' "${newdirs[@]}" )" -- "$cur" | awk '/ / { print "\""$0"\"" } /^[^ ]+$/ { print $0 }' )
if [[ ${#newdirs[@]} -eq 1 ]]; then
IFS=$'\n' newdirs=("${newdirs[0]}"*/)
unset IFS
[[ -d "${newdirs[0]}" ]] || return
fi
compopt -o nospace
fi
}
complete -o nosort -F _kiwiz-zim-updater_comps ./kiwix-zim.sh
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment