One of the many nifty features of bash is that it
provides context-sensitive completion, but for some reason this
capability isn't part of the bash that ships with Mac OS
X, at least as of 10.5.3, which is what I'm presently using.
To rectify the oversight, first install the
bash_completion port via MacPorts:
$ sudo port install bash-completion
And then modify your ~/.profile as directed, e.g., by adding:
if [ -f /opt/local/etc/bash_completion ]; then
. /opt/local/etc/bash_completion
fi
To load your own local collection of completion hooks, create the
directory ~/.bash_completion.d and then put the following
in ~/.bash_completion (essentially cut/pasted out of
/opt/local/etc/bash_completion):
if [ -d $USER_BASH_COMPLETION_DIR -a -r $USER_BASH_COMPLETION_DIR -a \
-x $USER_BASH_COMPLETION_DIR ]; then
for i in $USER_BASH_COMPLETION_DIR/*; do
[[ ${i##*/} != @(*~|*.bak|*.swp|\#*\#|*.dpkg*|.rpm*) ]] &&
[ \( -f $i -o -h $i \) -a -r $i ] && . $i
done
fi
unset i
Next, above the other block added to ~/.profile, add:
export USER_BASH_COMPLETION_DIR=~/.bash_completion.d
As for the contents of .bash_completion.d, I put the
completion files supplied with darcs and cabal-install
there, so in addition to the usual niceties like completion of paths
on remote servers (e.g., for scp), I also get convenient
completion behavior at the commandline, e.g., with
cabal:
$ cabal install hsc[TAB] hsc2hs hsc3 hsclock hscolour hscurses










