I have an alias, ee, defined for my favorite editor, mg. When I do something like
mg fo
and then hit tab, if a file foo exists, I get tab completion to:
mg foo
On most systems I use (e.g., all versions of ubuntu for many years now, and some installs of debian),
ee fo
also completes properly to
ee foo
But on one system I use, which has Debian 6.0 and GNU bash 4.1.5(1)-release, tab completion fails for the version with the alias. Note that this is not a problem with completing the alias itself — it's a problem with completing the arguments of the aliased command. Is there a way to fix this behavior on the Debian system? Upgrade to bash 4.2.x? Fiddle with config files?
Best Answer
Edit: OK. Seems like I might have misread the situation. Thought you meant program options as in:
but guess it is file completion. I don't know, but give it a go.
As a quick fix this should work:
Giving:
as of Programmable Completion Builtins. E.g. the
-X pattern
can be useful. E.g. to exclude.swp
and.swo
files:only show
.zip
,.ZIP
:some might need you to add
shopt -s extglob
in configuration file.OLD Answer:
You could try out something like this in your
.bash_completion
.At least as a starter.
The core idea is to simply add
complete
for the alias using the existing complete script for the real program. Here I assume that they are all in the format:You can get what it is by executing:
complete -p program_name
. Best to check first.For some methods like
apt-get
one can use only alias + load:For others like
mplayer
one need a function wrapper, as in e.g.:It is quite possible there is a better way to solve this, but has worked fine for my use. I mostly use it for wrapper scripts where I extend the functionality of the original program. Have not used it on aliases.
I do not feel to safe on this hack, but you could see if it works.
Some programs use more general completion like
_longopt
, by which the source file won't be located. Usually it is no need to source either, so a simpler variant could be:One problem here, IIRC, is that some completion scripts are not loaded until first run, as in first:
prog
tabtab. As an alternative perhaps add it as anelse
if sourcing of file fails.