From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11587 invoked by alias); 12 Nov 2009 02:57:18 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 27391 Received: (qmail 28298 invoked from network); 12 Nov 2009 02:57:15 -0000 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.2.5 Received-SPF: none (ns1.primenet.com.au: domain at klanderman.net does not designate permitted sender hosts) From: Greg Klanderman To: zsh-workers@zsh.org Subject: Re: bug in 'rm' completion Reply-To: gak@klanderman.net Date: Wed, 11 Nov 2009 21:48:48 -0500 In-Reply-To: <091110075221.ZM27832@torch.brasslantern.com> (Bart Schaefer's message of "Tue, 10 Nov 2009 07:52:21 -0800") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.17 (linux) References: <19191.43212.832827.724369@gargle.gargle.HOWL> <091109092926.ZM26572@torch.brasslantern.com> <091110075221.ZM27832@torch.brasslantern.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> On November 10, 2009 Bart Schaefer wrote: > } + ignored=(${line[1,CURRENT-1]//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH}) > } + ignored+=(${line[CURRENT+1,-1]//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH}) > I'd be inclined to wrap that in a check that ((CURRENT > 1)) As long as you mean to wrap just the first line with that check.. otherwise it won't work correctly, for example: % rm -rf foo bar baz > just so > it's obvious that we don't ignore the only word on the line, rather > than rely on $line[1,0] to do the right thing, but otherwise this > seems right to me. Do you want the analogous check wrapped around the second line? Can we rely on $line[$#line+1,-1] to do the right thing? If not then presumably you want something like the new patch below.. thanks, Greg Index: Completion/Unix/Command/_rm =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Unix/Command/_rm,v retrieving revision 1.2 diff -u -r1.2 _rm --- Completion/Unix/Command/_rm 23 Nov 2008 18:23:29 -0000 1.2 +++ Completion/Unix/Command/_rm 12 Nov 2009 02:47:20 -0000 @@ -5,7 +5,7 @@ '(-f --force)'{-f,--force}'[ignore nonexistent files, never prompt]' '(-I --interactive)-i[prompt before every removal]' '(-r -R --recursive)'{-r,-R,--recursive}'[remove directories and their contents recursively]' - '*:files:->file' + '*::files:->file' ) if _pick_variant gnu=gnu unix --help; then opts+=(-S) @@ -33,7 +33,11 @@ case $state in (file) declare -a ignored - ignored=(${line//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH}) + ignored=() + (( CURRENT > 1 )) && + ignored+=(${line[1,CURRENT-1]//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH}) + (( CURRENT < $#line )) && + ignored+=(${line[CURRENT+1,-1]//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH}) _files -F ignored && ret=0 ;; esac