[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

compgen and filenames

From: Jonas Diemer
Subject: compgen and filenames
Date: Wed, 12 Mar 2008 09:12:23 +0100
User-agent: KMail/1.9.6 (enterprise 0.20070907.709405)


I am trying to improve the bash_completions for mercurial. For a specific 
command (hg add), I want to show only files eligible for addition as 
completions. The command "hg status -nu" lists such files, so what I do is 

local files="$("$hg" status -n$1 . 2>/dev/null)"
local IFS=$'\n'
COMPREPLY=(address@hidden:-} $(compgen -W '$files' -- "$cur"))

However, there are problems with filenames containing spaces. with the above 
code, spaces are not escaped on the command line, i.e. a 

$ hg add TE<tab>

leads to 

$ hg add TEST FILE

I tried escaping the spaces in the first line above like this:

local files="$("$hg" status -n$1 . 2>/dev/null | sed 's/ /\\ /g')"

With this code in place, the results on the command line are OK, but not the 
completion list that appears when hitting <tab> on an ambiguous prefix:

$ hg add T<tab><tab>
T1      TEST\ FILE

Notice the backslash that should not appear (at least it is not there for 
completion for ls).

I have already tried the "-o filenames" option to compgen, with no success. 

Is what I want at all possible with the current bash (I used GNU bash, version 
3.2.25(1)-release (i486-pc-linux-gnu) from KUbuntu 7.10)? If not, can you fix 
it (e.g. by improving the "-o filenames" option)?

Best regards and thanks in advance,

reply via email to

[Prev in Thread] Current Thread [Next in Thread]