diff --git a/bash_completion b/bash_completion index 8e2497f4..556d83fd 100644 --- a/bash_completion +++ b/bash_completion @@ -1466,8 +1466,8 @@ _known_hosts_real() return 0 } # _known_hosts_real() -complete -F _known_hosts traceroute traceroute6 tracepath tracepath6 ping \ - ping6 fping fping6 telnet rsh rlogin ftp dig mtr ssh-installkeys showmount +complete -F _known_hosts traceroute traceroute6 tracepath tracepath6 \ + fping fping6 telnet rsh rlogin ftp dig mtr ssh-installkeys showmount # This meta-cd function observes the CDPATH variable, so that cd additionally # completes on directories under those specified in CDPATH. diff --git a/completions/Makefile.am b/completions/Makefile.am index bdb8368c..ae792b07 100644 --- a/completions/Makefile.am +++ b/completions/Makefile.am @@ -77,6 +77,7 @@ bashcomp_DATA = abook \ ipmitool \ iproute2 \ ipsec \ + iputils \ ipv6calc \ isql \ jar \ diff --git a/completions/iputils b/completions/iputils new file mode 100644 index 00000000..8c36eb16 --- /dev/null +++ b/completions/iputils @@ -0,0 +1,88 @@ +have ping || have ping6 && +_ping() +{ + local cur prev words cword + _init_completion -n = || return + + case $prev in + -c|-F|-G|-g|-h|-i|-l|-m|-P|-p|-s|-t|-V|-W|-w|-z) + return + ;; + -I) + _available_interfaces -a + return + ;; + -M) + # Path MTU strategy in Linux, mask|time in FreeBSD + local opts="do want dont" + [[ $OSTYPE == *bsd* ]] && opts="mask time" + COMPREPLY=( $( compgen -W '$opts' -- "$cur" ) ) + return + ;; + -N) + if [[ $cur != *= ]]; then + COMPREPLY=( $( compgen -W 'name ipv6 ipv6-global ipv6-sitelocal + ipv6-linklocal ipv6-all ipv4 ipv4-all subject-ipv6= + subject-ipv4= subject-name= subject-fqdn=' -- "$cur" ) ) + [[ $COMPREPLY == *= ]] && compopt -o nospace + fi + return + ;; + -Q) + # TOS in Linux, "somewhat quiet" (no args) in FreeBSD + if [[ $OSTYPE != *bsd* ]]; then + COMPREPLY=( $( compgen -W '{0..7}' -- "$cur" ) ) + return + fi + ;; + -S) + # Socket sndbuf in Linux, source IP in FreeBSD + [[ $OSTYPE == *bsd* ]] && _ip_addresses + return + ;; + -T) + # Timestamp option in Linux, TTL in FreeBSD + [[ $OSTYPE == *bsd* ]] || \ + COMPREPLY=( $( compgen -W 'tsonly tsandaddr' -- "$cur" ) ) + return + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W '$( _parse_usage "$1" )' -- "$cur" ) ) + return + fi + + _known_hosts_real "$cur" +} && +complete -F _ping ping ping6 + + +have tracepath || have tracepath6 && +_tracepath() +{ + local cur prev words cword + _init_completion || return + + case $prev in + -l) + return + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W '$( _parse_usage "$1" )' -- "$cur" ) ) + return + fi + + _known_hosts_real "$cur" +} && +complete -F _tracepath tracepath tracepath6 + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/test/completion/tracepath.exp b/test/completion/tracepath.exp new file mode 100644 index 00000000..621f0ba8 --- /dev/null +++ b/test/completion/tracepath.exp @@ -0,0 +1 @@ +assert_source_completions tracepath diff --git a/test/lib/completions/ping.exp b/test/lib/completions/ping.exp index 3e419966..9ef7f2fd 100644 --- a/test/lib/completions/ping.exp +++ b/test/lib/completions/ping.exp @@ -12,8 +12,9 @@ setup assert_complete_any "ping " +sync_after_int - +assert_complete_any "ping -" sync_after_int diff --git a/test/lib/completions/tracepath.exp b/test/lib/completions/tracepath.exp new file mode 100644 index 00000000..33b32567 --- /dev/null +++ b/test/lib/completions/tracepath.exp @@ -0,0 +1,21 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "tracepath " +sync_after_int + +assert_complete_any "tracepath -" +sync_after_int + + +teardown