From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16355 invoked from network); 21 Jun 2000 08:03:54 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 21 Jun 2000 08:03:54 -0000 Received: (qmail 11569 invoked by alias); 21 Jun 2000 08:03:44 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 12011 Received: (qmail 11561 invoked from network); 21 Jun 2000 08:03:43 -0000 Date: Wed, 21 Jun 2000 10:03:40 +0200 (MET DST) Message-Id: <200006210803.KAA05777@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk In-reply-to: Peter Stephenson's message of Tue, 20 Jun 2000 17:31:48 +0100 Subject: PATCH: Re: history completion oddity Peter Stephenson wrote: > I expect Sven will tell me this is the way it should work (or has to work), > but it's worth a try... Given the way _history* were implemented, this was indeed correct. What wasn't correct, however, was that it didn't use IPREFIX for matching. That way, the completion code got IPREFIX==${ and PREFIX==PWD, just as you thought. > history completion (ESC-/) on > % echo ${PWD > does nothing. On > % echo ${PWD/ > it gives me what I expect (don't ask): > % echo ${PWD/bc01/bc01/test}/$f > > I would guess that something visceral is grabbing potential parameter > completions before the history code can do anything --- given the second > result, the list of history words is OK, and also, more subtly, it's not > falling over on the incompletely parsed parameter. I didn't get very far > looking at the trace output, a large chunk of which (in my case) seems to > be testing for colouring strings. Yes, I saw this in Andy's trace output, I'll try to improve that. Bart wrote: > ... > > Incidentally, I just had an exchange with A. Spiegl in which he noted that > history completion is unacceptably slow because he has HISTSIZE=15000. He > also has several match specs. I played around with the _history completer > a little and found that it gets called once for every match spec, which > thus assigns h_words=("${(@)historywords[2,-1]}") each time ... I estimate > that at ~5 words per command and ~4 bytes per word, zsh is copying about > 300Kb of memory every time it does that assignment, so zsh rips through > as much as 3Mb every time he hits TAB. Hmhm. I wasn't happy when I used those temporal arrays. I was thinking about allowing `compadd -a "foo[2,-1]"', it seems that I forgot to ask. Would that be OK for everyone? Any better ideas? Anyway I probably should have a look how the allocation behaviour in the completion code can be improved, though. Bye Sven P.S.: HISTSIZE=15000 doesn't seem to make any sense to me, I doubt that this will ever be used... Index: Completion/Commands/_history_complete_word =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Commands/_history_complete_word,v retrieving revision 1.4 diff -u -r1.4 _history_complete_word --- Completion/Commands/_history_complete_word 2000/05/31 09:38:26 1.4 +++ Completion/Commands/_history_complete_word 2000/06/21 08:02:09 @@ -85,6 +85,11 @@ opt="${opt}V" fi + PREFIX="$IPREFIX$PREFIX" + IPREFIX= + SUFFIX="$SUFFIX$ISUFFIX" + ISUFFIX= + h_words=( "${(@)historywords[2,-1]}" ) _wanted "$opt" history-words expl 'history word' \ compadd -Q -a h_words Index: Completion/Core/_expand =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Core/_expand,v retrieving revision 1.19 diff -u -r1.19 _expand --- Completion/Core/_expand 2000/06/19 09:55:31 1.19 +++ Completion/Core/_expand 2000/06/21 08:02:09 @@ -33,6 +33,8 @@ word="$IPREFIX$PREFIX$SUFFIX$ISUFFIX" fi +[[ "$word" = *\$\{[^\}]# ]] && return 1 + zstyle -T ":completion:${curcontext}:" suffix && [[ "$word" = (\~*/*|\$[a-zA-Z0-9_\[\]]##[^a-zA-Z0-9_\[\]]*|\$\{*\}?*) ]] && return 1 Index: Completion/Core/_history =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Core/_history,v retrieving revision 1.2 diff -u -r1.2 _history --- Completion/Core/_history 2000/05/31 09:38:26 1.2 +++ Completion/Core/_history 2000/06/21 08:02:09 @@ -30,6 +30,11 @@ opt="${opt}V" fi +PREFIX="$IPREFIX$PREFIX" +IPREFIX= +SUFFIX="$SUFFIX$ISUFFIX" +ISUFFIX= + # We skip the first element of historywords so the current word doesn't # interfere with the completion h_words=( "${(@)historywords[2,-1]}" ) -- Sven Wischnowsky wischnow@informatik.hu-berlin.de