1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
|
# nmh completion for bash
# Copyright 2003 "Wade Richards" <wade@wabyn.net>
# Permission granted to redistribute under the BSD license
[ "$BASH_COMPLETION" ] || echo "ERROR: COMPLETION-BASH is not intended to be \
sourced directly, but rather added to a bash-completion package installation."
have show &&
_nmh()
{
# args: command comp-word prev-word
local command current prev folder origfolder i orig_opts
COMPREPLY=()
current=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
command=$1
orig_opts=$(shopt -p extglob)
shopt -s extglob
# Get the folder, if specified
for (( i=0; i < ${#COMP_WORDS}-1; i++ ))
do
case "${COMP_WORDS[i]}" in
\++([a-zA-Z_]) )
folder=${COMP_WORDS[i]}
origfolder=$( folder -f )
;;
esac
done
case $current in
-* )
# Command-line switches for the most common commands.
case $command in
ali )
# no sequences or messages
options=(-alias -list -nolist -normalize -nonormalize -user
-nouser -version -help)
;;
burst )
options=(-inplace -noinplace -quiet -noquiet -verbose
-noverbose -version -help)
;;
comp )
options=(-form -use -nouse -file -draftfolder -draftmessage
-nodraftfolder -editor -noedit -whatnowproc -nowhatnowproc
-version -help )
;;
flist* )
options=(-sequence -all -noall -showzero -noshowzero
-recurse -norecurse -fast -nofast -alpha -noalpha -version
-help)
;;
folder* )
options=(-all -noall -create -nocreate -fast -nofast -header
-noheader -recurse -norecurse -total -nototal -list -nolist
-push -pop -pack -nopack -print -verbose -noverbose -version
-help)
;;
forw )
options=(-annotate -noannotate -form -format -noformat
-filter -inplace -noinplace -mime -nomime -draftfolder
-draftmessage -nodraftfolder -editor -noedit -whatnowproc
-nowhatnowproc -dashstuffing -nodashstuffing -build -file
-version -help)
;;
inc )
options=(-audit -noaudit -changecur -nochangecur -form -format
-file -silent -nosilent -truncate -notruncate -width -host
-user -pack -nopack -apop -noapop -kpop -sasl -saslmech -snoop
-version -help)
;;
mark )
options=(-sequence -add -delete -list -public -nopublic
-zero -nozero -version -help)
;;
next )
options=(-showmimeproc -header -noheader -checkmime
-nocheckmime -version -help)
;;
packf )
options=(-file -mbox -mmdf -version -help)
;;
pick )
options=(-and -or -not -lbrace -rbrace --component -cc
-date -from -search -subject -to -after -before -datefield
-sequence -public -nopublic -zero -nozero -list -nolist
-version -help)
;;
prev )
options=(-showproc -showmimeproc -header -noheader -checkmime
-nocheckmime -version -help)
;;
refile )
options=(-draft -link -nolink -preserve -nopreserve -unlink
-nounlink -src -file -rmmproc -normmproc -version -help)
;;
repl )
options=(-annotate -noannotate -group -nogroup -cc
-nocc -query -noquery -form -format -noformat -filter
-inplace -noinplace -mime -nomime -fcc -width -draftfolder
-draftmessage -nodraftfolder -editor -noedit -whatnowproc
-nowhatnowproc -build -file -version -help)
;;
rmf )
options=(-interactive -nointeractive -version -help)
;;
rmm )
options=(-link -nolink -version -help)
;;
scan )
options=(-clear -noclear -form -format -header -noheader
-width -reverse -noreverse -file -version -help )
;;
show )
options=(-draft -showproc -showmimeproc -header -noheader
-checkmime -nocheckmime -version -help)
;;
sortm )
options=(-datefield -textfield -notextfield -limit -nolimit
-verbose -noverbose -version -help)
;;
whom )
options=(-alias -check -nocheck -draft -draftfolder
-draftmessage -nodraftfolder -version -help)
;;
* )
options=(-help -version -seq)
;;
esac
;;
+* )
# Folders
options=( $( folder -all -r -fast | grep -v "^\." | sed "s/^/+/" ) )
;;
+([0-9a-z])-* )
# Partial range
start=${current/%-*/}
options=( $( scan $folder -format "%(msg)" "${start}-last" ) first prev cur next last )
options=( ${options[@]//#/${start}-} )
;;
+([0-9]) )
# Message number, or start of range
options=( $( scan $folder -format "%(msg)" ) first prev cur next last )
options=( ${options[@]} ${options[@]//%/-} )
;;
[fpcnlu]* )
# special message aliases
options=( first prev cur next last unseen )
;;
# What about sequences? I can't quite see how to get the list of possible sequences, so I
# guess the user will have to type them in the old-fashioned way.
esac
eval $orig_opts
COMPREPLY=( $( compgen -W "${options[*]}" -- $current ) )
return 0
}
[ "$have" ] && complete -F _nmh ali anno burst comp dist flist flists folder folders forw inc mark mhbuild mhl mhlist mhmail mhn mhparam mhpath mhshow mhstore msgchk msh next packf pick prev prompter rcvdist rcvpack rcvstore rcvtty refile repl rmf rmm scan send sendfiles show slocal sortm whatnow whom
|