Zsh Mailing List Archive
Messages sorted by:
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".
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 ^_^ ^_^
Messages sorted by: