From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20973 invoked by alias); 4 Mar 2012 19:14:24 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 16831 Received: (qmail 1670 invoked from network); 4 Mar 2012 19:13:55 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 Received-SPF: none (ns1.primenet.com.au: domain at closedmail.com does not designate permitted sender hosts) From: Bart Schaefer Message-id: <120304111338.ZM24681@torch.brasslantern.com> Date: Sun, 04 Mar 2012 11:13:38 -0800 In-reply-to: <20120304144841.GB2090@pierre.localdomain> Comments: In reply to Ranousse "2 questions of completion" (Mar 4, 3:48pm) References: <20120304144841.GB2090@pierre.localdomain> X-Mailer: OpenZMail Classic (0.9.2 24April2005) To: zsh-users@zsh.org Subject: Re: 2 questions of completion MIME-version: 1.0 Content-type: text/plain; charset=us-ascii On Mar 4, 3:48pm, Ranousse wrote: } } \gr tab (for completion) deletes the \ at the beginning of the line. } Is there an option or something to avoid this. No, there really isn't. In order to do its work, completion reduces the input word to its minimally escaped form; it doesn't know about escapes that have been added for special effects beyond normal shell syntax rules. If you use quotes instead of a backslash, completion keeps those and even adds the matching end quote for you. You might be able to write a little wrapper function that looks for (( CURRENT == 1 )) && [[ $WORDS[CURRENT] == \\* ]] and if so removes the backslash, does completion, and then puts the backslash back. } bindkey -M menuselect '^M' .accept-line } } However I have a similar problem with backspace, and can't find } solution. What can I do to make backspace works (I mean not pressing } this key twice) ? You aren't supposed to need anything special for backward-delete-char; it's handled internally to menuselection. In this case, however, the first press of backward-delete-char is deleting the auto-appended space following the completed word, which is why you seem to have to press it twice. You can see this better if you menu-select a directory, and note that pressing backspace kills the trailing slash. Assuming that you have both delete (^?) and backspace (^H) bound to backward-delete-char, a quick workaround for you may be: bindkey -M menuselect -s '^H' '^?^?' which just says that when a backspace is seen, send two deletes. It may be necessary to invert that if your keyboard sends ^? instead of ^H when the key labeled backspace is pressed: bindkey -M menuselect -s '^?' '^H^H' However, DO NOT use BOTH of those bindings -- only one or the other. Using both will result in recursion as each expands the other. On the other hand you'll find that for completions that do not auto- append a space, this is deleting more than you want. You'll just have to try it out and see which behavior you find less bothersome.