[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