zsh-workers
 help / color / mirror / code / Atom feed
* script using vared to read commands - history bug
@ 2000-10-20  4:13 Greg Klanderman
  2000-10-20  7:57 ` Bart Schaefer
  0 siblings, 1 reply; 3+ messages in thread
From: Greg Klanderman @ 2000-10-20  4:13 UTC (permalink / raw)
  To: Zsh list


If I run the following script:

    #!/bin/zsh

    prompt="%B%%%b "
    while cmd="" && vared -h -p "$prompt" cmd ; do 
      echo " -- got: $cmd"
      print -s - "$cmd"
    done

it works as intended, except that the most recent 
command never appears in the history.  What's up?

thank,
Greg


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: script using vared to read commands - history bug
  2000-10-20  4:13 script using vared to read commands - history bug Greg Klanderman
@ 2000-10-20  7:57 ` Bart Schaefer
       [not found]   ` <14832.44455.892766.386987@phl.itasoftware.com>
  0 siblings, 1 reply; 3+ messages in thread
From: Bart Schaefer @ 2000-10-20  7:57 UTC (permalink / raw)
  To: greg, Zsh list

On Oct 20, 12:13am, Greg Klanderman wrote:
} 
} If I run the following script:
} 
}     #!/bin/zsh
} 
}     prompt="%B%%%b "
}     while cmd="" && vared -h -p "$prompt" cmd ; do 
}       echo " -- got: $cmd"
}       print -s - "$cmd"
}     done
} 
} it works as intended, except that the most recent 
} command never appears in the history.  What's up?

What's up is that the history code doesn't really expect to be invoked
from a non-interactive shell, even though `vared -h' will let you get
away with it, so nothing is properly initialized until the second time
you write something to the history, and thereafter it's always off by
one.

If the first thing you do at the prompt in this script is type ctrl-p,
zsh 3.1.9 will core dump.  (3.0.8 doesn't seem to have that part of the
problem.)

If there's a straightforward solution to this, I don't know enough about
the history mechanism to find it quickly.  There are a number of places
in zle_hist.c that never check to see whether quietgethist() returns 0
(which is what produces the core dump), but it's not merely that the
history is empty, because you don't get a core dump at the first prompt
from `zsh -f'.

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com

Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net   


^ permalink raw reply	[flat|nested] 3+ messages in thread

* PATCH: Re: script using vared to read commands - history bug
       [not found]   ` <14832.44455.892766.386987@phl.itasoftware.com>
@ 2000-10-21  3:01     ` Bart Schaefer
  0 siblings, 0 replies; 3+ messages in thread
From: Bart Schaefer @ 2000-10-21  3:01 UTC (permalink / raw)
  To: zsh-workers; +Cc: Greg Klanderman

I wrote:
} If there's a straightforward solution to this, I don't know enough about
} the history mechanism to find it quickly.

The following seems to take care of it.  Does anyone foresee any ill side-
effects that I haven't?  This makes `dohist = 2' override the current
state of (interact && isset(SHINSTDIN)) and start the history mechanism
regardless.

Index: Src/hist.c
===================================================================
@@ -736,7 +736,12 @@
 {
     isfirstln = isfirstch = 1;
     errflag = histdone = 0;
-    stophist = (!dohist || !interact || unset(SHINSTDIN)) ? 2 : 0;
+    if (!dohist)
+	stophist = 2;
+    else if (dohist != 2)
+	stophist = (!interact || unset(SHINSTDIN)) ? 2 : 0;
+    else
+	stophist = 0;
     if (stophist == 2 || (inbufflags & INP_ALIAS)) {
 	chline = hptr = NULL;
 	hlinesz = 0;
@@ -764,7 +769,7 @@
 
     if (hist_ring && !hist_ring->ftim)
 	hist_ring->ftim = time(NULL);
-    if (interact && isset(SHINSTDIN) && !strin) {
+    if ((dohist == 2 || (interact && isset(SHINSTDIN))) && !strin) {
 	histactive = HA_ACTIVE;
 	attachtty(mypgrp);
 	linkcurline();
Index: Src/Zle/zle_main.c
===================================================================
@@ -903,7 +903,7 @@
     if (ops['e'])
 	isfirstln = 1;
     if (ops['h'])
-	hbegin(1);
+	hbegin(2);
     t = (char *) zleread(p1, p2, ops['h'] ? ZLRF_HISTORY : 0);
     if (ops['h'])
 	hend(NULL);

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com

Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net   


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2000-10-21  3:01 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-10-20  4:13 script using vared to read commands - history bug Greg Klanderman
2000-10-20  7:57 ` Bart Schaefer
     [not found]   ` <14832.44455.892766.386987@phl.itasoftware.com>
2000-10-21  3:01     ` PATCH: " Bart Schaefer

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).