aboutsummaryrefslogtreecommitdiffstats
path: root/examples/complete/complete.ianmac
diff options
context:
space:
mode:
Diffstat (limited to 'examples/complete/complete.ianmac')
-rw-r--r--examples/complete/complete.ianmac433
1 files changed, 0 insertions, 433 deletions
diff --git a/examples/complete/complete.ianmac b/examples/complete/complete.ianmac
deleted file mode 100644
index 2af9fc7..0000000
--- a/examples/complete/complete.ianmac
+++ /dev/null
@@ -1,433 +0,0 @@
-#####
-#To: chet@po.cwru.edu, sarahmckenna@lucent.com
-#Message-Id: <slrn8mqioc.msb.ian@lovelorn.linuxcare.com>
-#Posted-To: comp.unix.shell, gnu.bash.bug
-#Subject: bash 2.04 programmable completion examples
-#Reply-To: ian@linuxcare.com, ian@caliban.org
-#Summary: examples of programmable completion for bash 2.04
-#Date: Thu, 13 Jul 2000 00:52:33 -0400 (EDT)
-#From: ianmacd@linuxcare.com (Ian Macdonald)
-#####
-
-#########################################################################
-# Turn on extended globbing
-shopt -s extglob
-
-# A lot of the following one-liners were taken directly from the
-# completion examples provided with the bash 2.04 source distribution
-
-# Make directory commands see only directories
-complete -d cd mkdir rmdir pushd
-
-# Make file commands see only files
-complete -f cat less more chown ln strip
-complete -f -X '*.gz' gzip
-complete -f -X '*.Z' compress
-complete -f -X '!*.+(Z|gz|tgz|Gz)' gunzip zcat zmore
-complete -f -X '!*.Z' uncompress zmore zcat
-complete -f -X '!*.+(gif|jpg|jpeg|GIF|JPG|bmp)' ee xv
-complete -f -X '!*.+(ps|PS|ps.gz)' gv
-complete -f -X '!*.+(dvi|DVI)' dvips xdvi dviselect dvitype
-complete -f -X '!*.+(pdf|PDF)' acroread xpdf
-complete -f -X '!*.texi*' makeinfo texi2dvi texi2html
-complete -f -X '!*.+(tex|TEX)' tex latex slitex
-complete -f -X '!*.+(mp3|MP3)' mpg123
-
-# kill sees only signals
-complete -A signal kill -P '%'
-
-# user commands see only users
-complete -u finger su usermod userdel passwd
-
-# bg completes with stopped jobs
-complete -A stopped -P '%' bg
-
-# other job commands
-complete -j -P '%' fg jobs disown
-
-# network commands complete with hostname
-complete -A hostname ssh rsh telnet rlogin ftp ping fping host traceroute \
- nslookup
-
-# export and others complete with shell variables
-complete -v export local readonly unset
-
-# set completes with set options
-complete -A setopt set
-
-# shopt completes with shopt options
-complete -A shopt shopt
-
-# helptopics
-complete -A helptopic help
-
-# unalias completes with aliases
-complete -a unalias
-
-# various commands complete with commands
-complete -c command type nohup exec nice eval strace gdb
-
-# bind completes with readline bindings (make this more intelligent)
-complete -A binding bind
-
-# Now we get to the meat of the file, the functions themselves. Some
-# of these are works in progress. Most assume GNU versions of the
-# tools in question and may require modifications for use on vanilla
-# UNIX systems.
-#
-# A couple of functions may have non-portable, Linux specific code in
-# them, but this will be noted where applicable
-
-
-# GNU chown(1) completion. This should be expanded to allow the use of
-# ':' as well as '.' as the user.group separator.
-#
-_chown ()
-{
- local cur prev user group
-
- COMPREPLY=()
- cur=${COMP_WORDS[COMP_CWORD]}
- prev=${COMP_WORDS[COMP_CWORD-1]}
-
- # do not attempt completion if we're specifying an option
- if [ "${cur:0:1}" = "-" ]; then return 0; fi
-
- # first parameter on line or first since an option?
- if [ $COMP_CWORD -eq 1 ] || [ "${prev:0:1}" = "-" ]; then
- case "$cur" in
- [a-zA-Z]*.*)
- user=${cur%.*}
- group=${cur#*.}
- COMPREPLY=( $( awk 'BEGIN {FS=":"} \
- {if ($1 ~ /^'$group'/) print $1}' \
- /etc/group ) )
- for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do
- COMPREPLY[i]=$user.${COMPREPLY[i]}
- done
- return 0
- ;;
- *)
- COMPREPLY=( $( compgen -u $cur -S '.' ) )
- return 0
- ;;
- esac
- else
- COMPREPLY=( $( compgen -f $cur ) )
- fi
-
- return 0
-}
-complete -F _chown chown
-
-# umount(8) completion. This relies on the mount point being the third
-# space-delimited field in the output of mount(8)
-#
-_umount ()
-{
- local cur
-
- COMPREPLY=()
- cur=${COMP_WORDS[COMP_CWORD]}
-
- # could rewrite the cut | grep to be a sed command, but this is
- # clearer and doesn't result in much overhead
- COMPREPLY=( $( mount | cut -d' ' -f 3 | grep ^$cur) )
- return 0
-}
-complete -F _umount umount
-
-# GID completion. This will get a list of all valid group names from
-# /etc/group and should work anywhere.
-#
-_gid_func ()
-{
- local cur
-
- COMPREPLY=()
- cur=${COMP_WORDS[COMP_CWORD]}
- COMPREPLY=( $( awk 'BEGIN {FS=":"} {if ($1 ~ /^'$cur'/) print $1}' \
- /etc/group ) )
- return 0
-}
-complete -F _gid_func groupdel groupmod
-
-# mount(8) completion. This will pull a list of possible mounts out of
-# /etc/fstab, unless the word being completed contains a ':', which
-# would indicate the specification of an NFS server. In that case, we
-# query the server for a list of all available exports and complete on
-# that instead.
-#
-_mount ()
-
-{ local cur
-
- COMPREPLY=()
- cur=${COMP_WORDS[COMP_CWORD]}
-
- case "$cur" in
- *:*)
- COMPREPLY=( $( /usr/sbin/showmount -e --no-headers ${cur%%:*} |\
- grep ^${cur#*:} | awk '{print $1}'))
- return 0
- ;;
- *)
- COMPREPLY=( $( awk '{if ($2 ~ /\//) print $2}' /etc/fstab | \
- grep ^$cur ))
- return 0
- ;;
- esac
-}
-complete -F _mount mount
-
-# Linux rmmod(1) completion. This completes on a list of all currently
-# installed kernel modules.
-#
-_rmmod ()
-{
- local cur
-
- COMPREPLY=()
- cur=${COMP_WORDS[COMP_CWORD]}
-
- COMPREPLY=($( lsmod | awk '{if (NR != 1 && $1 ~ /^'$cur'/) print $1}'))
- return 0
-}
-complete -F _rmmod rmmod
-
-# Linux insmod(1) completion. This completes on a list of all
-# available modules for the version of the kernel currently running.
-#
-_insmod ()
-{
- local cur modpath
-
- COMPREPLY=()
- cur=${COMP_WORDS[COMP_CWORD]}
- modpath=/lib/modules/`uname -r`
-
- COMPREPLY=($( ls -R $modpath | sed -ne 's/^\('$cur'.*\)\.o$/\1/p'))
- return 0
-}
-complete -F _insmod insmod depmod modprobe
-
-# man(1) completion. This relies on the security enhanced version of
-# GNU locate(1). UNIX variants having non-numeric man page sections
-# other than l, m and n should add the appropriate sections to the
-# first clause of the case statement.
-#
-# This is Linux specific, in that 'man <section> <page>' is the
-# expected syntax. This allows one to do something like
-# 'man 3 str<tab>' to obtain a list of all string handling syscalls on
-# the system.
-#
-_man ()
-{
- local cur prev
-
- COMPREPLY=()
- cur=${COMP_WORDS[COMP_CWORD]}
- prev=${COMP_WORDS[COMP_CWORD-1]}
-
- case "$prev" in
- [0-9lmn])
- COMPREPLY=($( slocate -ql 0 -r '/man/man'$prev'/'$cur | \
- sed -ne 's/^.*\/\('$cur'[^.\/]*\)\..*$/\1/p' ))
- return 0
- ;;
- *)
- COMPREPLY=($( slocate -ql 0 -r '/man/man./'$cur | \
- sed -ne 's/^.*\/\('$cur'[^.\/]*\)\..*$/\1/p' ))
- return 0
- ;;
- esac
-}
-complete -F _man man
-
-# Linux killall(1) completion. This wouldn't be much use on, say,
-# Solaris, where killall does exactly that: kills ALL processes.
-#
-# This could be improved. For example, it currently doesn't take
-# command line options into account
-#
-_killall ()
-{
- local cur prev
-
- COMPREPLY=()
- cur=${COMP_WORDS[COMP_CWORD]}
- prev=${COMP_WORDS[COMP_CWORD-1]}
-
- case "$prev" in
- -[A-Z0-9]*)
- # get a list of processes (the first sed evaluation
- # takes care of swapped out processes, the second
- # takes care of getting the basename of the process)
- COMPREPLY=( $( ps ahx | awk '{if ($5 ~ /^'$cur'/) print $5}' | \
- sed -e 's#[]\[]##g' -e 's#^.*/##' ))
- return 0
- ;;
- esac
-
- # first parameter can be either a signal or a process
- if [ $COMP_CWORD -eq 1 ]; then
- # standard signal completion is rather braindead, so we need
- # to hack around to get what we want here, which is to
- # complete on a dash, followed by the signal name minus
- # the SIG prefix
- COMPREPLY=( $( compgen -A signal SIG${cur#-} ))
- for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do
- COMPREPLY[i]=-${COMPREPLY[i]#SIG}
- done
- fi
-
- # get processes, adding to signals if applicable
- COMPREPLY=( ${COMPREPLY[*]} $( ps ahx | \
- awk '{if ($5 ~ /^'$cur'/) print $5}' | \
- sed -e 's#[]\[]##g' -e 's#^.*/##' ))
- return 0
-}
-complete -F _killall killall
-
-# GNU find(1) completion. This makes heavy use of ksh style extended
-# globs and contains Linux specific code for completing the parameter
-# to the -fstype option.
-#
-_find ()
-{
- local cur prev
-
- COMPREPLY=()
- cur=${COMP_WORDS[COMP_CWORD]#-}
- prev=${COMP_WORDS[COMP_CWORD-1]}
-
- case "$prev" in
- -@(max|min)depth)
- COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9' ) )
- return 0
- ;;
- -?(a)newer|-fls|-fprint?(0|f))
- COMPREPLY=( $( compgen -f $cur ) )
- return 0
- ;;
- -fstype)
- # this is highly non-portable (the option to -d is a tab)
- COMPREPLY=( $( cut -d' ' -f 2 /proc/filesystems | grep ^$cur ) )
- return 0
- ;;
- -gid)
- COMPREPLY=( $( awk 'BEGIN {FS=":"} \
- {if ($3 ~ /^'$cur'/) print $3}' /etc/group ) )
- return 0
- ;;
- -group)
- COMPREPLY=( $( awk 'BEGIN {FS=":"} \
- {if ($1 ~ /^'$cur'/) print $1}' /etc/group ) )
- return 0
- ;;
- -?(x)type)
- COMPREPLY=( $( compgen -W 'b c d p f l s' $cur ) )
- return 0
- ;;
- -uid)
- COMPREPLY=( $( awk 'BEGIN {FS=":"} \
- {if ($3 ~ /^'$cur'/) print $3}' /etc/passwd ) )
- return 0
- ;;
- -user)
- COMPREPLY=( $( compgen -u $cur ) )
- return 0
- ;;
- -[acm]min|-[acm]time|-?(i)?(l)name|-inum|-?(i)path|-?(i)regex| \
- -links|-perm|-size|-used|-exec|-ok|-printf)
- # do nothing, just wait for a parameter to be given
- return 0
- ;;
- esac
-
- # complete using basic options ($cur has had its dash removed here,
- # as otherwise compgen will bomb out with an error, since it thinks
- # the dash is an option to itself)
- COMPREPLY=( $( compgen -W 'daystart depth follow help maxdepth \
- mindepth mount noleaf version xdev amin anewer atime \
- cmin cnewer ctime empty false fstype gid group ilname \
- iname inum ipath iregex links lname mmin mtime name \
- newer nouser nogroup perm regex size true type uid \
- used user xtype exec fls fprint fprint0 fprintf ok \
- print print0 printf prune ls' $cur ) )
-
- # this removes any options from the list of completions that have
- # already been specified somewhere on the command line.
- 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[@]})
- ) )
-
- # put dashes back
- for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do
- COMPREPLY[i]=-${COMPREPLY[i]}
- done
-
- return 0
-}
-complete -F _find find
-
-# Linux ifconfig(8) completion
-#
-_ifconfig ()
-{
- local cur
-
- COMPREPLY=()
- cur=${COMP_WORDS[COMP_CWORD]}
-
- case "${COMP_WORDS[1]}" in
- -|*[0-9]*)
- COMPREPLY=( $( compgen -W '-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' $cur ))
- 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=( $( ifconfig -a | sed -ne 's/^\('$cur'[^ ]*\).*$/\1/p' ))
-}
-complete -F _ifconfig ifconfig
-
-# Linux ipsec(8) completion (for FreeS/WAN). Very basic.
-#
-_ipsec ()
-{
- local cur
-
- COMPREPLY=()
- cur=${COMP_WORDS[COMP_CWORD]}
-
- COMPREPLY=( $( compgen -W 'auto barf eroute klipsdebug look manual \
- pluto ranbits rsasigkey setup showdefaults \
- showhostkey spi spigrp tncfg whack' $cur ))
-}
-complete -F _ipsec ipsec
-#########################################################################