Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cd auto-completion of .. fails with parentheses in directory name #5424

Closed
gnebehay opened this issue Sep 20, 2016 · 4 comments
Closed

cd auto-completion of .. fails with parentheses in directory name #5424

gnebehay opened this issue Sep 20, 2016 · 4 comments
Labels
Bug Something isn't working Resolution: not our issue Issue or pull request not related to Oh My Zsh Topic: completion Pull Request or issue regarding completion

Comments

@gnebehay
Copy link

In my .zshrc file, I have

zstyle ':completion:*' special-dirs true

and auto-completion generally works well. The following case however fails reproducibly whenever there are parentheses in the parent directory. Steps to reproduce:

mkdir 'A(B)'
mkdir 'A(B)/C'
cd 'A(B)'

In this directory, cd ..<TAB> works fine (displays auto-completion)

cd C

In this directory cd ..<TAB> does nothing. Notably, ls ..<TAB> still works fine.

@mcornella
Copy link
Member

I can reproduce but this seems to be a zsh issue. This is the tracing of the _cd function:

+_cd:22> setopt localoptions nonomatch
+_cd:24> local expl ret=1 curarg
+_cd:25> integer argstart=2 noopts
+_cd:27> ((  CURRENT > 1  ))
+_cd:30> [[ ../ == -* ]]
+_cd:38> [[ CURRENT -eq 3 ]]
+_cd:49> [[ ../ == (#b)(\~|)[^/]# ]]
+_cd:54> local -a tmpWpath
+_cd:55> [[ ../ == (|*/)../* ]]
+_cd:56> local tmpprefix
+_cd:58> tmpprefix=+_cd:58> cd ..
+_cd:58> print '/tmp/A(B)'
+_cd:58> tmpprefix='/tmp/A(B)' 
+_cd:59> [[ -n '/tmp/A(B)' ]]
+_cd:60> tmpWpath=( -W '/tmp/A(B)' ) 
+_cd:61> IPREFIX=../ 
+_cd:62> PREFIX='' 
+_cd:66> [[ '' != (\~|/|./|../)* && ../ != ../* ]]
+_cd:114> [[ CURRENT -ne 1 ]]
+_cd:114> _wanted directories expl directory _path_files -W '/tmp/A(B)' -/
+_wanted:3> local -a __targs __gopt
+_wanted:5> zparseopts -D -a __gopt 1 2 V J x 'C:=__targs'
+_wanted:7> _tags directories
+_tags:3> local prev
+_tags:10> [[ directories == -- ]]
+_tags:15> ((  1  ))
+_tags:19> local curcontext=:complete:cd: order tag nodef tmp
+_tags:21> [[ directories == -C?* ]]
+_tags:24> [[ directories == -C ]]
+_tags:29> [[ directories == -(|-) ]]
+_tags:31> zstyle -a :completion::complete:cd:: group-order order
+_tags:36> comptags -i :complete:cd: directories
+_tags:40> [[ -n '' ]]
+_tags:43> zstyle -a :completion::complete:cd:: tag-order order
+_tags:47> tag=local-directories
+_tags:48> case local-directories (-)
+_tags:48> case local-directories (!*)
+_tags:48> case local-directories (?*)
+_tags:51> comptry -m local-directories
+_tags:47> tag=directory-stack
+_tags:48> case directory-stack (-)
+_tags:48> case directory-stack (!*)
+_tags:48> case directory-stack (?*)
+_tags:51> comptry -m directory-stack
+_tags:47> tag=path-directories
+_tags:48> case path-directories (-)
+_tags:48> case path-directories (!*)
+_tags:48> case path-directories (?*)
+_tags:51> comptry -m path-directories
+_tags:55> [[ -z '' ]]
+_tags:55> comptry directories
+_tags:60> comptags -T
+_tags:62> return
+_wanted:9> _tags
+_tags:3> local prev
+_tags:10> [[ '' == -- ]]
+_tags:15> ((  0  ))
+_tags:67> comptags -N
+_wanted:10> _all_labels directories expl directory _path_files -W '/tmp/A(B)' -/
+_all_labels:3> local __gopt __len __tmp __pre __suf __ret=1 __descr __spec __prev
+_all_labels:5> [[ directories == - ]]
+_all_labels:10> __gopt=( ) 
+_all_labels:11> zparseopts -D -a __gopt 1 2 V J x
+_all_labels:13> __tmp=8 
+_all_labels:14> __len=7 
+_all_labels:15> [[ __tmp -lt __len ]]
+_all_labels:18> [[ __tmp -eq 7 ]]
+_all_labels:22> __pre=4 
+_all_labels:23> __suf=5 
+_all_labels:26> comptags -A directories curtag __spec
+_all_labels:27> ((  10 > _tags_level  ))
+_all_labels:27> _comp_tags='' 
+_all_labels:28> _tags_level=10 
+_all_labels:29> _comp_tags=' directories ' 
+_all_labels:30> [[ directories == *[^\\]:* ]]
+_all_labels:37> _description directories expl directory
+_description:3> local name gropt nopt xopt format gname hidden hide match opts tag sort
+_description:5> opts=( ) 
+_description:7> gropt=( -J ) 
+_description:8> xopt=( -X ) 
+_description:9> nopt=( ) 
+_description:10> zparseopts -K -D -a nopt 1 2 'V=gropt' 'J=gropt' 'x=xopt'
+_description:12> 3=directory 
+_description:13> [[ -n directory ]]
+_description:13> _lastdescr=( '' directory ) 
+_description:15> zstyle -s :completion::complete:cd::directories group-name gname
+_description:18> _setup directories -default-
+_setup:3> local val nm=0
+_setup:5> [[ 2 -eq 1 ]]
+_setup:7> zstyle -a :completion::complete:cd::directories list-colors val
+_setup:8> zmodload -i zsh/complist
+_setup:9> [[ directories == default ]]
+_setup:12> _comp_colors+=( '(-default-)no=00' '(-default-)fi=00' '(-default-)di=34' '(-default-)ow=34;40' '(-default-)ln=35' '(-default-)pi=30;44' '(-default-)so=35;44' '(-default-)do=35;44' '(-default-)bd=33;44' '(-default-)cd=37;44' '(-default-)or=05;37;41' '(-default-)mi=05;37;41' '(-default-)ex=01;31' '(-default-)*.cmd=01;31' '(-default-)*.exe=01;31' '(-default-)*.com=01;31' '(-default-)*.bat=01;31' '(-default-)*.reg=01;31' '(-default-)*.app=01;31' '(-default-)*.txt=32' '(-default-)*.org=32' '(-default-)*.md=32' '(-default-)*.mkd=32' '(-default-)*.h=32' '(-default-)*.c=32' '(-default-)*.C=32' '(-default-)*.cc=32' '(-default-)*.cpp=32' '(-default-)*.cxx=32' '(-default-)*.objc=32' '(-default-)*.sh=32' '(-default-)*.csh=32' '(-default-)*.zsh=32' '(-default-)*.el=32' '(-default-)*.vim=32' '(-default-)*.java=32' '(-default-)*.pl=32' '(-default-)*.pm=32' '(-default-)*.py=32' '(-default-)*.rb=32' '(-default-)*.hs=32' '(-default-)*.php=32' '(-default-)*.htm=32' '(-default-)*.html=32' '(-default-)*.shtml=32' '(-default-)*.erb=32' '(-default-)*.haml=32' '(-default-)*.xml=32' '(-default-)*.rdf=32' '(-default-)*.css=32' '(-default-)*.sass=32' '(-default-)*.scss=32' '(-default-)*.less=32' '(-default-)*.js=32' '(-default-)*.coffee=32' '(-default-)*.man=32' '(-default-)*.0=32' '(-default-)*.1=32' '(-default-)*.2=32' '(-default-)*.3=32' '(-default-)*.4=32' '(-default-)*.5=32' '(-default-)*.6=32' '(-default-)*.7=32' '(-default-)*.8=32' '(-default-)*.9=32' '(-default-)*.l=32' '(-default-)*.n=32' '(-default-)*.p=32' '(-default-)*.pod=32' '(-default-)*.tex=32' '(-default-)*.bmp=33' '(-default-)*.cgm=33' '(-default-)*.dl=33' '(-default-)*.dvi=33' '(-default-)*.emf=33' '(-default-)*.eps=33' '(-default-)*.gif=33' '(-default-)*.jpeg=33' '(-default-)*.jpg=33' '(-default-)*.JPG=33' '(-default-)*.mng=33' '(-default-)*.pbm=33' '(-default-)*.pcx=33' '(-default-)*.pdf=33' '(-default-)*.pgm=33' '(-default-)*.png=33' '(-default-)*.ppm=33' '(-default-)*.pps=33' '(-default-)*.ppsx=33' '(-default-)*.ps=33' '(-default-)*.svg=33' '(-default-)*.svgz=33' '(-default-)*.tga=33' '(-default-)*.tif=33' '(-default-)*.tiff=33' '(-default-)*.xbm=33' '(-default-)*.xcf=33' '(-default-)*.xpm=33' '(-default-)*.xwd=33' '(-default-)*.xwd=33' '(-default-)*.yuv=33' '(-default-)*.aac=33' '(-default-)*.au=33' '(-default-)*.flac=33' '(-default-)*.mid=33' '(-default-)*.midi=33' '(-default-)*.mka=33' '(-default-)*.mp3=33' '(-default-)*.mpa=33' '(-default-)*.mpeg=33' '(-default-)*.mpg=33' '(-default-)*.ogg=33' '(-default-)*.ra=33' '(-default-)*.wav=33' '(-default-)*.anx=33' '(-default-)*.asf=33' '(-default-)*.avi=33' '(-default-)*.axv=33' '(-default-)*.flc=33' '(-default-)*.fli=33' '(-default-)*.flv=33' '(-default-)*.gl=33' '(-default-)*.m2v=33' '(-default-)*.m4v=33' '(-default-)*.mkv=33' '(-default-)*.mov=33' '(-default-)*.mp4=33' '(-default-)*.mp4v=33' '(-default-)*.mpeg=33' '(-default-)*.mpg=33' '(-default-)*.nuv=33' '(-default-)*.ogm=33' '(-default-)*.ogv=33' '(-default-)*.ogx=33' '(-default-)*.qt=33' '(-default-)*.rm=33' '(-default-)*.rmvb=33' '(-default-)*.swf=33' '(-default-)*.vob=33' '(-default-)*.wmv=33' '(-default-)*.doc=31' '(-default-)*.docx=31' '(-default-)*.rtf=31' '(-default-)*.dot=31' '(-default-)*.dotx=31' '(-default-)*.xls=31' '(-default-)*.xlsx=31' '(-default-)*.ppt=31' '(-default-)*.pptx=31' '(-default-)*.fla=31' '(-default-)*.psd=31' '(-default-)*.7z=1;35' '(-default-)*.apk=1;35' '(-default-)*.arj=1;35' '(-default-)*.bin=1;35' '(-default-)*.bz=1;35' '(-default-)*.bz2=1;35' '(-default-)*.cab=1;35' '(-default-)*.deb=1;35' '(-default-)*.dmg=1;35' '(-default-)*.gem=1;35' '(-default-)*.gz=1;35' '(-default-)*.iso=1;35' '(-default-)*.jar=1;35' '(-default-)*.msi=1;35' '(-default-)*.rar=1;35' '(-default-)*.rpm=1;35' '(-default-)*.tar=1;35' '(-default-)*.tbz=1;35' '(-default-)*.tbz2=1;35' '(-default-)*.tgz=1;35' '(-default-)*.tx=1;35' '(-default-)*.war=1;35' '(-default-)*.xpi=1;35' '(-default-)*.xz=1;35' '(-default-)*.z=1;35' '(-default-)*.Z=1;35' '(-default-)*.zip=1;35' '(-default-)*.ANSI-30-black=30' '(-default-)*.ANSI-01;30-brblack=01;30' '(-default-)*.ANSI-31-red=31' '(-default-)*.ANSI-01;31-brred=01;31' '(-default-)*.ANSI-32-green=32' '(-default-)*.ANSI-01;32-brgreen=01;32' '(-default-)*.ANSI-33-yellow=33' '(-default-)*.ANSI-01;33-bryellow=01;33' '(-default-)*.ANSI-34-blue=34' '(-default-)*.ANSI-01;34-brblue=01;34' '(-default-)*.ANSI-35-magenta=35' '(-default-)*.ANSI-01;35-brmagenta=01;35' '(-default-)*.ANSI-36-cyan=36' '(-default-)*.ANSI-01;36-brcyan=01;36' '(-default-)*.ANSI-37-white=37' '(-default-)*.ANSI-01;37-brwhite=01;37' '(-default-)*.log=01;32' '(-default-)*~=01;32' '(-default-)*#=01;32' '(-default-)*.bak=01;33' '(-default-)*.BAK=01;33' '(-default-)*.old=01;33' '(-default-)*.OLD=01;33' '(-default-)*.org_archive=01;33' '(-default-)*.off=01;33' '(-default-)*.OFF=01;33' '(-default-)*.dist=01;33' '(-default-)*.DIST=01;33' '(-default-)*.orig=01;33' '(-default-)*.ORIG=01;33' '(-default-)*.swp=01;33' '(-default-)*.swo=01;33' '(-default-)*,v=01;33' '(-default-)*.gpg=34' '(-default-)*.gpg=34' '(-default-)*.pgp=34' '(-default-)*.asc=34' '(-default-)*.3des=34' '(-default-)*.aes=34' '(-default-)*.enc=34' ) 
+_setup:27> zstyle -s :completion::complete:cd::directories show-ambiguity val
+_setup:32> zstyle -t :completion::complete:cd::directories list-packed
+_setup:34> [[ 2 -eq 1 ]]
+_setup:37> compstate[list]=ambiguous 
+_setup:40> zstyle -t :completion::complete:cd::directories list-rows-first
+_setup:42> [[ 2 -eq 1 ]]
+_setup:45> compstate[list]=ambiguous 
+_setup:48> zstyle -t :completion::complete:cd::directories last-prompt
+_setup:50> [[ 2 -eq 1 ]]
+_setup:53> compstate[last_prompt]=yes 
+_setup:56> zstyle -t :completion::complete:cd::directories accept-exact
+_setup:58> [[ 2 -eq 1 ]]
+_setup:61> compstate[exact]='' 
+_setup:64> [[ _last_nmatches -ge 0 && _last_nmatches -ne nm ]]
+_setup:67> zstyle -a :completion::complete:cd::directories menu val
+_setup:68> _last_nmatches=0 
+_setup:69> _last_menu_style=( select ) 
+_setup:74> [[ '' != always ]]
+_setup:75> zstyle -s :completion::complete:cd::directories force-list val
+_description:20> name=expl 
+_description:22> zstyle -s :completion::complete:cd::directories format format
+_description:23> zstyle -s :completion::complete:cd::descriptions format format
+_description:25> zstyle -s :completion::complete:cd::directories hidden hidden
+_description:30> zstyle -s :completion::complete:cd::directories matcher match
+_description:32> [[ -n 'm:{a-zA-Z}={A-Za-z}' ]]
+_description:32> opts=( -M 'm:{a-zA-Z}={A-Za-z}' ) 
+_description:36> zstyle -s :completion::complete:cd::directories sort sort
+_description:37> zstyle -s :completion::complete:cd:: sort sort
+_description:46> [[ -z '' ]]
+_description:47> zstyle -a :completion::complete:cd::directories ignored-patterns _comp_ignore
+_description:48> _comp_ignore=( ) 
+_description:50> zstyle -s :completion::complete:cd::directories ignore-line hidden
+_description:66> ((  0  ))
+_description:71> tag=directories 
+_description:73> shift 2
+_description:74> [[ -z directory ]]
+_description:76> [[ -n '' ]]
+_description:80> [[ -n '' ]]
+_description:87> [[ -n '' ]]
+_description:90> set -A expl -M 'm:{a-zA-Z}={A-Za-z}' -J -default-
+_description:94> ((  0  ))
+_description:95> local fakestyle descr
+_description:96> fakestyle=fake
+_description:97> zstyle -a :completion::complete:cd::directories fake match
+_description:98> continue
+_description:96> fakestyle=fake-always
+_description:97> zstyle -a :completion::complete:cd::directories fake-always match
+_description:98> continue
+_description:111> return 0
+_all_labels:39> _path_files -M 'm:{a-zA-Z}={A-Za-z}' -J -default- -W '/tmp/A(B)' -/
+_path_files:3> local -a match mbegin mend
+_path_files:17> _have_glob_qual
+_have_glob_qual:14> local complete
+_have_glob_qual:16> [[ '' == complete ]]
+_have_glob_qual:18> [[ -z '' && on == on && '' == (#b)(((*[^\\\$]|)(\\\\)#)\()([^\)\|\~]#) || on == on && '' == (#b)(((*[^\\\$]|)(\\\\)#)\(\#q)([^\)]#) ]]
+_path_files:38> local linepath realpath donepath prepath testpath exppath skips skipped
+_path_files:39> local tmp1 tmp2 tmp3 tmp4 i orig eorig pre suf tpre tsuf opre osuf cpre
+_path_files:40> local pats haspats ignore pfx pfxsfx sopt gopt opt sdirs ignpar cfopt listsfx
+_path_files:41> local nm=0 menu matcher mopts sort mid accex fake
+_path_files:42> local listfiles listopts tmpdisp origtmp1 Uopt
+_path_files:43> local accept_exact_dirs path_completion
+_path_files:44> integer npathcheck
+_path_files:45> local -a Mopts
+_path_files:47> typeset -U prepaths exppaths
+_path_files:49> exppaths=( ) 
+_path_files:53> zparseopts -a mopts 'P:=pfx' 'S:=pfxsfx' 'q=pfxsfx' 'r:=pfxsfx' 'R:=pfxsfx' 'W:=prepaths' 'F:=ignore' 'M+:=matcher' J+: V+: X+: 1 2 n 'f=tmp1' '/=tmp1' 'g+:-=tmp1'
+_path_files:58> sopt=-/ 
+_path_files:59> ((  1  ))
+_path_files:59> haspats=yes 
+_path_files:60> ((  0  ))
+_path_files:61> ((  1  ))
+_path_files:62> pats='' 
+_path_files:63> pats=( '*(-/)' ) 
+_path_files:68> pats=( '*(-/)' ) 
+_path_files:70> ((  0  ))
+_path_files:74> ((  2  ))
+_path_files:75> tmp1='/tmp/A(B)' 
+_path_files:76> [[ / == \( ]]
+_path_files:78> [[ / == / ]]
+_path_files:79> prepaths=( '/tmp/A(B)/' ) 
+_path_files:84> ((  ! 1  ))
+_path_files:89> ((  0  ))
+_path_files:100> [[ -/ == -(f|) ]]
+_path_files:109> ((  ! 1  ))
+_path_files:130> [[ -z '' && 0 -eq 0 && -z '' && -n '' ]]
+_path_files:134> ((  0  ))
+_path_files:139> [[ 2 -eq 0 ]]
+_path_files:145> ((  2  ))
+_path_files:147> mopts=( -J -default- -M 'm:{a-zA-Z}={A-Za-z}' ) 
+_path_files:150> zstyle -s :completion::complete:cd:: file-sort tmp1
+_path_files:185> zstyle -t :completion::complete:cd::paths squeeze-slashes
+_path_files:188> skips='((.|..)/)##' 
+_path_files:191> zstyle -s :completion::complete:cd::paths special-dirs sdirs
+_path_files:192> zstyle -t :completion::complete:cd::paths list-suffixes
+_path_files:195> [[ '*(-/)' == ((|*[[:blank:]])\*(|[[:blank:]]*|\([^[:blank:]]##\))|*\([^[:blank:]]#/[^[:blank:]]#\)*) ]]
+_path_files:196> sopt=-// 
+_path_files:198> zstyle -a :completion::complete:cd::paths accept-exact accex
+_path_files:199> zstyle -a :completion::complete:cd:: fake-files fake
+_path_files:201> zstyle -s :completion::complete:cd:: ignore-parents ignpar
+_path_files:203> zstyle -t :completion::complete:cd::paths accept-exact-dirs
+_path_files:205> zstyle -T :completion::complete:cd::paths path-completion
+_path_files:206> path_completion=1 
+_path_files:208> [[ -n '' ]]
+_path_files:236> pre='' 
+_path_files:237> suf='' 
+_path_files:238> opre='' 
+_path_files:239> osuf='' 
+_path_files:240> orig='' 
+_path_files:241> eorig='' 
+_path_files:243> [[ automenu-unambiguous == (*menu|[0-9]*) || -n '' || -n '' ]]
+_path_files:246> [[ -n '' ]]
+_path_files:250> Mopts=( -M 'r:|/=* r:|=*' ) 
+_path_files:255> [[ '' == [^][*?#^\|\<\>\\]#(`[^`]#`|\$)*/* ]]
+_path_files:276> [[ '' == \~ ]]
+_path_files:326> linepath='' 
+_path_files:327> realpath='' 
+_path_files:329> zstyle -s :completion::complete:cd:: preserve-prefix tmp1
+_path_files:337> [[ '' == / ]]
+_path_files:350> [[ '' == (.|..)/* ]]
+_path_files:351> donepath='' 
+_path_files:358> prepath=/tmp/A(B)/
+_path_files:364> skipped='' 
+_path_files:365> cpre='' 
+_path_files:367> [[ -n '' || -z 1 ]]
+_path_files:407> tpre='' 
+_path_files:408> tsuf='' 
+_path_files:416> testpath='' 
+_path_files:418> tmp2='' 
+_path_files:419> tpre='' 
+_path_files:421> tmp1=( '/tmp/A(B)/' ) 
+_path_files:424> ((  npathcheck = 0  ))
+_path_files:425> true
+_path_files:427> origtmp1=( '/tmp/A(B)/' ) 
+_path_files:430> [[ '' == */* ]]
+_path_files:434> PREFIX='' 
+_path_files:435> SUFFIX='' 
+_path_files:447> tmp2=( '/tmp/A(B)/' ) 
+_path_files:449> [[ '' == (#b)*/(*) ]]
+_path_files:462> [[ -// == *[/f]* ]]
+_path_files:463> compfiles -p tmp1 accex '' 'm:{a-zA-Z}={A-Za-z} m:{a-zA-Z}={A-Za-z}' false fake '*(-/)'
+_path_files:467> tmp1=( ) 
+_path_files:469> [[ -n '' ]]
+_path_files:541> ((  ! 0  ))
+_path_files:553> [[ -z '' && -n '' ]]
+_path_files:561> [[ -n yes && -z '' && '' == */ ]]
+_path_files:567> continue 2
+_path_files:881> [[ _matcher_num -eq 3 ]]
+_path_files:890> [[ nm -ne 'compstate[nmatches]' ]]
+_all_labels:26> comptags -A directories curtag __spec
+_all_labels:43> return __ret
+_wanted:9> _tags
+_tags:3> local prev
+_tags:10> [[ '' == -- ]]
+_tags:15> ((  0  ))
+_tags:67> comptags -N
+_wanted:13> return 1
+_cd:117> return ret
+_cd:22> setopt localoptions nonomatch
+_cd:24> local expl ret=1 curarg
+_cd:25> integer argstart=2 noopts
+_cd:27> ((  CURRENT > 1  ))
+_cd:30> [[ ../ == -* ]]
+_cd:38> [[ CURRENT -eq 3 ]]
+_cd:49> [[ ../ == (#b)(\~|)[^/]# ]]
+_cd:54> local -a tmpWpath
+_cd:55> [[ ../ == (|*/)../* ]]
+_cd:56> local tmpprefix
+_cd:58> tmpprefix=+_cd:58> cd ..
+_cd:58> print '/tmp/A(B)'
+_cd:58> tmpprefix='/tmp/A(B)' 
+_cd:59> [[ -n '/tmp/A(B)' ]]
+_cd:60> tmpWpath=( -W '/tmp/A(B)' ) 
+_cd:61> IPREFIX=../ 
+_cd:62> PREFIX='' 
+_cd:66> [[ '' != (\~|/|./|../)* && ../ != ../* ]]
+_cd:114> [[ CURRENT -ne 1 ]]
+_cd:114> _wanted directories expl directory _path_files -W '/tmp/A(B)' -/
+_wanted:3> local -a __targs __gopt
+_wanted:5> zparseopts -D -a __gopt 1 2 V J x 'C:=__targs'
+_wanted:7> _tags directories
+_tags:3> local prev
+_tags:10> [[ directories == -- ]]
+_tags:15> ((  1  ))
+_tags:19> local curcontext=:complete:cd: order tag nodef tmp
+_tags:21> [[ directories == -C?* ]]
+_tags:24> [[ directories == -C ]]
+_tags:29> [[ directories == -(|-) ]]
+_tags:31> zstyle -a :completion::complete:cd:: group-order order
+_tags:36> comptags -i :complete:cd: directories
+_tags:40> [[ -n '' ]]
+_tags:43> zstyle -a :completion::complete:cd:: tag-order order
+_tags:47> tag=local-directories
+_tags:48> case local-directories (-)
+_tags:48> case local-directories (!*)
+_tags:48> case local-directories (?*)
+_tags:51> comptry -m local-directories
+_tags:47> tag=directory-stack
+_tags:48> case directory-stack (-)
+_tags:48> case directory-stack (!*)
+_tags:48> case directory-stack (?*)
+_tags:51> comptry -m directory-stack
+_tags:47> tag=path-directories
+_tags:48> case path-directories (-)
+_tags:48> case path-directories (!*)
+_tags:48> case path-directories (?*)
+_tags:51> comptry -m path-directories
+_tags:55> [[ -z '' ]]
+_tags:55> comptry directories
+_tags:60> comptags -T
+_tags:62> return
+_wanted:9> _tags
+_tags:3> local prev
+_tags:10> [[ '' == -- ]]
+_tags:15> ((  0  ))
+_tags:67> comptags -N
+_wanted:10> _all_labels directories expl directory _path_files -W '/tmp/A(B)' -/
+_all_labels:3> local __gopt __len __tmp __pre __suf __ret=1 __descr __spec __prev
+_all_labels:5> [[ directories == - ]]
+_all_labels:10> __gopt=( ) 
+_all_labels:11> zparseopts -D -a __gopt 1 2 V J x
+_all_labels:13> __tmp=8 
+_all_labels:14> __len=7 
+_all_labels:15> [[ __tmp -lt __len ]]
+_all_labels:18> [[ __tmp -eq 7 ]]
+_all_labels:22> __pre=4 
+_all_labels:23> __suf=5 
+_all_labels:26> comptags -A directories curtag __spec
+_all_labels:27> ((  10 > _tags_level  ))
+_all_labels:28> _tags_level=10 
+_all_labels:29> _comp_tags=' directories  directories ' 
+_all_labels:30> [[ directories == *[^\\]:* ]]
+_all_labels:37> _description directories expl directory
+_description:3> local name gropt nopt xopt format gname hidden hide match opts tag sort
+_description:5> opts=( ) 
+_description:7> gropt=( -J ) 
+_description:8> xopt=( -X ) 
+_description:9> nopt=( ) 
+_description:10> zparseopts -K -D -a nopt 1 2 'V=gropt' 'J=gropt' 'x=xopt'
+_description:12> 3=directory 
+_description:13> [[ -n directory ]]
+_description:13> _lastdescr=( '' directory directory ) 
+_description:15> zstyle -s :completion::complete:cd::directories group-name gname
+_description:18> _setup directories -default-
+_setup:3> local val nm=0
+_setup:5> [[ 2 -eq 1 ]]
+_setup:7> zstyle -a :completion::complete:cd::directories list-colors val
+_setup:8> zmodload -i zsh/complist
+_setup:9> [[ directories == default ]]
+_setup:12> _comp_colors+=( '(-default-)no=00' '(-default-)fi=00' '(-default-)di=34' '(-default-)ow=34;40' '(-default-)ln=35' '(-default-)pi=30;44' '(-default-)so=35;44' '(-default-)do=35;44' '(-default-)bd=33;44' '(-default-)cd=37;44' '(-default-)or=05;37;41' '(-default-)mi=05;37;41' '(-default-)ex=01;31' '(-default-)*.cmd=01;31' '(-default-)*.exe=01;31' '(-default-)*.com=01;31' '(-default-)*.bat=01;31' '(-default-)*.reg=01;31' '(-default-)*.app=01;31' '(-default-)*.txt=32' '(-default-)*.org=32' '(-default-)*.md=32' '(-default-)*.mkd=32' '(-default-)*.h=32' '(-default-)*.c=32' '(-default-)*.C=32' '(-default-)*.cc=32' '(-default-)*.cpp=32' '(-default-)*.cxx=32' '(-default-)*.objc=32' '(-default-)*.sh=32' '(-default-)*.csh=32' '(-default-)*.zsh=32' '(-default-)*.el=32' '(-default-)*.vim=32' '(-default-)*.java=32' '(-default-)*.pl=32' '(-default-)*.pm=32' '(-default-)*.py=32' '(-default-)*.rb=32' '(-default-)*.hs=32' '(-default-)*.php=32' '(-default-)*.htm=32' '(-default-)*.html=32' '(-default-)*.shtml=32' '(-default-)*.erb=32' '(-default-)*.haml=32' '(-default-)*.xml=32' '(-default-)*.rdf=32' '(-default-)*.css=32' '(-default-)*.sass=32' '(-default-)*.scss=32' '(-default-)*.less=32' '(-default-)*.js=32' '(-default-)*.coffee=32' '(-default-)*.man=32' '(-default-)*.0=32' '(-default-)*.1=32' '(-default-)*.2=32' '(-default-)*.3=32' '(-default-)*.4=32' '(-default-)*.5=32' '(-default-)*.6=32' '(-default-)*.7=32' '(-default-)*.8=32' '(-default-)*.9=32' '(-default-)*.l=32' '(-default-)*.n=32' '(-default-)*.p=32' '(-default-)*.pod=32' '(-default-)*.tex=32' '(-default-)*.bmp=33' '(-default-)*.cgm=33' '(-default-)*.dl=33' '(-default-)*.dvi=33' '(-default-)*.emf=33' '(-default-)*.eps=33' '(-default-)*.gif=33' '(-default-)*.jpeg=33' '(-default-)*.jpg=33' '(-default-)*.JPG=33' '(-default-)*.mng=33' '(-default-)*.pbm=33' '(-default-)*.pcx=33' '(-default-)*.pdf=33' '(-default-)*.pgm=33' '(-default-)*.png=33' '(-default-)*.ppm=33' '(-default-)*.pps=33' '(-default-)*.ppsx=33' '(-default-)*.ps=33' '(-default-)*.svg=33' '(-default-)*.svgz=33' '(-default-)*.tga=33' '(-default-)*.tif=33' '(-default-)*.tiff=33' '(-default-)*.xbm=33' '(-default-)*.xcf=33' '(-default-)*.xpm=33' '(-default-)*.xwd=33' '(-default-)*.xwd=33' '(-default-)*.yuv=33' '(-default-)*.aac=33' '(-default-)*.au=33' '(-default-)*.flac=33' '(-default-)*.mid=33' '(-default-)*.midi=33' '(-default-)*.mka=33' '(-default-)*.mp3=33' '(-default-)*.mpa=33' '(-default-)*.mpeg=33' '(-default-)*.mpg=33' '(-default-)*.ogg=33' '(-default-)*.ra=33' '(-default-)*.wav=33' '(-default-)*.anx=33' '(-default-)*.asf=33' '(-default-)*.avi=33' '(-default-)*.axv=33' '(-default-)*.flc=33' '(-default-)*.fli=33' '(-default-)*.flv=33' '(-default-)*.gl=33' '(-default-)*.m2v=33' '(-default-)*.m4v=33' '(-default-)*.mkv=33' '(-default-)*.mov=33' '(-default-)*.mp4=33' '(-default-)*.mp4v=33' '(-default-)*.mpeg=33' '(-default-)*.mpg=33' '(-default-)*.nuv=33' '(-default-)*.ogm=33' '(-default-)*.ogv=33' '(-default-)*.ogx=33' '(-default-)*.qt=33' '(-default-)*.rm=33' '(-default-)*.rmvb=33' '(-default-)*.swf=33' '(-default-)*.vob=33' '(-default-)*.wmv=33' '(-default-)*.doc=31' '(-default-)*.docx=31' '(-default-)*.rtf=31' '(-default-)*.dot=31' '(-default-)*.dotx=31' '(-default-)*.xls=31' '(-default-)*.xlsx=31' '(-default-)*.ppt=31' '(-default-)*.pptx=31' '(-default-)*.fla=31' '(-default-)*.psd=31' '(-default-)*.7z=1;35' '(-default-)*.apk=1;35' '(-default-)*.arj=1;35' '(-default-)*.bin=1;35' '(-default-)*.bz=1;35' '(-default-)*.bz2=1;35' '(-default-)*.cab=1;35' '(-default-)*.deb=1;35' '(-default-)*.dmg=1;35' '(-default-)*.gem=1;35' '(-default-)*.gz=1;35' '(-default-)*.iso=1;35' '(-default-)*.jar=1;35' '(-default-)*.msi=1;35' '(-default-)*.rar=1;35' '(-default-)*.rpm=1;35' '(-default-)*.tar=1;35' '(-default-)*.tbz=1;35' '(-default-)*.tbz2=1;35' '(-default-)*.tgz=1;35' '(-default-)*.tx=1;35' '(-default-)*.war=1;35' '(-default-)*.xpi=1;35' '(-default-)*.xz=1;35' '(-default-)*.z=1;35' '(-default-)*.Z=1;35' '(-default-)*.zip=1;35' '(-default-)*.ANSI-30-black=30' '(-default-)*.ANSI-01;30-brblack=01;30' '(-default-)*.ANSI-31-red=31' '(-default-)*.ANSI-01;31-brred=01;31' '(-default-)*.ANSI-32-green=32' '(-default-)*.ANSI-01;32-brgreen=01;32' '(-default-)*.ANSI-33-yellow=33' '(-default-)*.ANSI-01;33-bryellow=01;33' '(-default-)*.ANSI-34-blue=34' '(-default-)*.ANSI-01;34-brblue=01;34' '(-default-)*.ANSI-35-magenta=35' '(-default-)*.ANSI-01;35-brmagenta=01;35' '(-default-)*.ANSI-36-cyan=36' '(-default-)*.ANSI-01;36-brcyan=01;36' '(-default-)*.ANSI-37-white=37' '(-default-)*.ANSI-01;37-brwhite=01;37' '(-default-)*.log=01;32' '(-default-)*~=01;32' '(-default-)*#=01;32' '(-default-)*.bak=01;33' '(-default-)*.BAK=01;33' '(-default-)*.old=01;33' '(-default-)*.OLD=01;33' '(-default-)*.org_archive=01;33' '(-default-)*.off=01;33' '(-default-)*.OFF=01;33' '(-default-)*.dist=01;33' '(-default-)*.DIST=01;33' '(-default-)*.orig=01;33' '(-default-)*.ORIG=01;33' '(-default-)*.swp=01;33' '(-default-)*.swo=01;33' '(-default-)*,v=01;33' '(-default-)*.gpg=34' '(-default-)*.gpg=34' '(-default-)*.pgp=34' '(-default-)*.asc=34' '(-default-)*.3des=34' '(-default-)*.aes=34' '(-default-)*.enc=34' ) 
+_setup:27> zstyle -s :completion::complete:cd::directories show-ambiguity val
+_setup:32> zstyle -t :completion::complete:cd::directories list-packed
+_setup:34> [[ 2 -eq 1 ]]
+_setup:37> compstate[list]=ambiguous 
+_setup:40> zstyle -t :completion::complete:cd::directories list-rows-first
+_setup:42> [[ 2 -eq 1 ]]
+_setup:45> compstate[list]=ambiguous 
+_setup:48> zstyle -t :completion::complete:cd::directories last-prompt
+_setup:50> [[ 2 -eq 1 ]]
+_setup:53> compstate[last_prompt]=yes 
+_setup:56> zstyle -t :completion::complete:cd::directories accept-exact
+_setup:58> [[ 2 -eq 1 ]]
+_setup:61> compstate[exact]='' 
+_setup:64> [[ _last_nmatches -ge 0 && _last_nmatches -ne nm ]]
+_setup:67> zstyle -a :completion::complete:cd::directories menu val
+_setup:68> _last_nmatches=0 
+_setup:69> _last_menu_style=( select ) 
+_setup:74> [[ '' != always ]]
+_setup:75> zstyle -s :completion::complete:cd::directories force-list val
+_description:20> name=expl 
+_description:22> zstyle -s :completion::complete:cd::directories format format
+_description:23> zstyle -s :completion::complete:cd::descriptions format format
+_description:25> zstyle -s :completion::complete:cd::directories hidden hidden
+_description:30> zstyle -s :completion::complete:cd::directories matcher match
+_description:32> [[ -n 'r:|[._-]=* r:|=*' ]]
+_description:32> opts=( -M 'r:|[._-]=* r:|=*' ) 
+_description:36> zstyle -s :completion::complete:cd::directories sort sort
+_description:37> zstyle -s :completion::complete:cd:: sort sort
+_description:46> [[ -z '' ]]
+_description:47> zstyle -a :completion::complete:cd::directories ignored-patterns _comp_ignore
+_description:48> _comp_ignore=( ) 
+_description:50> zstyle -s :completion::complete:cd::directories ignore-line hidden
+_description:66> ((  0  ))
+_description:71> tag=directories 
+_description:73> shift 2
+_description:74> [[ -z directory ]]
+_description:76> [[ -n '' ]]
+_description:80> [[ -n '' ]]
+_description:87> [[ -n '' ]]
+_description:90> set -A expl -M 'r:|[._-]=* r:|=*' -J -default-
+_description:94> ((  0  ))
+_description:95> local fakestyle descr
+_description:96> fakestyle=fake
+_description:97> zstyle -a :completion::complete:cd::directories fake match
+_description:98> continue
+_description:96> fakestyle=fake-always
+_description:97> zstyle -a :completion::complete:cd::directories fake-always match
+_description:98> continue
+_description:111> return 0
+_all_labels:39> _path_files -M 'r:|[._-]=* r:|=*' -J -default- -W '/tmp/A(B)' -/
+_path_files:3> local -a match mbegin mend
+_path_files:17> _have_glob_qual
+_have_glob_qual:14> local complete
+_have_glob_qual:16> [[ '' == complete ]]
+_have_glob_qual:18> [[ -z '' && on == on && '' == (#b)(((*[^\\\$]|)(\\\\)#)\()([^\)\|\~]#) || on == on && '' == (#b)(((*[^\\\$]|)(\\\\)#)\(\#q)([^\)]#) ]]
+_path_files:38> local linepath realpath donepath prepath testpath exppath skips skipped
+_path_files:39> local tmp1 tmp2 tmp3 tmp4 i orig eorig pre suf tpre tsuf opre osuf cpre
+_path_files:40> local pats haspats ignore pfx pfxsfx sopt gopt opt sdirs ignpar cfopt listsfx
+_path_files:41> local nm=0 menu matcher mopts sort mid accex fake
+_path_files:42> local listfiles listopts tmpdisp origtmp1 Uopt
+_path_files:43> local accept_exact_dirs path_completion
+_path_files:44> integer npathcheck
+_path_files:45> local -a Mopts
+_path_files:47> typeset -U prepaths exppaths
+_path_files:49> exppaths=( ) 
+_path_files:53> zparseopts -a mopts 'P:=pfx' 'S:=pfxsfx' 'q=pfxsfx' 'r:=pfxsfx' 'R:=pfxsfx' 'W:=prepaths' 'F:=ignore' 'M+:=matcher' J+: V+: X+: 1 2 n 'f=tmp1' '/=tmp1' 'g+:-=tmp1'
+_path_files:58> sopt=-/ 
+_path_files:59> ((  1  ))
+_path_files:59> haspats=yes 
+_path_files:60> ((  0  ))
+_path_files:61> ((  1  ))
+_path_files:62> pats='' 
+_path_files:63> pats=( '*(-/)' ) 
+_path_files:68> pats=( '*(-/)' ) 
+_path_files:70> ((  0  ))
+_path_files:74> ((  2  ))
+_path_files:75> tmp1='/tmp/A(B)' 
+_path_files:76> [[ / == \( ]]
+_path_files:78> [[ / == / ]]
+_path_files:79> prepaths=( '/tmp/A(B)/' ) 
+_path_files:84> ((  ! 1  ))
+_path_files:89> ((  0  ))
+_path_files:100> [[ -/ == -(f|) ]]
+_path_files:109> ((  ! 1  ))
+_path_files:130> [[ -z '' && 0 -eq 0 && -z '' && -n '' ]]
+_path_files:134> ((  0  ))
+_path_files:139> [[ 2 -eq 0 ]]
+_path_files:145> ((  2  ))
+_path_files:147> mopts=( -J -default- -M 'r:|[._-]=* r:|=*' ) 
+_path_files:150> zstyle -s :completion::complete:cd:: file-sort tmp1
+_path_files:185> zstyle -t :completion::complete:cd::paths squeeze-slashes
+_path_files:188> skips='((.|..)/)##' 
+_path_files:191> zstyle -s :completion::complete:cd::paths special-dirs sdirs
+_path_files:192> zstyle -t :completion::complete:cd::paths list-suffixes
+_path_files:195> [[ '*(-/)' == ((|*[[:blank:]])\*(|[[:blank:]]*|\([^[:blank:]]##\))|*\([^[:blank:]]#/[^[:blank:]]#\)*) ]]
+_path_files:196> sopt=-// 
+_path_files:198> zstyle -a :completion::complete:cd::paths accept-exact accex
+_path_files:199> zstyle -a :completion::complete:cd:: fake-files fake
+_path_files:201> zstyle -s :completion::complete:cd:: ignore-parents ignpar
+_path_files:203> zstyle -t :completion::complete:cd::paths accept-exact-dirs
+_path_files:205> zstyle -T :completion::complete:cd::paths path-completion
+_path_files:206> path_completion=1 
+_path_files:208> [[ -n '' ]]
+_path_files:236> pre='' 
+_path_files:237> suf='' 
+_path_files:238> opre='' 
+_path_files:239> osuf='' 
+_path_files:240> orig='' 
+_path_files:241> eorig='' 
+_path_files:243> [[ automenu-unambiguous == (*menu|[0-9]*) || -n '' || -n '' ]]
+_path_files:246> [[ -n '' ]]
+_path_files:250> Mopts=( -M 'r:|/=* r:|=*' ) 
+_path_files:255> [[ '' == [^][*?#^\|\<\>\\]#(`[^`]#`|\$)*/* ]]
+_path_files:276> [[ '' == \~ ]]
+_path_files:326> linepath='' 
+_path_files:327> realpath='' 
+_path_files:329> zstyle -s :completion::complete:cd:: preserve-prefix tmp1
+_path_files:337> [[ '' == / ]]
+_path_files:350> [[ '' == (.|..)/* ]]
+_path_files:351> donepath='' 
+_path_files:358> prepath=/tmp/A(B)/
+_path_files:364> skipped='' 
+_path_files:365> cpre='' 
+_path_files:367> [[ -n '' || -z 1 ]]
+_path_files:407> tpre='' 
+_path_files:408> tsuf='' 
+_path_files:416> testpath='' 
+_path_files:418> tmp2='' 
+_path_files:419> tpre='' 
+_path_files:421> tmp1=( '/tmp/A(B)/' ) 
+_path_files:424> ((  npathcheck = 0  ))
+_path_files:425> true
+_path_files:427> origtmp1=( '/tmp/A(B)/' ) 
+_path_files:430> [[ '' == */* ]]
+_path_files:434> PREFIX='' 
+_path_files:435> SUFFIX='' 
+_path_files:447> tmp2=( '/tmp/A(B)/' ) 
+_path_files:449> [[ '' == (#b)*/(*) ]]
+_path_files:462> [[ -// == *[/f]* ]]
+_path_files:463> compfiles -p tmp1 accex '' 'r:|[._-]=* r:|=* r:|[._-]=* r:|=*' false fake '*(-/)'
+_path_files:467> tmp1=( ) 
+_path_files:469> [[ -n '' ]]
+_path_files:541> ((  ! 0  ))
+_path_files:553> [[ -z '' && -n '' ]]
+_path_files:561> [[ -n yes && -z '' && '' == */ ]]
+_path_files:567> continue 2
+_path_files:881> [[ _matcher_num -eq 3 ]]
+_path_files:890> [[ nm -ne 'compstate[nmatches]' ]]
+_all_labels:26> comptags -A directories curtag __spec
+_all_labels:43> return __ret
+_wanted:9> _tags
+_tags:3> local prev
+_tags:10> [[ '' == -- ]]
+_tags:15> ((  0  ))
+_tags:67> comptags -N
+_wanted:13> return 1
+_cd:117> return ret
+_cd:22> setopt localoptions nonomatch
+_cd:24> local expl ret=1 curarg
+_cd:25> integer argstart=2 noopts
+_cd:27> ((  CURRENT > 1  ))
+_cd:30> [[ ../ == -* ]]
+_cd:38> [[ CURRENT -eq 3 ]]
+_cd:49> [[ ../ == (#b)(\~|)[^/]# ]]
+_cd:54> local -a tmpWpath
+_cd:55> [[ ../ == (|*/)../* ]]
+_cd:56> local tmpprefix
+_cd:58> tmpprefix=+_cd:58> cd ..
+_cd:58> print '/tmp/A(B)'
+_cd:58> tmpprefix='/tmp/A(B)' 
+_cd:59> [[ -n '/tmp/A(B)' ]]
+_cd:60> tmpWpath=( -W '/tmp/A(B)' ) 
+_cd:61> IPREFIX=../ 
+_cd:62> PREFIX='' 
+_cd:66> [[ '' != (\~|/|./|../)* && ../ != ../* ]]
+_cd:114> [[ CURRENT -ne 1 ]]
+_cd:114> _wanted directories expl directory _path_files -W '/tmp/A(B)' -/
+_wanted:3> local -a __targs __gopt
+_wanted:5> zparseopts -D -a __gopt 1 2 V J x 'C:=__targs'
+_wanted:7> _tags directories
+_tags:3> local prev
+_tags:10> [[ directories == -- ]]
+_tags:15> ((  1  ))
+_tags:19> local curcontext=:complete:cd: order tag nodef tmp
+_tags:21> [[ directories == -C?* ]]
+_tags:24> [[ directories == -C ]]
+_tags:29> [[ directories == -(|-) ]]
+_tags:31> zstyle -a :completion::complete:cd:: group-order order
+_tags:36> comptags -i :complete:cd: directories
+_tags:40> [[ -n '' ]]
+_tags:43> zstyle -a :completion::complete:cd:: tag-order order
+_tags:47> tag=local-directories
+_tags:48> case local-directories (-)
+_tags:48> case local-directories (!*)
+_tags:48> case local-directories (?*)
+_tags:51> comptry -m local-directories
+_tags:47> tag=directory-stack
+_tags:48> case directory-stack (-)
+_tags:48> case directory-stack (!*)
+_tags:48> case directory-stack (?*)
+_tags:51> comptry -m directory-stack
+_tags:47> tag=path-directories
+_tags:48> case path-directories (-)
+_tags:48> case path-directories (!*)
+_tags:48> case path-directories (?*)
+_tags:51> comptry -m path-directories
+_tags:55> [[ -z '' ]]
+_tags:55> comptry directories
+_tags:60> comptags -T
+_tags:62> return
+_wanted:9> _tags
+_tags:3> local prev
+_tags:10> [[ '' == -- ]]
+_tags:15> ((  0  ))
+_tags:67> comptags -N
+_wanted:10> _all_labels directories expl directory _path_files -W '/tmp/A(B)' -/
+_all_labels:3> local __gopt __len __tmp __pre __suf __ret=1 __descr __spec __prev
+_all_labels:5> [[ directories == - ]]
+_all_labels:10> __gopt=( ) 
+_all_labels:11> zparseopts -D -a __gopt 1 2 V J x
+_all_labels:13> __tmp=8 
+_all_labels:14> __len=7 
+_all_labels:15> [[ __tmp -lt __len ]]
+_all_labels:18> [[ __tmp -eq 7 ]]
+_all_labels:22> __pre=4 
+_all_labels:23> __suf=5 
+_all_labels:26> comptags -A directories curtag __spec
+_all_labels:27> ((  10 > _tags_level  ))
+_all_labels:28> _tags_level=10 
+_all_labels:29> _comp_tags=' directories  directories  directories ' 
+_all_labels:30> [[ directories == *[^\\]:* ]]
+_all_labels:37> _description directories expl directory
+_description:3> local name gropt nopt xopt format gname hidden hide match opts tag sort
+_description:5> opts=( ) 
+_description:7> gropt=( -J ) 
+_description:8> xopt=( -X ) 
+_description:9> nopt=( ) 
+_description:10> zparseopts -K -D -a nopt 1 2 'V=gropt' 'J=gropt' 'x=xopt'
+_description:12> 3=directory 
+_description:13> [[ -n directory ]]
+_description:13> _lastdescr=( '' directory directory ) 
+_description:15> zstyle -s :completion::complete:cd::directories group-name gname
+_description:18> _setup directories -default-
+_setup:3> local val nm=0
+_setup:5> [[ 2 -eq 1 ]]
+_setup:7> zstyle -a :completion::complete:cd::directories list-colors val
+_setup:8> zmodload -i zsh/complist
+_setup:9> [[ directories == default ]]
+_setup:12> _comp_colors+=( '(-default-)no=00' '(-default-)fi=00' '(-default-)di=34' '(-default-)ow=34;40' '(-default-)ln=35' '(-default-)pi=30;44' '(-default-)so=35;44' '(-default-)do=35;44' '(-default-)bd=33;44' '(-default-)cd=37;44' '(-default-)or=05;37;41' '(-default-)mi=05;37;41' '(-default-)ex=01;31' '(-default-)*.cmd=01;31' '(-default-)*.exe=01;31' '(-default-)*.com=01;31' '(-default-)*.bat=01;31' '(-default-)*.reg=01;31' '(-default-)*.app=01;31' '(-default-)*.txt=32' '(-default-)*.org=32' '(-default-)*.md=32' '(-default-)*.mkd=32' '(-default-)*.h=32' '(-default-)*.c=32' '(-default-)*.C=32' '(-default-)*.cc=32' '(-default-)*.cpp=32' '(-default-)*.cxx=32' '(-default-)*.objc=32' '(-default-)*.sh=32' '(-default-)*.csh=32' '(-default-)*.zsh=32' '(-default-)*.el=32' '(-default-)*.vim=32' '(-default-)*.java=32' '(-default-)*.pl=32' '(-default-)*.pm=32' '(-default-)*.py=32' '(-default-)*.rb=32' '(-default-)*.hs=32' '(-default-)*.php=32' '(-default-)*.htm=32' '(-default-)*.html=32' '(-default-)*.shtml=32' '(-default-)*.erb=32' '(-default-)*.haml=32' '(-default-)*.xml=32' '(-default-)*.rdf=32' '(-default-)*.css=32' '(-default-)*.sass=32' '(-default-)*.scss=32' '(-default-)*.less=32' '(-default-)*.js=32' '(-default-)*.coffee=32' '(-default-)*.man=32' '(-default-)*.0=32' '(-default-)*.1=32' '(-default-)*.2=32' '(-default-)*.3=32' '(-default-)*.4=32' '(-default-)*.5=32' '(-default-)*.6=32' '(-default-)*.7=32' '(-default-)*.8=32' '(-default-)*.9=32' '(-default-)*.l=32' '(-default-)*.n=32' '(-default-)*.p=32' '(-default-)*.pod=32' '(-default-)*.tex=32' '(-default-)*.bmp=33' '(-default-)*.cgm=33' '(-default-)*.dl=33' '(-default-)*.dvi=33' '(-default-)*.emf=33' '(-default-)*.eps=33' '(-default-)*.gif=33' '(-default-)*.jpeg=33' '(-default-)*.jpg=33' '(-default-)*.JPG=33' '(-default-)*.mng=33' '(-default-)*.pbm=33' '(-default-)*.pcx=33' '(-default-)*.pdf=33' '(-default-)*.pgm=33' '(-default-)*.png=33' '(-default-)*.ppm=33' '(-default-)*.pps=33' '(-default-)*.ppsx=33' '(-default-)*.ps=33' '(-default-)*.svg=33' '(-default-)*.svgz=33' '(-default-)*.tga=33' '(-default-)*.tif=33' '(-default-)*.tiff=33' '(-default-)*.xbm=33' '(-default-)*.xcf=33' '(-default-)*.xpm=33' '(-default-)*.xwd=33' '(-default-)*.xwd=33' '(-default-)*.yuv=33' '(-default-)*.aac=33' '(-default-)*.au=33' '(-default-)*.flac=33' '(-default-)*.mid=33' '(-default-)*.midi=33' '(-default-)*.mka=33' '(-default-)*.mp3=33' '(-default-)*.mpa=33' '(-default-)*.mpeg=33' '(-default-)*.mpg=33' '(-default-)*.ogg=33' '(-default-)*.ra=33' '(-default-)*.wav=33' '(-default-)*.anx=33' '(-default-)*.asf=33' '(-default-)*.avi=33' '(-default-)*.axv=33' '(-default-)*.flc=33' '(-default-)*.fli=33' '(-default-)*.flv=33' '(-default-)*.gl=33' '(-default-)*.m2v=33' '(-default-)*.m4v=33' '(-default-)*.mkv=33' '(-default-)*.mov=33' '(-default-)*.mp4=33' '(-default-)*.mp4v=33' '(-default-)*.mpeg=33' '(-default-)*.mpg=33' '(-default-)*.nuv=33' '(-default-)*.ogm=33' '(-default-)*.ogv=33' '(-default-)*.ogx=33' '(-default-)*.qt=33' '(-default-)*.rm=33' '(-default-)*.rmvb=33' '(-default-)*.swf=33' '(-default-)*.vob=33' '(-default-)*.wmv=33' '(-default-)*.doc=31' '(-default-)*.docx=31' '(-default-)*.rtf=31' '(-default-)*.dot=31' '(-default-)*.dotx=31' '(-default-)*.xls=31' '(-default-)*.xlsx=31' '(-default-)*.ppt=31' '(-default-)*.pptx=31' '(-default-)*.fla=31' '(-default-)*.psd=31' '(-default-)*.7z=1;35' '(-default-)*.apk=1;35' '(-default-)*.arj=1;35' '(-default-)*.bin=1;35' '(-default-)*.bz=1;35' '(-default-)*.bz2=1;35' '(-default-)*.cab=1;35' '(-default-)*.deb=1;35' '(-default-)*.dmg=1;35' '(-default-)*.gem=1;35' '(-default-)*.gz=1;35' '(-default-)*.iso=1;35' '(-default-)*.jar=1;35' '(-default-)*.msi=1;35' '(-default-)*.rar=1;35' '(-default-)*.rpm=1;35' '(-default-)*.tar=1;35' '(-default-)*.tbz=1;35' '(-default-)*.tbz2=1;35' '(-default-)*.tgz=1;35' '(-default-)*.tx=1;35' '(-default-)*.war=1;35' '(-default-)*.xpi=1;35' '(-default-)*.xz=1;35' '(-default-)*.z=1;35' '(-default-)*.Z=1;35' '(-default-)*.zip=1;35' '(-default-)*.ANSI-30-black=30' '(-default-)*.ANSI-01;30-brblack=01;30' '(-default-)*.ANSI-31-red=31' '(-default-)*.ANSI-01;31-brred=01;31' '(-default-)*.ANSI-32-green=32' '(-default-)*.ANSI-01;32-brgreen=01;32' '(-default-)*.ANSI-33-yellow=33' '(-default-)*.ANSI-01;33-bryellow=01;33' '(-default-)*.ANSI-34-blue=34' '(-default-)*.ANSI-01;34-brblue=01;34' '(-default-)*.ANSI-35-magenta=35' '(-default-)*.ANSI-01;35-brmagenta=01;35' '(-default-)*.ANSI-36-cyan=36' '(-default-)*.ANSI-01;36-brcyan=01;36' '(-default-)*.ANSI-37-white=37' '(-default-)*.ANSI-01;37-brwhite=01;37' '(-default-)*.log=01;32' '(-default-)*~=01;32' '(-default-)*#=01;32' '(-default-)*.bak=01;33' '(-default-)*.BAK=01;33' '(-default-)*.old=01;33' '(-default-)*.OLD=01;33' '(-default-)*.org_archive=01;33' '(-default-)*.off=01;33' '(-default-)*.OFF=01;33' '(-default-)*.dist=01;33' '(-default-)*.DIST=01;33' '(-default-)*.orig=01;33' '(-default-)*.ORIG=01;33' '(-default-)*.swp=01;33' '(-default-)*.swo=01;33' '(-default-)*,v=01;33' '(-default-)*.gpg=34' '(-default-)*.gpg=34' '(-default-)*.pgp=34' '(-default-)*.asc=34' '(-default-)*.3des=34' '(-default-)*.aes=34' '(-default-)*.enc=34' ) 
+_setup:27> zstyle -s :completion::complete:cd::directories show-ambiguity val
+_setup:32> zstyle -t :completion::complete:cd::directories list-packed
+_setup:34> [[ 2 -eq 1 ]]
+_setup:37> compstate[list]=ambiguous 
+_setup:40> zstyle -t :completion::complete:cd::directories list-rows-first
+_setup:42> [[ 2 -eq 1 ]]
+_setup:45> compstate[list]=ambiguous 
+_setup:48> zstyle -t :completion::complete:cd::directories last-prompt
+_setup:50> [[ 2 -eq 1 ]]
+_setup:53> compstate[last_prompt]=yes 
+_setup:56> zstyle -t :completion::complete:cd::directories accept-exact
+_setup:58> [[ 2 -eq 1 ]]
+_setup:61> compstate[exact]='' 
+_setup:64> [[ _last_nmatches -ge 0 && _last_nmatches -ne nm ]]
+_setup:67> zstyle -a :completion::complete:cd::directories menu val
+_setup:68> _last_nmatches=0 
+_setup:69> _last_menu_style=( select ) 
+_setup:74> [[ '' != always ]]
+_setup:75> zstyle -s :completion::complete:cd::directories force-list val
+_description:20> name=expl 
+_description:22> zstyle -s :completion::complete:cd::directories format format
+_description:23> zstyle -s :completion::complete:cd::descriptions format format
+_description:25> zstyle -s :completion::complete:cd::directories hidden hidden
+_description:30> zstyle -s :completion::complete:cd::directories matcher match
+_description:32> [[ -n 'l:|=* r:|=*' ]]
+_description:32> opts=( -M 'l:|=* r:|=*' ) 
+_description:36> zstyle -s :completion::complete:cd::directories sort sort
+_description:37> zstyle -s :completion::complete:cd:: sort sort
+_description:46> [[ -z '' ]]
+_description:47> zstyle -a :completion::complete:cd::directories ignored-patterns _comp_ignore
+_description:48> _comp_ignore=( ) 
+_description:50> zstyle -s :completion::complete:cd::directories ignore-line hidden
+_description:66> ((  0  ))
+_description:71> tag=directories 
+_description:73> shift 2
+_description:74> [[ -z directory ]]
+_description:76> [[ -n '' ]]
+_description:80> [[ -n '' ]]
+_description:87> [[ -n '' ]]
+_description:90> set -A expl -M 'l:|=* r:|=*' -J -default-
+_description:94> ((  0  ))
+_description:95> local fakestyle descr
+_description:96> fakestyle=fake
+_description:97> zstyle -a :completion::complete:cd::directories fake match
+_description:98> continue
+_description:96> fakestyle=fake-always
+_description:97> zstyle -a :completion::complete:cd::directories fake-always match
+_description:98> continue
+_description:111> return 0
+_all_labels:39> _path_files -M 'l:|=* r:|=*' -J -default- -W '/tmp/A(B)' -/
+_path_files:3> local -a match mbegin mend
+_path_files:17> _have_glob_qual
+_have_glob_qual:14> local complete
+_have_glob_qual:16> [[ '' == complete ]]
+_have_glob_qual:18> [[ -z '' && on == on && '' == (#b)(((*[^\\\$]|)(\\\\)#)\()([^\)\|\~]#) || on == on && '' == (#b)(((*[^\\\$]|)(\\\\)#)\(\#q)([^\)]#) ]]
+_path_files:38> local linepath realpath donepath prepath testpath exppath skips skipped
+_path_files:39> local tmp1 tmp2 tmp3 tmp4 i orig eorig pre suf tpre tsuf opre osuf cpre
+_path_files:40> local pats haspats ignore pfx pfxsfx sopt gopt opt sdirs ignpar cfopt listsfx
+_path_files:41> local nm=0 menu matcher mopts sort mid accex fake
+_path_files:42> local listfiles listopts tmpdisp origtmp1 Uopt
+_path_files:43> local accept_exact_dirs path_completion
+_path_files:44> integer npathcheck
+_path_files:45> local -a Mopts
+_path_files:47> typeset -U prepaths exppaths
+_path_files:49> exppaths=( ) 
+_path_files:53> zparseopts -a mopts 'P:=pfx' 'S:=pfxsfx' 'q=pfxsfx' 'r:=pfxsfx' 'R:=pfxsfx' 'W:=prepaths' 'F:=ignore' 'M+:=matcher' J+: V+: X+: 1 2 n 'f=tmp1' '/=tmp1' 'g+:-=tmp1'
+_path_files:58> sopt=-/ 
+_path_files:59> ((  1  ))
+_path_files:59> haspats=yes 
+_path_files:60> ((  0  ))
+_path_files:61> ((  1  ))
+_path_files:62> pats='' 
+_path_files:63> pats=( '*(-/)' ) 
+_path_files:68> pats=( '*(-/)' ) 
+_path_files:70> ((  0  ))
+_path_files:74> ((  2  ))
+_path_files:75> tmp1='/tmp/A(B)' 
+_path_files:76> [[ / == \( ]]
+_path_files:78> [[ / == / ]]
+_path_files:79> prepaths=( '/tmp/A(B)/' ) 
+_path_files:84> ((  ! 1  ))
+_path_files:89> ((  0  ))
+_path_files:100> [[ -/ == -(f|) ]]
+_path_files:109> ((  ! 1  ))
+_path_files:130> [[ -z '' && 0 -eq 0 && -z '' && -n '' ]]
+_path_files:134> ((  0  ))
+_path_files:139> [[ 2 -eq 0 ]]
+_path_files:145> ((  2  ))
+_path_files:147> mopts=( -J -default- -M 'l:|=* r:|=*' ) 
+_path_files:150> zstyle -s :completion::complete:cd:: file-sort tmp1
+_path_files:185> zstyle -t :completion::complete:cd::paths squeeze-slashes
+_path_files:188> skips='((.|..)/)##' 
+_path_files:191> zstyle -s :completion::complete:cd::paths special-dirs sdirs
+_path_files:192> zstyle -t :completion::complete:cd::paths list-suffixes
+_path_files:195> [[ '*(-/)' == ((|*[[:blank:]])\*(|[[:blank:]]*|\([^[:blank:]]##\))|*\([^[:blank:]]#/[^[:blank:]]#\)*) ]]
+_path_files:196> sopt=-// 
+_path_files:198> zstyle -a :completion::complete:cd::paths accept-exact accex
+_path_files:199> zstyle -a :completion::complete:cd:: fake-files fake
+_path_files:201> zstyle -s :completion::complete:cd:: ignore-parents ignpar
+_path_files:203> zstyle -t :completion::complete:cd::paths accept-exact-dirs
+_path_files:205> zstyle -T :completion::complete:cd::paths path-completion
+_path_files:206> path_completion=1 
+_path_files:208> [[ -n '' ]]
+_path_files:236> pre='' 
+_path_files:237> suf='' 
+_path_files:238> opre='' 
+_path_files:239> osuf='' 
+_path_files:240> orig='' 
+_path_files:241> eorig='' 
+_path_files:243> [[ automenu-unambiguous == (*menu|[0-9]*) || -n '' || -n '' ]]
+_path_files:246> [[ -n '' ]]
+_path_files:250> Mopts=( -M 'r:|/=* r:|=*' ) 
+_path_files:255> [[ '' == [^][*?#^\|\<\>\\]#(`[^`]#`|\$)*/* ]]
+_path_files:276> [[ '' == \~ ]]
+_path_files:326> linepath='' 
+_path_files:327> realpath='' 
+_path_files:329> zstyle -s :completion::complete:cd:: preserve-prefix tmp1
+_path_files:337> [[ '' == / ]]
+_path_files:350> [[ '' == (.|..)/* ]]
+_path_files:351> donepath='' 
+_path_files:358> prepath=/tmp/A(B)/
+_path_files:364> skipped='' 
+_path_files:365> cpre='' 
+_path_files:367> [[ -n '' || -z 1 ]]
+_path_files:407> tpre='' 
+_path_files:408> tsuf='' 
+_path_files:416> testpath='' 
+_path_files:418> tmp2='' 
+_path_files:419> tpre='' 
+_path_files:421> tmp1=( '/tmp/A(B)/' ) 
+_path_files:424> ((  npathcheck = 0  ))
+_path_files:425> true
+_path_files:427> origtmp1=( '/tmp/A(B)/' ) 
+_path_files:430> [[ '' == */* ]]
+_path_files:434> PREFIX='' 
+_path_files:435> SUFFIX='' 
+_path_files:447> tmp2=( '/tmp/A(B)/' ) 
+_path_files:449> [[ '' == (#b)*/(*) ]]
+_path_files:462> [[ -// == *[/f]* ]]
+_path_files:463> compfiles -p tmp1 accex '' 'l:|=* r:|=* l:|=* r:|=*' false fake '*(-/)'
+_path_files:467> tmp1=( ) 
+_path_files:469> [[ -n '' ]]
+_path_files:541> ((  ! 0  ))
+_path_files:553> [[ -z '' && -n '' ]]
+_path_files:561> [[ -n yes && -z '' && '' == */ ]]
+_path_files:567> continue 2
+_path_files:881> [[ _matcher_num -eq 3 ]]
+_path_files:882> zstyle -t :completion::complete:cd::paths expand prefix
+_path_files:890> [[ nm -ne 'compstate[nmatches]' ]]
+_all_labels:26> comptags -A directories curtag __spec
+_all_labels:43> return __ret
+_wanted:9> _tags
+_tags:3> local prev
+_tags:10> [[ '' == -- ]]
+_tags:15> ((  0  ))
+_tags:67> comptags -N
+_wanted:13> return 1
+_cd:117> return ret

The zstyle ':completion:*' special-dirs true in that case is irrelevant. It just adds the slash / at the end. If you do directly cd ../<TAB> it happens the same.

@mcornella mcornella added Bug Something isn't working Topic: completion Pull Request or issue regarding completion Resolution: not our issue Issue or pull request not related to Oh My Zsh labels Sep 20, 2016
@gnebehay
Copy link
Author

ok, thanks, will post it in the zsh mailing list.

@danielshahaf
Copy link

For future reference: fixed upstream in zsh-users/zsh@0e01942, expected to be released in zsh-5.3.

@mcornella
Copy link
Member

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Something isn't working Resolution: not our issue Issue or pull request not related to Oh My Zsh Topic: completion Pull Request or issue regarding completion
Projects
None yet
Development

No branches or pull requests

3 participants