Hello, following your advices I tryed the bash "pattern completion" (don't know the exact expression) There is a huge potential but I can't get it working well.
ex : http:<TAB> = http:http:// But if I prefix ':' with a \ it completes well (http://) https://w<TAB> = https:https://www But if I prefix ':', '/' and '/' with each a \ it completes well (https://www). I tried COMPREPLY to send escaped completion and add : cur=${cur/\\:/:} cur=${...@\\/@/} But I now have to add \ to the ':' I also tried cur=${cur/:/\\\\:} and COMPREPLY=( $( compgen -W "http{,s}\\\\:\\\\/\\\\/{,www} ftp\\\\:\\\\/\\\\/" -- $cur ) ) I looked to the scp completion but it's too complex for me (too many backslashes and regexp to clearly understand what do I need in the wget case). So, no way... I'm now looking to where is the variable I have to unset to make ':' and '/' having the behaviour of any normal character. Otherwise, what was modified since last time : - replaced $(seq x 1 y) by {x..y} - fixed : completion for the http --header (still quite brutal though) - fixed --quota completion (I'm also stuck with a (small) problem to make a "not bound" number completion so that any number value would be completed by this range of characters : [{0..9}${optionnal_suffixe}]) PS: a last thing (to developpers) which as nothing to do with wget, can't contrib/sitecopy use _longopt. (it's because of this example that I used sed to parse the --help output in the first version of this completion) Bye Raph On Fri, Mar 20, 2009 at 11:20:18PM +0100, Freddy Vulto wrote: > On Fri, Mar 20, 2009 at 1:22 PM, <[email protected]> wrote: > > - I *tried* the completion of the beginning of the host. But I > > can't get the -o nospace working :[ > > You have to add the `-o nospace' option after `complete' instead of > `compgen'. See diff. > > > Another problem is that after 'http', 's://' and '://' ARE > > proposed BUT all is messed up with filename completion if I add a > > ':' (maybe because of the slash or something around $IFS ?). > > You can take a look at `scp' completion in file `contrib/ssh' which > already solves processing `:'. Note the: cur=`_get_cword ":"` (?) > I found it difficult though: I tried copying things to wget > but couldn't get it work. Maybe you can give it a try. > > > [parenthesis] > > It makes me think : would an algorithm to convert a regexp in > > a completion script like this be useful ? > > ---> (ht|f)tps?://(www.)? > > ---> (h => http, ht => http, f => ftp, http => ( http:// https://),...) > > ---> h) COMPREPLY=( $( compgen -o nospace -W 'http' -- $cur ) );return > > 0;;... > > [/parenthesis] > > Or use bash parameter expansion (see also diff): > > COMPREPLY=( $( compgen -W "http{,s}://{,www} ftp://" -- $cur ) ) > > > Regards, > > Freddy Vulto > http://fvue.nl > > ---8<--------------------------------------------------------------- > > --- wget.sh.orig 2009-03-20 22:20:13.000000000 +0100 > +++ wget.sh 2009-03-20 22:55:39.000000000 +0100 > @@ -93,23 +93,11 @@ > COMPREPLY=( $( compgen -W "$(wget -h | sed -n 's/^[ > [:blank:]]*\(-[a-zA-A46]\).*$/\1/p')" -- $cur ) ) > return 0 > ;; > - h) > - COMPREPLY=( $( compgen -o nospace -W 'http' -- $cur ) ) > - return 0 > - ;; > - f) > - COMPREPLY=( $( compgen -o nospace -W 'ftp://' -- $cur ) ) > - return 0 > - ;; > - http) > - COMPREPLY=( $( compgen -W 'http:// https://' -- $cur ) ) > - return 0 > - ;; > - https\?://w) > - COMPREPLY=( $( compgen -W "${cur}ww." -- $cur ) ) > + *) > + COMPREPLY=( $( compgen -W "http{,s}://{,www} ftp://" -- $cur ) ) > return 0 > ;; > esac > return 0 > } > -complete -F _wget -o default wget > +complete -F _wget -o nospace wget > > _______________________________________________ > Bash-completion-devel mailing list > [email protected] > http://lists.alioth.debian.org/mailman/listinfo/bash-completion-devel
wget.sh
Description: Bourne shell script
_______________________________________________ Bash-completion-devel mailing list [email protected] http://lists.alioth.debian.org/mailman/listinfo/bash-completion-devel
