| # systemd-resolve(1) completion -*- shell-script -*- | |
| # SPDX-License-Identifier: LGPL-2.1-or-later | |
| # | |
| # This file is part of systemd. | |
| # | |
| # systemd is free software; you can redistribute it and/or modify it | |
| # under the terms of the GNU Lesser General Public License as published by | |
| # the Free Software Foundation; either version 2.1 of the License, or | |
| # (at your option) any later version. | |
| # | |
| # systemd 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 Lesser General Public License | |
| # along with systemd; If not, see <https://www.gnu.org/licenses/>. | |
| __contains_word () { | |
| local w word=$1; shift | |
| for w in "$@"; do | |
| [[ $w = "$word" ]] && return | |
| done | |
| } | |
| __get_interfaces(){ | |
| local name | |
| for name in $(cd /sys/class/net && command ls); do | |
| [[ "$name" != "lo" ]] && echo "$name" | |
| done | |
| } | |
| _systemd-resolve() { | |
| local i comps | |
| local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} | |
| local -A OPTS=( | |
| [STANDALONE]='-h --help --version --no-pager -4 -6 | |
| --service --openpgp --tlsa --status --statistics | |
| --reset-statistics --service-address=no --service-txt=no | |
| --cname=no --search=no --legend=no --flush-caches | |
| --reset-server-features --revert' | |
| [ARG]='-i --interface -p --protocol -t --type -c --class --raw | |
| --set-dns --set-domain --set-llmnr --set-mdns --set-dnssec --set-nta' | |
| ) | |
| if __contains_word "$prev" ${OPTS[ARG]}; then | |
| case $prev in | |
| --interface|-i) | |
| comps=$( __get_interfaces ) | |
| ;; | |
| --protocol|-p|--type|-t|--class|-c) | |
| comps=$( systemd-resolve --legend=no "$prev" help; echo help ) | |
| ;; | |
| --raw) | |
| comps="payload packet" | |
| ;; | |
| --set-dns|--set-domain|--set-nta) | |
| comps="" | |
| ;; | |
| --set-llmnr|--set-mdns) | |
| comps="yes no resolve" | |
| ;; | |
| --set-dnssec) | |
| comps="yes no allow-downgrade" | |
| ;; | |
| --set-dnsovertls) | |
| comps="yes no opportunistic" | |
| ;; | |
| esac | |
| COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) | |
| return 0 | |
| fi | |
| if [[ "$cur" = -* ]] || [[ -z ${comps-} ]]; then | |
| COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) | |
| return 0 | |
| fi | |
| } | |
| complete -F _systemd-resolve systemd-resolve |