Used `type compopt' instead of `compopt' to detect availability of
compopt because (at least on Ubuntu) a python-command-not-found handler
is started when issuing a non-existing command, thus resulting in
considerable slower completions on systems without compopt (bash < 4.0).
This fixes tilde completion when doing for instance `ls ~<TAB>'. See
also: Alioth #312613.
Added _tilde() helper function.
Contrary to _expand() and __expand_tilde_by_ref(), _tilde() also leaves the
tilde (~) intact. Replacement of the tilde has been a complaint in other
bugreports, especially since plain bash completion (without bash-completion
installed) doesn't expand the tilde when doing a `ls ~<TAB>'.
To run the tests:
./run completion/ls.exp
./run unit/_tilde.exp
The PATH expansion done in `_root_command()':
PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin _command $1 $2 $3
stayed effective with bash >= 4.1.4 running in posix mode, causing PATH to grow
ever larger when doing sudo completions. This is now fixed.
To run the automated test:
./run ./completion/sudo.exp
See also:
- http://www.mail-archive.com/bug-bash@gnu.org/msg06942.html
- bash patch: bash41-004
Usage: _get_comp_words_by_ref [OPTIONS] [VARNAMES]
Available VARNAMES:
cur Return cur within varname "cur"
prev Return prev within varname "prev"
words Return words within varname "words"
cword Return cword within varname "cword"
Available OPTIONS:
-n EXCLUDE Characters out of $COMP_WORDBREAKS which should NOT be
considered word breaks. This is useful for things like scp
where we want to return host:path and not only path, so we
would pass the colon (:) as -n option in this case. Bash-3
doesn't do word splitting, so this ensures we get the same
word on both bash-3 and bash-4.
-c VARNAME Return cur within specified VARNAME
-p VARNAME Return prev within specified VARNAME
-w VARNAME Return words within specified VARNAME
-i VARNAME Return words within specified VARNAME
Example usage:
$ _get_comp_words_by_ref -n : cur prev