mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-08 21:17:47 +03:00
systemd-resolve: initial shell completion
v2: - use /sys/class/net to list interfaces, also copy the same code to systemd-nspawn v3: - do not propose "any" twice for --type
This commit is contained in:
parent
e1caa6e09b
commit
e81eb2874e
@ -5207,6 +5207,12 @@ systemd_resolve_LDADD = \
|
||||
bin_PROGRAMS += \
|
||||
systemd-resolve
|
||||
|
||||
dist_bashcompletion_data += \
|
||||
shell-completion/bash/systemd-resolve
|
||||
|
||||
dist_zshcompletion_data += \
|
||||
shell-completion/zsh/_systemd-resolve
|
||||
|
||||
tests += \
|
||||
test-dns-domain \
|
||||
test-dnssec
|
||||
|
@ -45,7 +45,10 @@ __get_env() {
|
||||
}
|
||||
|
||||
__get_interfaces(){
|
||||
cut -f 1 -d ' ' /proc/net/dev | tail -n +3 | tr -s '\n' | tr -d ':' | xargs
|
||||
{ cd /sys/class/net && echo *; } | \
|
||||
while read -d' ' -r name; do
|
||||
[[ "$name" != "lo" ]] && echo "$name"
|
||||
done
|
||||
}
|
||||
|
||||
_systemd_nspawn() {
|
||||
|
64
shell-completion/bash/systemd-resolve
Normal file
64
shell-completion/bash/systemd-resolve
Normal file
@ -0,0 +1,64 @@
|
||||
# systemd-resolve(1) completion -*- shell-script -*-
|
||||
#
|
||||
# This file is part of systemd.
|
||||
#
|
||||
# Copyright 2016 Zbigniew Jędrzejewski-Szmek
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
__contains_word () {
|
||||
local w word=$1; shift
|
||||
for w in "$@"; do
|
||||
[[ $w = "$word" ]] && return
|
||||
done
|
||||
}
|
||||
|
||||
__get_interfaces(){
|
||||
{ cd /sys/class/net && echo *; } | \
|
||||
while read -d' ' -r name; 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 -4 -6
|
||||
--service --openpgp --tlsa --statistics --reset-statistics
|
||||
--service-address=no --service-txt=no
|
||||
--cname=no --search=no --legend=no'
|
||||
[ARG]='-i --interface -p --protocol -t --type -c --class'
|
||||
)
|
||||
|
||||
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 )
|
||||
;;
|
||||
esac
|
||||
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ "$cur" = -* ]]; then
|
||||
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
complete -F _systemd-resolve systemd-resolve
|
64
shell-completion/zsh/_systemd-resolve
Normal file
64
shell-completion/zsh/_systemd-resolve
Normal file
@ -0,0 +1,64 @@
|
||||
#compdef systemd-resolve
|
||||
|
||||
#
|
||||
# This file is part of systemd.
|
||||
#
|
||||
# Copyright 2016 Zbigniew Jędrzejewski-Szmek
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
_dns_protocol() {
|
||||
local -a _protocol
|
||||
_protocol=( $(_call_program protocol ${service} --legend=no --protocol help; echo help) )
|
||||
_values 'protocol' "$_protocol[@]"
|
||||
}
|
||||
|
||||
_dns_type() {
|
||||
local -a _type
|
||||
_type=( $(_call_program type ${service} --legend=no --type help; echo help) )
|
||||
_values 'type' "$_type[@]"
|
||||
}
|
||||
|
||||
_dns_class() {
|
||||
local -a _class
|
||||
_class=( $(_call_program class ${service} --legend=no --class help; echo help) )
|
||||
_values 'class' "$_class[@]"
|
||||
}
|
||||
|
||||
_systemd-resolve_none() {
|
||||
_alternative : \
|
||||
'domain:DNS address:' \
|
||||
'address:email address:'
|
||||
}
|
||||
|
||||
_arguments \
|
||||
{-h,--help}'[Print a short help text and exit]' \
|
||||
'--version[Print a short version string and exit]' \
|
||||
'--legend=no[Do not show headers and footers]' \
|
||||
'-4[Resolve IPv4 addresses]' \
|
||||
'-6[Resolve IPv6 addresses]' \
|
||||
{-i+,--interface=}'[Look on interface]:interface:_net_interfaces' \
|
||||
{-p+,--protocol=}'[Look via protocol]:protocol:_dns_protocol' \
|
||||
{-t+,--type=}'[Query RR with DNS type]:type:_dns_type' \
|
||||
{-c+,--class=}'[Query RR with DNS class]:class:_dns_class' \
|
||||
'--service[Resolve services]' \
|
||||
'--service-address=no[Do not resolve address for services]' \
|
||||
'--service-txt=no[Do not resolve TXT records for services]' \
|
||||
'--openpgp[Query OpenPGP public key]' \
|
||||
'--tlsa[Query TLS public key]' \
|
||||
'--cname=no[Do not follow CNAME redirects]' \
|
||||
'--search=no[Do not use search domains]' \
|
||||
'--statistics[Show resolver statistics]' \
|
||||
'--reset-statistics[Reset resolver statistics]' \
|
||||
'*::default: _systemd-resolve_none'
|
Loading…
Reference in New Issue
Block a user