zsh-users
 help / color / mirror / code / Atom feed
From: "Bart Schaefer" <schaefer@candle.brasslantern.com>
To: John S Cooper <jsc@Eng.Sun.COM>, zsh-users@math.gatech.edu
Subject: Re: `popd' is blocked on non-existent directory
Date: Tue, 15 Oct 1996 22:26:54 -0700	[thread overview]
Message-ID: <961015222654.ZM27814@candle.brasslantern.com> (raw)
In-Reply-To: John S Cooper <jsc@Eng.Sun.COM> "`popd' is blocked on non-existent directory" (Oct 15,  7:02pm)

On Oct 15,  7:02pm, John S Cooper wrote:
} Subject: `popd' is blocked on non-existent directory
}
} Under zsh 3.0.0, if a directory in the directory stack is removed, popd
} seems to get "blocked".  In 2.5, the non-existent directory would just be
} removed from the stack.
} 
} Is there a way to get the old behavior, i.e. have all non-existent
} directories removed from the stack?

--- Src/builtin.c.0	Tue Oct  8 10:30:08 1996
+++ Src/builtin.c	Tue Oct 15 21:23:49 1996
@@ -1082,6 +1082,8 @@
     if (!(dest = cd_do_chdir(nam, getdata(dir)))) {
 	if (!target)
 	    zsfree(getlinknode(dirstack));
+	if (func == BIN_POPD)
+	    zsfree(remnode(dirstack, dir));
 	return NULL;
     }
     if (dest != getdata(dir)) {

} Also, when there's only one entry left on the dir stack, (I think) a popd
} used to remove it and pop me to my home directory.  This is no longer the
} case in 3.0.0 .

The compatible-with-other-shells behavior in this case would be to issue a
`directory stack empty' error message.  (However, I could see an argument
that PUSHD_TO_HOME ought to apply to popd as well.)

What the code is actually doing is pushing the home directory onto the
stack (without actually doing the chdir) and then popping it back off
again.  Then it executes chdir to the top of the stack, that is, to the
directory it's already in:

zagzig[65] ./zsh -f
zagzig% chpwd() { echo CHPWD }
zagzig% popd
/usr/src/local/zsh/zsh-3.0.1-test3/Src
CHPWD
zagzig% popd
/usr/src/local/zsh/zsh-3.0.1-test3/Src
CHPWD

This seems like a lot of wasted effort, particularly considering that
chpwd gets run each time.

--- Src/builtin.c.0	Tue Oct  8 10:30:08 1996
+++ Src/builtin.c	Tue Oct 15 22:20:21 1996
@@ -1019,11 +1019,15 @@
     char *dest;
 
     if (!argv[0]) {
+	if (func == BIN_POPD && !nextnode(firstnode(dirstack))) {
+	    zwarnnam(nam, "directory stack empty", NULL, 0);
+	    return NULL;
+	}
 	if (func == BIN_PUSHD && unset(PUSHDTOHOME))
 	    dir = nextnode(firstnode(dirstack));
 	if (dir)
 	    insertlinknode(dirstack, dir, getlinknode(dirstack));
-	else
+	else if (func != BIN_POPD)
 	    pushnode(dirstack, ztrdup(home));
     } else if (!argv[1]) {
 	int dd;
@@ -1069,7 +1073,6 @@
     target = dir;
     if (func == BIN_POPD) {
 	if (!dir) {
-	    zsfree(getlinknode(dirstack));
 	    target = dir = firstnode(dirstack);
 	} else if (dir != firstnode(dirstack)) {
 	    return dir;

-- 
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-10-16  5:34 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-10-16  2:02 John S Cooper
1996-10-16  5:26 ` Bart Schaefer [this message]
1996-10-17  0:56   ` John S Cooper

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=961015222654.ZM27814@candle.brasslantern.com \
    --to=schaefer@candle.brasslantern.com \
    --cc=jsc@Eng.Sun.COM \
    --cc=schaefer@nbn.com \
    --cc=zsh-users@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).