From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16239 invoked from network); 27 Jul 2006 16:01:34 -0000 X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,FORGED_RCVD_HELO, SUBJ_HAS_UNIQ_ID autolearn=ham version=3.1.3 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by ns1.primenet.com.au with SMTP; 27 Jul 2006 16:01:34 -0000 Received-SPF: none (ns1.primenet.com.au: domain at sunsite.dk does not designate permitted sender hosts) Received: (qmail 11084 invoked from network); 27 Jul 2006 16:01:28 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 27 Jul 2006 16:01:28 -0000 Received: (qmail 9069 invoked by alias); 27 Jul 2006 16:01:19 -0000 Mailing-List: contact zsh-users-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 10555 Received: (qmail 9059 invoked from network); 27 Jul 2006 16:01:18 -0000 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by sunsite.dk with SMTP; 27 Jul 2006 16:01:18 -0000 Received: (qmail 9867 invoked from network); 27 Jul 2006 16:01:18 -0000 Received: from ug-out-1314.google.com (66.249.92.170) by a.mx.sunsite.dk with SMTP; 27 Jul 2006 16:01:16 -0000 Received: by ug-out-1314.google.com with SMTP id k3so343103ugf for ; Thu, 27 Jul 2006 09:01:15 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=DzNspV1k4h9b+Bx1atw+j3EGnbXrKL1No9AQGLUW+y30tq8hvKO+HU1mw38G1ncHakTgn5TdJgC9elIjgg2YAVKGwv7oQChl+z8XZmvd+PF+cwgxzTorhHFceeIuk9x4C4UiKcndG1hILYNBXKbu+KmoP8y2hnHOBkVZn0zU9i8= Received: by 10.67.93.7 with SMTP id v7mr7375997ugl; Thu, 27 Jul 2006 09:01:13 -0700 (PDT) Received: by 10.66.236.6 with HTTP; Thu, 27 Jul 2006 09:01:13 -0700 (PDT) Message-ID: Date: Thu, 27 Jul 2006 09:01:13 -0700 From: "Felix Rosencrantz" To: "Peter Stephenson" Subject: Re: Menu-driven version of history-beginning-search-backward Cc: "Zsh users list" In-Reply-To: <200607261638.k6QGcE7E010498@news01.csr.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <200607261638.k6QGcE7E010498@news01.csr.com> Interesting. It covers some items I mention in the ideas on incremental history search ( http://zshwiki.org/ImprovedIncrementalSearch ) I tried this function. One problem is it doesn't seem to work if the line (your search string) contains a space. It would be nice if the user says "foo bar" it matches lines that matches line that match foo*bar -FR. On 7/26/06, Peter Stephenson wrote: > I was too lazy to search the mailing list archive for anything like > this, but in any case it would be good to have something like it in > the distribution. > > It would be easy to expand it to allow patterns on the command line, > but it's going a little beyond the original intention. > > > #Start > # Menu-driven alternative to history-beginning-search-backward. > # As it uses a menu there is no sense of "forward" or "backward", however; > # the entire history is searched. > # > # Configuration: > # autoload -U history-beginning-search-menu > # zle -N history-beginning-search-menu > # bindkey '\eP' history-beginning-search-menu > # > # Example: > # % /bin/su > # Enter digit: > # 1 /bin/su -c 'make install' 4 /bin/su - perforce > # 2 /bin/su 5 /bin/su -c > # 3 /bin/su -c 'chown pws:pws **/*(u0)' > # > # Typing "1" expands the line to > # % /bin/su -c 'make install' > # > # With a prefix argument, the search is not anchored to the beginning, > # so for example "/su" could expand to "p4 files //depot/support/..." > # > # If this is bound to a widget containing "-end", e.g. > # zle -N history-beginning-search-menu-end history-beginning-search-menu > # then the cursor is put at the end of the line, else it is left > # after the matched characters. > > emulate -L zsh > setopt extendedglob > > zmodload -i zsh/parameter > > local -aU matches > local -a display > > if (( ${+NUMERIC} )); then > matches=(${history[(R)*${(q)LBUFFER}*]}) > else > matches=(${history[(R)${(q)LBUFFER}*]}) > fi > > # Filter out any match that's the same as the original. > # Note this isn't a pattern this time. > matches=(${matches:#${LBUFFER}}) > > integer n=${#matches} > integer width=${#n} > > (( n == 0 )) && return 1 > > # Hey, this works... > integer i > display=(${matches/(#m)*/${(l.$width..0.):-$((++i))} $MATCH}) > zle -R "Enter digit${${width##1}:+s}:" $display > > local chars > read -k$width chars > > if [[ $chars != [[:digit:]]## || $chars -eq 0 || $chars -gt $n ]]; then > return 1 > fi > > if [[ $WIDGET = *-end* ]]; then > LBUFFER=${matches[$chars]} RBUFFER= > else > integer newcursor > if (( ${+NUMERIC} )); then > # Advance cursor so that it's still after the string typed > local -a match mbegin mend > if [[ $matches[$chars] = (#b)(*${LBUFFER})* ]]; then > newcursor=${#match[1]} > fi > fi > > BUFFER=${matches[$chars]} > (( newcursor )) && CURSOR=$newcursor > fi > #End > > > -- > Peter Stephenson Software Engineer > CSR PLC, Churchill House, Cambridge Business Park, Cowley Road > Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070 > > > To access the latest news from CSR copy this link into a web browser: http://www.csr.com/email_sig.php >