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

Re: string to array space problem in filenames

On Thu, 27 Aug 2015 19:05:26 -0700
Ray Andrews <rayandrews@xxxxxxxxxxx> wrote:
> I should probably know this, but I'm rusty after a few months not 
> thinking about zsh.  I have a personal implementation of a dirstack that 
> just pushes $PWD to the end of a file then rereads the file to an array 
> which is then sent to 'select' to let me change directory. I like it 
> because it survives reboot and works across xterms and removes 
> duplicates and so on.

This doesn't answer the question you've actually asked, but if you
haven't (and in case I haven't mentioned it before) you might want to
take a look at the section "REMEMBERING RECENT DIRECTORIES" in the
zshcontrib manual as the "cdr" mechanism does all this with a certain
amount of configuration.  It looks like I wasn't particularly upfront
about the fact that it removes duplicates from the list, so there's
a patch below.

The configuration I use with this is

  zstyle ':chpwd:*' recent-dirs-max 20
  zstyle ':chpwd:*' recent-dirs-default true
  zstyle ':completion:*' recent-dirs-insert fallback

which prunes the list of directories to 20 (unique) entries and also
defaults to "cd" behaviour if the argument to cdr isn't a nubmer ---
very useful with completion which gets configured above to allow
completion of real directories, not just entries in the list:  you
can simply hit "tab" to cycle through them, most recently used first,
even if what's on the command line is the name itself, and then edit
the directory you're presented with in case it's in the target area
but not the one you want.  This has changed my life (in a small way,


diff --git a/Doc/Zsh/contrib.yo b/Doc/Zsh/contrib.yo
index 4e87d41..db0940d 100644
--- a/Doc/Zsh/contrib.yo
+++ b/Doc/Zsh/contrib.yo
@@ -339,9 +339,13 @@ previous working directory from a list maintained automatically.  It is
 similar in concept to the directory stack controlled by the tt(pushd),
 tt(popd) and tt(dirs) builtins, but is more configurable, and as it stores
 all entries in files it is maintained across sessions and (by default)
-between terminal emulators in the current session.  (The tt(pushd)
-directory stack is not actually modified or used by tt(cdr) unless you
-configure it to do so as described in the configuration section below.)
+between terminal emulators in the current session.  Duplicates are
+automatically removed, so that the list reflects the single most recent
+use of each directory.
+Note that the tt(pushd) directory stack is not actually modified or used
+by tt(cdr) unless you configure it to do so as described in the
+configuration section below.

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