I am sorry, Bart. I realize now that my question was very badly worded. I'll see if I can explain what I meant with an example: Suppose I stand in a directory called "src". Since I have "zstyle ':completion:*:cd:*' ignore-parents parent pwd" set, if I type "cd ../s", I will not be offered "src" as a completion, since it gets excluded by the zstyle setting. However, if I only type "../s" (at the beginning of the command line), "src" will be one of the alternatives offered by completion. I realize this is because the completion system cannot know that it should exclude the current directory. So my question was: can I use something similar to the zstyle for cd completion to always exclude the current directory in such a situation? On Mon, Sep 12, 2016 at 7:23 PM, Bart Schaefer wrote: > On Sep 12, 2:32pm, Jesper Nygards wrote: > } > } Is there a way to make auto_cd also ignore the current directory, in the > } same way cd does with this zstyle set? I tried this without success: > } > } zstyle ':completion::complete:-command-::' ignore-parents parent pwd > > Styles of this sort only apply to completion (as might be obvious from > the word "completion" in the context) and only because there is a layer > of user-defined functions implementing most of the completion system. > There are no built-in shell operations that use zstyles values directly. > > This might mostly do what you want: > > autoload -Uz add-zsh-hook > > no-local-autocd() { > set -- "${(z)2}" > [[ $1 = */* ]] || unsetopt autocd > } > > reset-autocd { > setopt autocd > } > > add-zsh-hook preexec no-local-autocd > add-zsh-hook precmd reset-autocd > > I say "mostly" because if you do something like > > % echo foo ; /usr/bin > > the autocd to /usr/bin won't happen because "echo" caused the option to > be turned off. > > You can do a similar thing by overloading the accept-line ZLE widget, or > in more detail by using a DEBUG trap with the DEBUG_BEFORE_CMD option set, > but either of those has its own problems. >