Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Help with directory switching functions

On Sat, Nov 28, 2015 at 10:54:28AM -0800, Bart Schaefer wrote:
> On Nov 24, 11:32am, Dominik Vogt wrote:
> }
> } I'm trying to write a function that alternately switches between
> } two directories.  With "+-" I can repeatedly switch between the
> } current directory and the last one where I did anything (type any
> } command except switching directories).
> [...]
> } The function makes use of the chpwd and precmd functions.
> } 
> } Problems:
> } 
> } 1. Command lines with multiple command cannot be handled properly
> }    because precmd is just called once for the line, not for each
> }    command.
> If you really need to sneak in before (or after) each command rather
> than just each command line, read up on TRAPDEBUG, but see below.

All right, I've tried that, and it gets executed way too often
(e.g. when pressing cursor-up that is bound to a history search
scripts).  On the other hand I don't want to do my own command
line parsing, so I'll just live with precmd for now.  Maybe the
situation never occurs anyway.

> } 2. Depending on $HISTCMD is a bit hacky.  What I'd really want to
> }    do is to look at the command being executed and decide
> }    individually which commands are "interesting" enough to warrant
> }    recording the current directory.
> If you use preexec instead of precmd you can examine the command line
> instead of just examining the history event number.  I think that
> would allow you to start with _IS_CWD_INTERESTING="0" and only set it
> to 1 when something interesting happens (if I read correctly right
> now, you assume interesting and then zero it in chpwd if nothing else
> has happened yet).
> Also note that preexec would happen before chpwd, so you'd need some
> other corresponding logic changes.
> } 3. I'd prefer a shell builtin instead of "readlink".
>     _PWD_A="$PWD:A"

Ah, cool, that's exactly what I was looking for.

> Also, possibly use "cd -q" in _swapdir to avoid running chpwd (the work
> will already have been done in preexec, I think).

Good point.  Had to rewrite my cd script first, though.

> Finally, you might consider using the directory stack; push each of the
> directories that seems interesting, and then you can pop back through
> them, rather than only having the two most recent to swap between.

I already use pushd and popd with autopushd all the time, so it's
not really an option.  I'll probably enhance the script to use a
stack because sometimes more history would be helpful.

Thanks a lot, Bart!


Dominik ^_^  ^_^


Dominik Vogt
IBM Germany

Messages sorted by: Reverse Date, Date, Thread, Author