From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11397 invoked by alias); 20 May 2011 21:55:41 -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: 29332 Received: (qmail 25385 invoked from network); 20 May 2011 21:55:38 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1 Received-SPF: pass (ns1.primenet.com.au: SPF record at _spf.google.com designates 209.85.220.171 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:in-reply-to:references:date :message-id:subject:from:to:content-type; bh=IwBaYNoPDfBmP1uEkEYZO8HCgWwpCLTAYqsPgUnHAFE=; b=CTurq5VAHgLG9gJH2LD86rFHStcqoCRmDgErbnxaeyCTOuCAJpbvN7prcdsx9u7iDf 7TQ7xbsO+LMsu1/rKFpx3lA8lt7UzWzA5SkJ9DOfa/uf8Ns2HrRuvJwpEW4rIaC5tw1Y 3lavPGJAExmYhKyNprJkGtXoU5SY+6tp3mT2g= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=v5/VTLTA62x93pot8DTntm+sNVebpwvF8BzHaeQ95GxL4jRsTxC/OxMwN/5JsJTXXH FXQ6/0B74pjtL+y05JKqi1s3b28+o9XFfHP26ZhsYGw7r5f3znrHEV2ngGGyKbErXCHw VmW45r41NNVMVTt4avtW7HPYr0mByDHhV3flM= MIME-Version: 1.0 In-Reply-To: References: Date: Fri, 20 May 2011 23:55:29 +0200 Message-ID: Subject: Re: tab inserts literal tab instead of completing at beginning of line From: Mikael Magnusson To: Zsh hackers list Content-Type: text/plain; charset=UTF-8 On 19 May 2011 18:00, Mikael Magnusson wrote: > On 19 May 2011 17:19, Bart Schaefer wrote: >> On Thu, May 19, 2011 at 2:36 AM, Mikael Magnusson wrote: >>> >>> Well, in my case there's no more input, just me pressing tab. How's >>> this? (it works) >> >> Sorry, I'm not sure what this does. Add an "empty" value to the >> insert-tab style? If so then that's OK, I think. > > Ah, I was in my own little world there, I see more context is needed > :). What it does is what I described last in my first message: insert > a tab if the line is empty, or contains only tabs (presumably you want > to paste more than one sometimes), otherwise completion as usual. tl;dr nm this whole thing Hmmm, so I'm confused again. It turns out my patch didn't work as well as I hoped. When I press ctrl-n or alt-m, it just inserts those literally as well. I tried comparing _complete_debug output for insert-tab=false and =true, but they were the same. I could do this, but... ( "$KEYS" = $'\t' && "$tmp" = empty && ${#${BUFFER##$'\t'#}} -eq 0 ) So I just erased a big paragraph here explaining how I'm confused since _complete_debug output is identical with insert-tab set to true and false. It took a few minutes for me to realize this meant this is handled in the C code. I got to this line, and decided to give up this project for now. uselist = (useline ? ((isset(AUTOLIST) && !isset(BASHAUTOLIST)) ? (isset(LISTAMBIGUOUS) ? 3 : 2) : 0) : 1); useline is set by this earlier line useline = (wouldinstab ? -1 : (lst != COMP_LIST_COMPLETE)); and wouldinstab is decided by this function, some time way before this static int usetab(void) { ZLE_STRING_T s = zleline + zlecs - 1; if (keybuf[0] != '\t' || keybuf[1]) return 0; for (; s >= zleline && *s != ZWC('\n'); s--) if (*s != ZWC('\t') && *s != ZWC(' ')) return 0; if (compfunc) { wouldinstab = 1; return 0; } return 1; } So I would have to somehow modify all the steps leading from wouldinstab to useline/list/something to pass yet another value and then compare this to my 'empty' value which I tracked down is called 'compinsert' in the C code. Since the code is already a mess of state tracked by un-named magic integer values, I decided not to make matters worse. Also to retain my sanity. -- Mikael Magnusson