zsh-workers
 help / color / mirror / code / Atom feed
From: "Bart Schaefer" <schaefer@candle.brasslantern.com>
To: Zoltan Hidvegi <hzoli@cs.elte.hu>
Cc: zsh-workers@math.gatech.edu
Subject: Re: Remaining zsh3.0-pre2 bugs
Date: Wed, 10 Jul 1996 12:11:09 -0700	[thread overview]
Message-ID: <960710121111.ZM4060@candle.brasslantern.com> (raw)
In-Reply-To: Zoltan Hidvegi <hzoli@cs.elte.hu> "Re: Remaining zsh3.0-pre2 bugs" (Jul  9,  4:06pm)

On Jul 9,  4:06pm, Zoltan Hidvegi wrote:
} Subject: Re: Remaining zsh3.0-pre2 bugs
}
} > } In that case zsh simply gives up the completion
} > } attempt, restores the original line and returns.
} > 
} > Why is that necessary?  Maybe it's necessary if the word *ends* in the
} > previous line for some reason, but ...
} 
} The problem is that that:
} 
} % echo 'z'\
} > l<TAB>
} 
} Here get_comp_string removes the quotes around 'z' but it does not work
} since the already entered part cannot be modified.  The quotes have to be
} removed for completing filenames.  This later causes a SEGV.

Well, then, why not catch that special case (backslash-newline) and let
other cases of embedded newlines keep working?  Patch below.

} > Hmm.  Your patch does a couple of things.  One, it removes the loop that
} > folds embedded newlines into semicolons; two, it attempts to save and
} 
} Yes, it seems that it is not necessary.  That mainly caused problems after
} a backslash <newline>.  Perhaps that's the bug mentioned in Etc/BUGS.

Could very well be that bug.  With your patches plus mine below, completion
doesn't work at all for words that cross a backslash-newline (which seems
to me to be the correct behavior), but works for words later on the line
and words that contain quoted newlines.

There's one other bug that this patch does NOT address; and maybe it's not
a bug at all.  However, here's the example:

zagzig<6> touch cegi efgh
zagzig<7> echo c'e<TAB>
zagzig<7> echo c'efgh

If I do it with TWO quotes (I don't have rcquotes set):

zagzig<8> echo c''e<TAB>
zagzig<8> echo cegi

zagzig<9> echo c'e'<TAB>
zagzig<9> echo cegi

And yet:

zagzig<10> echo c'e'<C-b><TAB>		<-- Complete inside second quote
zagzig<10> echo c'efg '			<-- Cursor ends on second quote

Seems to me that case <7> should just feep at me; I'm not sure whether
I think <10> should feep or work like <9>, or whether completeinword
should make a difference, but what it did seems wrong.

Here's the patch for backslash-newline.  It includes (rather than
follows onto) my previous patch for quoted newlines.

*** Src/zle_tricky.c.0	Tue Jul  9 00:50:55 1996
--- Src/zle_tricky.c	Wed Jul 10 12:02:51 1996
***************
*** 497,503 ****
  docomplete(int lst)
  {
      char *s, *ol;
!     int olst = lst, chl = 0, ne = noerrs, ocs = 0;
  
      /* If we are doing a menu-completion... */
  
--- 497,503 ----
  docomplete(int lst)
  {
      char *s, *ol;
!     int olst = lst, chl = 0, ne = noerrs, ocs = 0, oll = 0;
  
      /* If we are doing a menu-completion... */
  
***************
*** 554,559 ****
--- 554,560 ----
  	/* Append the original line contents. */
  	strcpy(q, ol);
  	cs += chl;
+ 	oll = ll;
  	ll = strlen((char *)line);
      }
      else
***************
*** 573,592 ****
  	viinsbegin = ztrsub((char *) line + wb, (char *) line);
      /* If we added chline to the line buffer, reset the original contents. */
      if (ol) {
! 	cs -= chl;
  	wb -= chl;
  	we -= chl;
! 	if (wb < 0 || we < 0 || cs < 0) {
  	    strcpy((char *) line, ol);
! 	    ll = strlen((char *) line);
  	    cs = ocs;
  	    unmetafy_line();
  	    return;
  	}
- 	ocs = cs;
  	cs = 0;
  	foredel(chl);
! 	cs = ocs;
      }
      freeheap();
      /* Save the lexer state, in case the completion code uses the lexer *
--- 574,594 ----
  	viinsbegin = ztrsub((char *) line + wb, (char *) line);
      /* If we added chline to the line buffer, reset the original contents. */
      if (ol) {
! 	int tcs = (cs -= chl);
  	wb -= chl;
  	we -= chl;
! 	/* If completion has to back up across a backslash-newline pair, *
! 	 * the necessary rewrites are impossible.  Give up and bail out. */
! 	if (wb < (oll - ll) || we < (oll - ll) || cs < (oll - ll)) {
  	    strcpy((char *) line, ol);
! 	    ll = oll;
  	    cs = ocs;
  	    unmetafy_line();
  	    return;
  	}
  	cs = 0;
  	foredel(chl);
! 	cs = tcs;
      }
      freeheap();
      /* Save the lexer state, in case the completion code uses the lexer *
***************
*** 741,746 ****
--- 743,753 ----
  	    docompletion(s, lst, lincmd);
  	zsfree(s);
      }
+     if (ol && !nmatches && (wb < 0 || we < 0 || cs < 0)) {
+ 	strcpy((char *) line, ol);
+ 	ll = oll;
+ 	cs = ocs;
+     }
      /* Reset the lexer state, pop the heap. */
      lexrestore();
      popheap();

-- 
Bart Schaefer                             Brass Lantern Enterprises
http://www.well.com/user/barts            http://www.nbn.com/people/lantern

New male in /home/schaefer:
>N  2 Justin William Schaefer  Sat May 11 03:43  53/4040  "Happy Birthday"



  reply	other threads:[~1996-07-10 19:21 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-07-06 22:59 Huy Le
1996-07-07  5:29 ` Bart Schaefer
1996-07-07  5:53 ` Bart Schaefer
1996-07-07  7:07   ` Bart Schaefer
1996-07-07  6:08 ` Bart Schaefer
1996-07-07  9:06   ` Zefram
1996-07-08  0:48 ` Zoltan Hidvegi
1996-07-08  4:22   ` Bart Schaefer
1996-07-08  6:21     ` Bart Schaefer
1996-07-08  7:57       ` Zefram
1996-07-08  8:48         ` Bart Schaefer
1996-07-09  1:32           ` Zoltan Hidvegi
1996-07-09  9:08             ` Bart Schaefer
1996-07-09 14:06               ` Zoltan Hidvegi
1996-07-10 19:11                 ` Bart Schaefer [this message]
1996-07-10 19:48                   ` Zoltan Hidvegi
1996-07-11  0:04                     ` Bart Schaefer
1996-07-11 12:16                       ` Zoltan Hidvegi
1996-07-11 16:45                         ` Bart Schaefer
1996-07-08 14:28     ` Zoltan Hidvegi
1996-07-08  6:38   ` Bart Schaefer
1996-07-11  8:11 ` Peter Stephenson
1996-07-11 12:51   ` Redirection bug fix Peter Stephenson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=960710121111.ZM4060@candle.brasslantern.com \
    --to=schaefer@candle.brasslantern.com \
    --cc=hzoli@cs.elte.hu \
    --cc=schaefer@nbn.com \
    --cc=zsh-workers@math.gatech.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).