[Bug 1394920] Re: complete -o filename can't be used with filenames relative to another directory to handle space vs. trailing /
hakon
hakon.hagland at gmail.com
Mon Dec 1 19:57:59 UTC 2014
Thanks for the thorough answer! If I add "shopt -s extglob" your code is
working.
The question is how to add slashes after directory names and not file names. If I remove "-o filenames" and add
"compopt -o nospace" I still can use "compgen -f "$cur" " but it does not add slashes. And the completions are not broken at "/" (if I insert it manually) such that I get a completion list with "a/b/c" instead of just "c" when I try to complete "a/b"..
Do I have to add a slash to $COMP_WORDBREAKS variable?
There is a post a stackoverflow :
http://stackoverflow.com/questions/10528695/how-to-reset-comp-wordbreaks-without-effecting-other-completion-script
It refers to a function "_get_comp_words_by_ref" .. where is this function documented? I searched the bash manual,
http://www.gnu.org/software/bash/manual/bashref.html
but it is not mentioned there..
Thanks!
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to bash-completion in Ubuntu.
https://bugs.launchpad.net/bugs/1394920
Title:
complete -o filename can't be used with filenames relative to another
directory to handle space vs. trailing /
Status in bash-completion package in Ubuntu:
Opinion
Bug description:
I am trying to ignore certain directory names when using bash
completion. For example to ignore "backup" directories I use
$ cat setup.sh
_compTest() {
local curdir cur words val name
cur="${COMP_WORDS[$COMP_CWORD]}"
baseFolder="."
curdir=$PWD
cd "$baseFolder"
words=( $(compgen -f "$cur") )
COMPREPLY=()
for val in "${words[@]}" ; do
name=$(basename "$val")
if [[ $name == "backup" ]] ; then
continue
fi
COMPREPLY+=( "$val" )
done
cd "$curdir"
}
complete -o filenames -F _compTest aaa
After sourcing this:
$ . setup.sh
I can type
$ aaa <tab><tab>
and it works fine. However if I use another baseFolder, for example
setting
baseFolder="$HOME/base"
in the above script (setup.sh) (where $HOME/base is different from the
current directory) the completion list is no longer what I would
expect. That is:
* slashes are missing at the end of directory names, and
* a space is added after each completed directory name, instead of a slash ("/")
$ lsb_release -rd
Description: Ubuntu 14.04.1 LTS
Release: 14.04
$ apt-cache policy bash-completion
bash-completion:
Installed: 1:2.1-4
Candidate: 1:2.1-4
Version table:
*** 1:2.1-4 0
500 http://no.archive.ubuntu.com/ubuntu/ trusty/main i386 Packages
100 /var/lib/dpkg/status
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/bash-completion/+bug/1394920/+subscriptions
More information about the foundations-bugs
mailing list