diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | Completion/Unix/Command/.distfiles | 2 | ||||
-rw-r--r-- | Completion/Unix/Command/_ifconfig | 82 | ||||
-rw-r--r-- | Completion/Unix/Type/.distfiles | 2 | ||||
-rw-r--r-- | Completion/Unix/Type/_net_interfaces | 22 |
5 files changed, 112 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index ece3c3516..1754c1573 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2001-12-19 Oliver Kiddle <opk@zsh.org> + + * 16366: Completion/Unix/Type/_net_interfaces, + Completion/Unix/Command/_ifconfig, Completion/Unix/Type/.distfiles, + Completion/Unix/Command/.distfiles: new ifconfig completion + 2001-12-18 Oliver Kiddle <opk@zsh.org> * 16364: Src/params.c: further to 16351, except specials diff --git a/Completion/Unix/Command/.distfiles b/Completion/Unix/Command/.distfiles index b75c0ed42..53e22b502 100644 --- a/Completion/Unix/Command/.distfiles +++ b/Completion/Unix/Command/.distfiles @@ -15,5 +15,5 @@ _dd _gprof _lynx _perldoc _telnet _pine _dict _grep _lzop _prcs _tiff _elm _diff _gs _make _psutils _tin _apm _mail _last _loadkeys _modutils _ruby _sysctl _links _samba -_user_admin _rsync _arping _spamassassin _mtools +_user_admin _rsync _arping _spamassassin _mtools _ifconfig ' diff --git a/Completion/Unix/Command/_ifconfig b/Completion/Unix/Command/_ifconfig new file mode 100644 index 000000000..efd6e7707 --- /dev/null +++ b/Completion/Unix/Command/_ifconfig @@ -0,0 +1,82 @@ +#compdef ifconfig + +local context state line ret=1 +local -a opts args alias debug updownlist + +alias=( '(-alias alias)'{,-}'alias[remove or establish alternate address for if]' ) +debug=( '(-debug debug)'{,-}'debug[disable or enable debugging code]' ) +updownlist=( + '(-a -d -C)-u[restrict to interfaces which are up]' + '(-a -u -C)-d[restrict to interfaces which are down]' + '(-a -C -m -L 1 *)-l[list interfaces]' +) + +case $OSTYPE in + darwin*) + args=( -s $updownlist ) + opts=( + $alias $debug delete dest_address ipdst nsellength + {,-}trailers {,-}link{0,1,2} + ) + ;; + freebsd*) + args=( -s $updown + '(-a -l -u -d -m -L 1 *)-C[list interface cloners]' + '(-l -C)-m[list supported media]' + '(-l -C)-L[show address lifetime as time offset]' + ) + opts=( $alias $debug + anycast lladdr media {,-}mediaopt {,delete}tunnel create destroy + {,un}plumb vlan {,-}vlandev metric prefixlen range phase ssid muid + stationname channel authmode {,-}powersave powersavesleep wepmode + {,-}wep {,-}nwkey add delete ether {,-}link{0,1,2} + ) + ;; + irix5*) opts=( $debug ) ;; + irix6*) + opts=( $debug {-,}highbw {,-}link{0,1,2} primary rspace sspace ) + args=( '-w[display additional information]' ) + ;; + linux*) + opts=( + '(-promisc promisc)'{,-}'promisc[disable or enable promiscuous mode]' + '(-allmulti allmulti)'{,-}'allmulti[disable or enable all-multicast]' + 'media[set physical port type]:medium type:(auto 10base2 10baseT AUI)' + 'hw[set hardware class]:hardware class:(ether ax25 ARCnet netrom)' + add del dstaddr io_addr irq mem_start multicast pointopoint + tunnel txqueuelen + ) + ;; + solaris*) + args=( + '-ad[apply to all down interfaces]' + '-adD[apply to all down interfaces not controlled by DHCP]' + '-au[apply to all up interfaces]' + '-auD[apply to all up interfaces not controlled by DHCP]' + ) + opts=( + 'auto-revarp[use RARP to acquire address]' + {,-}trailers {,-}private {,un}plumb + '(dhcp auto-dhcp)'{,auto-}'dhcp[use dhcp]' + primary wait drop extend ping release start status + ) + ;; +esac + +_arguments "$args[@]" \ + '-a[apply to all interfaces]' \ + '1:network interface:_net_interfaces' \ + '::address family:(atalk ether inet inet6 ax25 ddp ipx netrom)' \ + '*:option:->options' && ret=0 + +[[ -n "$state" ]] && _values -S ' ' -w 'option' "$opts[@]" \ + '(down)up[activate interface]' \ + '(up)down[shut down interface]' \ + '(-arp arp)'{,-}'arp[disable or enable address resolution protocol]' \ + 'metric[set routing metric for interface]:routing metric' \ + 'mtu[set maximum transfer unit]:mtu' \ + 'netmask[specify network mask]:netmask' \ + 'broadcast[specify broadcast address]:broadcast address' \ + 'address[specify IP address of interface]:IP address' && ret=0 + +return ret diff --git a/Completion/Unix/Type/.distfiles b/Completion/Unix/Type/.distfiles index dfb856bcb..04c30b4b0 100644 --- a/Completion/Unix/Type/.distfiles +++ b/Completion/Unix/Type/.distfiles @@ -8,5 +8,5 @@ _domains _path_files _ps _user_at_host _files _pdf _pspdf _users _groups _perl_basepods _signals _users_on _hosts _perl_builtin_funcs _tar_archive _time_zone -_file_systems +_file_systems _net_interfaces ' diff --git a/Completion/Unix/Type/_net_interfaces b/Completion/Unix/Type/_net_interfaces new file mode 100644 index 000000000..cbd419ad8 --- /dev/null +++ b/Completion/Unix/Type/_net_interfaces @@ -0,0 +1,22 @@ +#autoload + +local expl list intf sep +local -a disp + +case $OSTYPE in + aix*) + intf=( ${(f)"$(lsdev -C -c if -F 'name:description')"} ) + if zstyle -T ":completion:${curcontext}" verbose; then + zstyle -s ":completion:${curcontext}:" list-separator sep || sep=-- + zformat -a list " $sep " "$intf[@]" + disp=(-ld list) + fi + ;; + darwin*|freebsd*) intf=( $(ifconfig -l) ) ;; + irix*) intf=( ${${${(f)"$(/usr/etc/netstat -i)"}%% *}[2,-1]} ) ;; + linux*) intf=( /proc/sys/net/ipv4/conf/*~*(all|default)(N:t) ) ;; + *) intf=( $(ifconfig -a|sed -n 's/^\([^ :]*\).*/\1/p') ) ;; +esac + +_wanted interfaces expl 'network interface' \ + compadd "$@" "$disp[@]" - "${(@)intf%%:*}" |