From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9208 invoked by alias); 9 Nov 2009 21:20:56 -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: 27377 Received: (qmail 24026 invoked from network); 9 Nov 2009 21:20:54 -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: Mon, 09 Nov 2009 16:20:50 -0500 In-Reply-To: (Greg Klanderman's message of "Mon, 09 Nov 2009 12:52:26 -0500") 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> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> On November 9, 2009 Greg Klanderman wrote: > What I think is needed is to > generally remove the current word from incorporation into the ignore > pattern, but I don't know how to do that. If I knew how to relate > $CURRENT to an element of $line that would do it. I think the patch below is the correct fix. I'm still not sure whether it should be using $line or $words and I'm not certain on the difference between two and three colons in the _arguments definition ('*::files:->file' vs '*:::files:->file') but in both cases I suspect it doesn't actually matter. Let me know what you think.. 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 9 Nov 2009 21:07:52 -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,8 @@ case $state in (file) declare -a ignored - ignored=(${line//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH}) + ignored=(${line[1,CURRENT-1]//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH}) + ignored+=(${line[CURRENT+1,-1]//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH}) _files -F ignored && ret=0 ;; esac