- Wireless tools completion improvements by Guillaume Rousse

<rousse@ccr.jussieu.fr>
master
ianmacd 2005-01-10 22:39:56 +00:00
parent 9ec5ae465b
commit 9dfd6a5190
1 changed files with 133 additions and 80 deletions

View File

@ -1,6 +1,6 @@
# bash_completion - some programmable completion functions for bash 2.05b
#
# $Id: bash_completion,v 1.773 2005/01/04 23:35:41 ianmacd Exp $
# $Id: bash_completion,v 1.774 2005/01/10 23:39:56 ianmacd Exp $
#
# Copyright (C) Ian Macdonald <ian@caliban.org>
#
@ -216,9 +216,9 @@ _signals()
done
}
# This function completes on network interfaces
# This function completes on configured network interfaces
#
_interfaces()
_configured_interfaces()
{
if [ -f /etc/debian_version ]; then
# Debian system
@ -227,9 +227,8 @@ _interfaces()
elif [ -f /etc/SuSE-release ]; then
# SuSE system
COMPREPLY=( $( command ls \
/etc/sysconfig/network/ifcfg-* | \
sed -ne 's|.*ifcfg-\('$cur'.*\)|\1|p' ) )
/etc/sysconfig/network/ifcfg-* | \
sed -ne 's|.*ifcfg-\('$cur'.*\)|\1|p' ) )
else
# Assume Red Hat
COMPREPLY=( $( command ls \
@ -238,6 +237,26 @@ _interfaces()
fi
}
# This function completes on all available network interfaces
# -a: restrict to active interfaces only
# -w: restrict to wireless interfaces only
#
_available_interfaces()
{
local cmd
if [ "${1:-}" = -w ]; then
cmd="iwconfig"
elif [ "${1:-}" = -a ]; then
cmd="ifconfig"
else
cmd="ifconfig -a"
fi
COMPREPLY=( $( eval $cmd 2>/dev/null | \
sed -ne 's|^\('$cur'[^[:space:][:punct:]]\{1,\}\).*$|\1|p') )
}
# This function expands tildes in pathnames
#
_expand()
@ -341,39 +360,6 @@ _modules()
sed -ne 's/^\('$cur'.*\)\.k\?o\(\|.gz\)$/\1/p') )
}
# Linux ifconfig(8) and iwconfig(8) helper function
#
[ $UNAME = Linux -o $UNAME = FreeBSD ] && { have ifconfig || have iwconfig; } &&
_ifwconfig()
{
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
case "${COMP_WORDS[1]}" in
-|*[0-9]*)
#COMPREPLY=( $( compgen -W '${keywords[@]}' ) )
COMPREPLY=( ${keywords[@]} )
COMPREPLY=( $( echo " ${COMP_WORDS[@]}" | \
(while read -d ' ' i; do
[ "$i" == "" ] && continue
# flatten array with spaces on either side,
# otherwise we cannot grep on word
# boundaries of first and last word
COMPREPLY=" ${COMPREPLY[@]} "
# remove word from list of completions
COMPREPLY=( ${COMPREPLY/ $i / } )
done
echo ${COMPREPLY[@]})
) )
return 0
;;
esac
COMPREPLY=( $( eval "$@" 2>/dev/null | \
sed -ne \
's|^\('$cur'[^[:space:][:punct:]]\{1,\}\).*$|\1|p') )
}
# start of section containing completion functions for bash built-ins
# bash alias completion
@ -991,81 +977,142 @@ _find()
}
complete -F _find $filenames find
# Linux ifconfig(8) completion
#
[ $UNAME = Linux -o $UNAME = FreeBSD ] && have ifconfig &&
_ifconfig()
{
local cur
local -a keywords=( -a up down arp promisc allmulti metric mtu dstaddr \
netmask add del tunnel irq io_addr mem_start media \
broadcast pointopoint hw multicast address txqueuelen )
_ifwconfig ifconfig -a
COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) )
}
[ $UNAME = Linux -o $UNAME = FreeBSD ] && have ifconfig &&
complete -F _ifconfig ifconfig
# Linux iwconfig(8) completion
#
[ $UNAME = Linux ] && have iwconfig &&
_iwconfig()
{
local cur prev
local -a keywords=( essid nwid domain freq channel sens mode ap nick \
rate bit rts frag key enc power )
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
case "$prev" in
case $prev in
mode)
COMPREPLY=( $( compgen -W 'ad-hoc managed master repeater secondary monitor' -- $cur ) )
COMPREPLY=( $( compgen -W 'managed ad-hoc master repeater secondary monitor' -- $cur ) )
return 0
;;
essid)
COMPREPLY=( $( compgen -W 'on off any' -- $cur ) )
return 0
;;
nwid)
COMPREPLY=( $( compgen -W 'on off' -- $cur ) )
return 0
;;
channel)
COMPREPLY=( $( iwlist ${COMP_WORDS[1]} channel | sed -n 's/.*Channel \(.*\) : \(.*\) GHz/\1/p') )
return 0
;;
freq)
COMPREPLY=( $( iwlist ${COMP_WORDS[1]} channel | sed -n 's/.*Channel \(.*\) : \(.*\) GHz/\2G/p') )
return 0
;;
ap)
COMPREPLY=( $( compgen -W 'auto any off' -- $cur ) )
return 0
;;
rate)
COMPREPLY=($( iwlist ${COMP_WORDS[1]} rate | sed -n 's/\(.*\)M.*/\1M/p') auto fixed)
return 0
;;
rts)
COMPREPLY=( $( compgen -W 'auto fixed off' -- $cur ) )
return 0
;;
frag)
COMPREPLY=( $( compgen -W 'auto fixed off' -- $cur ) )
return 0
;;
key)
COMPREPLY=( $( compgen -W 'off on open restricted' -- $cur ) )
return 0
;;
enc)
COMPREPLY=( $( compgen -W 'off on open restricted' -- $cur ) )
return 0
;;
power)
COMPREPLY=( $( compgen -W 'period timeout off on' -- $cur ) )
return 0
;;
txpower)
COMPREPLY=( $( compgen -W 'off on auto' -- $cur ) )
return 0
;;
retry)
COMPREPLY=( $( compgen -W 'limit lifetime' -- $cur ) )
return 0
;;
esac
_ifwconfig iwconfig
if [ $COMP_CWORD -eq 1 ]; then
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W '--help --version' -- $cur ) )
else
_available_interfaces -w
fi
else
COMPREPLY=( $( compgen -W 'essid nwid mode freq channel sens mode \
ap nick rate rts frag enc key power txpower commit' -- $cur ) )
fi
COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) )
}
[ $UNAME = Linux ] && complete -F _iwconfig iwconfig
[ $UNAME = Linux ] && [ -n "${have:-}" ] && complete -F _iwconfig iwconfig
# Linux iwlist(8) completion
#
[ $UNAME = Linux ] && have iwlist &&
_iwlist()
{
local -a keywords=( scanning frequency rate key power txpower retry )
local cur prev
_ifwconfig iwconfig
COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) )
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
if [ $COMP_CWORD -eq 1 ]; then
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W '--help --version' -- $cur ) )
else
_available_interfaces -w
fi
else
COMPREPLY=( $( compgen -W 'scanning frequency rate key power txpower retry' -- $cur ) )
fi
}
[ $UNAME = Linux ] && complete -F _iwlist iwlist
[ $UNAME = Linux ] && [ -n "${have:-}" ] && complete -F _iwlist iwlist
# Linux iwspy(8) completion
#
[ $UNAME = Linux ] && have iwspy &&
_iwspy()
{
local -a keywords=( setthr getthr off )
local cur
_ifwconfig iwconfig
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) )
if [ $COMP_CWORD -eq 1 ]; then
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W '--help --version' -- $cur ) )
else
_available_interfaces -w
fi
else
COMPREPLY=( $( compgen -W 'setthr getthr off' -- $cur ) )
fi
}
[ $UNAME = Linux ] && complete -F _iwspy iwspy
[ $UNAME = Linux ] && [ -n "${have:-}" ] && complete -F _iwspy iwspy
# Linux iwspy(8) completion
# Linux iwpriv(8) completion
#
[ $UNAME = Linux ] && have iwpriv &&
_iwpriv()
{
local cur prev
local -a keywords=( --all roam port )
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
@ -1082,11 +1129,17 @@ _iwpriv()
;;
esac
_ifwconfig iwconfig
COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) )
if [ $COMP_CWORD -eq 1 ]; then
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W '--help --version' -- $cur ) )
else
_available_interfaces -w
fi
else
COMPREPLY=( $( compgen -W '--all roam port' -- $cur ) )
fi
}
[ $UNAME = Linux ] && complete -F _iwpriv iwpriv
[ $UNAME = Linux ] && [ -n "${have:-}" ] && complete -F _iwpriv iwpriv
# RedHat & Debian GNU/Linux if{up,down} completion
#
@ -1099,7 +1152,7 @@ _ifupdown()
cur=${COMP_WORDS[COMP_CWORD]}
if [ $COMP_CWORD -eq 1 ]; then
_interfaces
_configured_interfaces
fi
return 0