From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10440 invoked from network); 13 Aug 2001 18:08:10 -0000 Received: from sunsite.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 13 Aug 2001 18:08:10 -0000 Received: (qmail 29210 invoked by alias); 13 Aug 2001 18:07:50 -0000 Mailing-List: contact zsh-users-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 4117 Received: (qmail 29193 invoked from network); 13 Aug 2001 18:07:49 -0000 From: martin.ebourne@arcordia.com Expiry-Date: Sun, 11 Nov 2001 -1:-1:-1 +0000 Subject: Delaying menu completion To: zsh-users@sunsite.dk Date: Mon, 13 Aug 2001 18:53:33 +0100 Message-ID: X-MIMETrack: Serialize by Router on LON-ARCMTA-01/ARCORDIA(Release 5.0.3 (Intl)|21 March 2000) at 08/13/2001 07:06:15 PM MIME-Version: 1.0 Content-type: text/plain; charset=us-ascii Hi, Having decided I like this new ^Xa for expanding all matches, as suggested by Sven, I've been inspired onto 'greater' things... Currently I try to avoid menu completion because I prefer the old style of stopping when an ambiguous expansion is met, and me typing a character to resolve it. However, menu selection clearly has a significant plus side so I'd like the option to use either. Essentially I want to complete as normal on tab (since that's the most efficient way normally), and then press a different key to drop into menu selection if it'll be easier. So, what I've done is kept my curent completion settings which don't menu complete, added the style menu = select, and bound the menu-complete widget onto a key. In addition to being a really easy change, this does almost exactly what I want. However, Problem 1 It falls down with _match and _approximate. These two both launch into menu selection on their own and I can't seem to stop them. Setting style insert-unambiguous = yes gets me part of the way there, but they still won't stop fully. Now obviously these completers are not particularly useful without menu completion, but the problem here is that I want it to wait until I ask it to do that - especially with _approximate, since I may not be looking at the screen (or more likely the computer won't have caught up with me), and so I'll continue typing without knowing it's entered menu completion. And when that happens the usual result is a mess (I've had _approximate in there for a while and almost removed it because of this). So what I'd like is for _match and _approximate to just list the possibilities and do nothing else if they've got nothing better to do. Then I'll invoke menu selection and go from there. The _list completer does something a little similar but I still want any common prefix etc added, and I still want _complete to work as normal. Problem 2 Currently I've bound a function key to menu-complete. However, what I'd really like is to use the down arrow key. This would have the advantage of putting me on the arrow keys ready for the menu selection, and seems a logical way of dropping down on to the list. I only want the down arrow to do this if there's already a completion list shown, because the rest of the time I want it to have its normal use (which for me is history-beginning-search-forward). So I tried this: _menu_or_down() { if [[ $compstate[old_list] == shown ]] then zle menu-complete else zle .history-beginning-search-forward fi } zle -C menu-or-down menu-complete _menu_or_down bindkey "^[[B" menu-or-down This does the test correctly but zsh complains that it isn't in ZLE when trying to call the original widgets (which surprised me). The first one can be replaced with _main_complete I guess, but I can't see a way round it for the second one. Using zle -N etc makes the widget calls work but then the compstate isn't available for testing... Any suggestions for this? Also, the second parameter after zle -C (menu-complete here) - the documentation says that this is the built in widget it behaves like. I couldn't understand from the documentation though what exactly this was used for and why it was needed. Cheers, Martin. This e-mail message is CONFIDENTIAL and may contain legally privileged information. If you are not the intended recipient you should not read, copy, distribute, disclose or otherwise use the information in this e-mail. Please also telephone or fax us immediately and delete the message from your system. E-mail may be susceptible to data corruption, interception and unauthorised amendment, and we do not accept liability for any such corruption, interception or amendment or the consequences thereof.