marlonrichert / zsh-autocomplete

🤖 Real-time type-ahead completion for Zsh. Asynchronous find-as-you-type autocompletion.
MIT License
5.23k stars 144 forks source link

zsh crashing when certain alias are set and `insert-unambiguous` is on #176

Closed ChocolateOverflow closed 3 years ago

ChocolateOverflow commented 3 years ago
  1. Set zstyle ':autocomplete:tab:*' insert-unambiguous yes in .zshrc
  2. Set an alias (e.g. please=sudo) in .zshrc or during run time
  3. Have a file/directory in the current directory, whose name starts with the beginning characters of the alias from step 2 (e.g. gawr)
  4. Tab-complete with the alias from step 1 typed out
  5. Press any key -> crash

Example:

alias g=git
mkdir gawr

cd g<TAB>
# crash
alias qwe='print "Hello World"'
touch qwerty

file qwe<TAB>
# crash
alias qwerty
touch qweasd

file qw<TAB>
# crash

Note that in example 3, zsh crashes if the string before the <TAB> is the beginning sub-string of both the alias and the file name, so zsh crashes if the typed out string is q, qw, or qwe but not qwer or qwea

Having checked journalctl, I've found core dumps for zsh so I'm pretty sure zsh crashed. I'm not sure if this bug is in zsh or zsh-autocomplete but these crashes only happen when zsh-autocomplete is on.

marlonrichert commented 3 years ago

@ChocolateOverflow Sorry, but I cannot reproduce this. Here's what I did:

> cd $(mktemp -d)
> ZDOTDIR=$PWD HOME=$PWD zsh -f
% zstyle ':autocomplete:tab:*' insert-unambiguous yes
% source /Users/marlon/git/zsh-autocomplete/zsh-autocomplete.plugin.zsh
% alias g=git; mkdir gawr
% alias qwe='print "Hello World"'; touch qwerty
% alias qwerty; touch qweasd

I then tried all the tab completions you listed and they all work fine for me. No crashes whatsoever.

Can you please try the steps above? If they work without crashes for you, too, then you must have something else in your Zsh config that's interfering.

ChocolateOverflow commented 3 years ago

I've found that it crashes when zstyle ':autocomplete:tab:*' widget-style menu-select is set, not zstyle ':autocomplete:tab:*' insert-unambiguous yes. Not sure if I copied the wrong line or something previously.

marlonrichert commented 3 years ago

@ChocolateOverflow OK, now I tried this:

> cd $(mktemp -d)
> ZDOTDIR=$PWD HOME=$PWD zsh -f
% zstyle ':autocomplete:tab:*' widget-style menu-select
% source /Users/marlon/git/zsh-autocomplete/zsh-autocomplete.plugin.zsh
% alias g=git; mkdir gawr
% alias qwe='print "Hello World"'; touch qwerty
% alias qwerty; touch qweasd

Still works fine.

Can you try the above, please, and let me know the result?

ChocolateOverflow commented 3 years ago

I did get crashes following your steps. Since it's zsh that's crashing, it might be a problem with zsh version 5.8. Also, I'm on Manjaro Linux, whose version might be the culprit.

$ zsh --version
zsh 5.8 (x86_64-pc-linux-gnu)

It seems you're on Windows. Please check and compare your version of zsh.

marlonrichert commented 3 years ago

No, I'm on macOS. But I do use Zsh 5.8.

Can you try the same steps again, but with setopt verbose xtrace just before you initiate the crash? What are the last lines that get printed before it crashes?

ChocolateOverflow commented 3 years ago
$ cd g+.autocomplete.complete-word.completion-widget:30> .autocomplete.complete-word.completion-widget
+.autocomplete.complete-word.completion-widget:1> local +h -a comppostfuncs=( .autocomplete.complete-word.comppostfunc )
+.autocomplete.complete-word.completion-widget:2> _main_complete
+_main_complete:1> local -i ret=1 _autocomplete__reserved_lines=0
+_main_complete:3> compstate[exact]=''
+_main_complete:4> compstate[insert]=''
+_main_complete:5> compstate[list]=''
+_main_complete:7> local +h -a comppostfuncs=( _autocomplete.extras .autocomplete.complete-word.comppostfunc )
+_main_complete:12> '(anon)'
+(anon):1> emulate -L zsh
+(anon):1> setopt localoptions extendedglob rcquotes NO_aliases NO_banghist NO_caseglob NO_clobber NO_listbeep
+(anon):3> [[ -v 'functions[compadd]' ]]
+(anon):4> functions[compadd]=$'\tsetopt localoptions listtypes\n\tif [[ $_completer == expand* ]]\n\tthen\n\t\tbuiltin compadd -f -W "${${${words[CURRENT]:#[~/]*}:+$PWD/}:-/}" "$@"\n\telse\n\t\tbuiltin compadd "$@"\n\tfi'
+_main_complete:18> .autocomplete._main_complete
+.autocomplete._main_complete:1> local IFS=$' \t\n\C-@'
+.autocomplete._main_complete:2> eval $'local -A _comp_caller_options;\n             _comp_caller_options=(${(kv)options[@]});\n             setopt localoptions localtraps localpatterns ${_comp_options[@]};\n             local IFS=$\' \\t\\r\\n\\0\';\n             builtin enable -p \\| \\~ \\( \\? \\* \\[ \\< \\^ \\# 2>&-;\n             exec </dev/null;\n             trap - ZERR;\n             local -a reply;\n             local REPLY;\n             local REPORTTIME;\n             unset REPORTTIME'
+(eval):1> local -A _comp_caller_options
+(eval):2> _comp_caller_options=( posixargzero off autolist on printexitvalue off kshzerosubscript off histreduceblanks off chaselinks off extendedglob on localloops off histnostore off automenu on globcomplete off unset on listpacked off promptsubst off shwordsplit off pathdirs off kshtypeset off listtypes on warncreateglobal off promptbang off dotglob off braceexpand on listbeep on correctall off privileged off numericglobsort on histverify off trackall on histsubstpattern off globstarshort off cbases off rcquotes off posixaliases off histfindnodups off bashautolist off sharehistory off overstrike off kshautoload off incappendhistory off appendcreate off promptcr on mailwarn off pushdignoredups off interactive on ignoreeof off globsubst off rematchpcre off monitor on histsavebycopy on histbeep on debugbeforecmd on magicequalsubst off rmstarsilent off posixjobs off hashcmds on posixtraps off extendedhistory off notify on kshoptionprint off histexpiredupsfirst off glob on posixcd off braceccl off badpattern on longlistjobs off banghist on dvorak off alwaystoend off hashall on warnnestedvar off globalexport on ksharrays off correct off cdsilent off autonamedirs off histexpand on typesetsilent off rmstarwait off histnofunctions off autoparamslash off trapsasync off sunkeyboardhack off promptsp on histsavenodups off autocd off allexport off posixidentifiers off cshjunkiehistory off autopushd off completeinword off completealiases off aliases on autocontinue off appendhistory on aliasfuncdef off singlelinezle off hashlistall on ignoreclosebraces off recexact off localoptions off interactivecomments off errexit off cshjunkiequotes off markdirs off hashdirs on cdablevars off rcexpandparam on vi off printeightbit off multifuncdef on xtrace on login off cshjunkieloops off histappend on histignorespace off evallineno on shfileexpansion off rcs on functionargzero on errreturn off combiningchars off histignoredups off histfcntllock off beep off autoremoveslash on hup on globdots off checkrunningjobs on autoparamkeys on shnullcmd off multibyte on zle on promptpercent on flowcontrol on continueonerror off incappendhistorytime off autoresume off globassign off caseglob off shortloops on bsdecho off cprecedences off log on transientrprompt off verbose on localpatterns off ignorebraces off pipefail off equals on menucomplete off cshnullglob off casematch on promptvars off histallowclobber off bareglobqual on shinstdin on restricted off pushdminus off nullglob off chasedots off mailwarning off listambiguous on cshnullcmd off bashrematch off octalzeroes off forcefloat off exec on multios on emacs off nomatch on pathscript off localtraps off stdin on onecmd off kshglob off clobber on posixbuiltins off alwayslastprompt on pushdtohome off histignorealldups on hashexecutablesonly off pushdsilent off shoptionletters off physical off sourcetrace off histlexwords off bgnice on globalrcs on posixstrings off checkjobs off shglob off singlecommand off listrowsfirst off )
+(eval):3> setopt localoptions localtraps localpatterns bareglobqual extendedglob glob multibyte multifuncdef nullglob rcexpandparam unset NO_allexport NO_aliases NO_cshnullglob NO_cshjunkiequotes NO_errexit NO_errreturn NO_globassign NO_globsubst NO_histsubstpattern NO_ignorebraces NO_ignoreclosebraces NO_kshglob NO_ksharrays NO_kshtypeset NO_markdirs NO_octalzeroes NO_posixbuiltins NO_posixidentifiers NO_shwordsplit NO_shglob NO_warnnestedvar NO_warncreateglobal banghist functionargzero globdots globstarshort nullglob numericglobsort NO_alwaystoend NO_caseglob NO_completealiases NO_globcomplete NO_listbeep NO_listtypes NO_markdirs
+(eval):4> local IFS=$' \t\C-M\n\C-@'
+(eval):5> enable -p '|' '~' '(' '?' '*' '[' '<' '^' '#'
+(eval):7> trap - ZERR
+(eval):8> local -a reply
+(eval):9> local REPLY
+(eval):10> local REPORTTIME
+(eval):11> unset REPORTTIME
+.autocomplete._main_complete:3> local func funcs ret=1 tmp _compskip format nm call match min max i num _completers _completer _completer_num curtag _comp_force_list _matchers _matcher _c_matcher _matcher_num _comp_tags _comp_mesg mesg str context state state_descr line opt_args val_args curcontext='' _last_nmatches=-1 _last_menu_style _def_menu_style _menu_style sel _tags_level=0 _saved_exact='' _saved_lastprompt=yes _saved_list='' _saved_insert='' _saved_colors='' _saved_colors_set=0 _ambiguous_color=''
+.autocomplete._main_complete:4> local _comp_priv_prefix
+.autocomplete._main_complete:5> unset _comp_priv_prefix
+.autocomplete._main_complete:6> local -a precommands
+.autocomplete._main_complete:7> local -ar builtin_precommands=( - builtin eval exec nocorrect noglob time )
+.autocomplete._main_complete:8> typeset -U _lastdescr _comp_ignore _comp_colors
+.autocomplete._main_complete:10> [[ -z '' ]]
+.autocomplete._main_complete:10> curcontext=:::
+.autocomplete._main_complete:11> zstyle -s :completion::::: insert-tab tmp
+.autocomplete._main_complete:11> tmp=yes
+.autocomplete._main_complete:12> [[ yes = *pending(|[[:blank:]]*) || yes = *pending=(#b)([0-9]##)(|[[:blank:]]*) ]]
+.autocomplete._main_complete:17> [[ '' = tab* ]]
+.autocomplete._main_complete:28> [[ '' = \* ]]
+.autocomplete._main_complete:34> [[ -z '' ]]
+.autocomplete._main_complete:36> [[ -o equals ]]
+.autocomplete._main_complete:36> compset -P 1 '='
+.autocomplete._main_complete:39> [[ g != */* && g = \~ ]]
+.autocomplete._main_complete:45> _setup default
+_setup:3> local val nm=0
+_setup:5> [[ 1 -eq 1 ]]
+_setup:5> 2=default
+_setup:7> zstyle -a :completion:::::default list-colors val
+_setup:21> [[ default = default ]]
+_setup:22> unset ZLS_COLORS ZLS_COLOURS
+_setup:27> zstyle -s :completion:::::default show-ambiguity val
+_setup:32> zstyle -t :completion:::::default list-packed
+_setup:34> [[ 2 -eq 1 ]]
+_setup:37> compstate[list]=''
+_setup:40> zstyle -t :completion:::::default list-rows-first
+_setup:42> [[ 2 -eq 1 ]]
+_setup:45> compstate[list]=''
+_setup:48> zstyle -t :completion:::::default last-prompt
+_setup:50> [[ 2 -eq 1 ]]
+_setup:53> compstate[last_prompt]=yes
+_setup:56> zstyle -t :completion:::::default accept-exact
+_setup:58> [[ 2 -eq 1 ]]
+_setup:61> compstate[exact]=''
+_setup:64> [[ _last_nmatches -ge 0 ]]
+_setup:67> zstyle -a :completion:::::default menu val
+_setup:68> _last_nmatches=0
+_setup:69> _last_menu_style=( yes select )
+_setup:74> [[ '' != always ]]
+_setup:75> zstyle -s :completion:::::default force-list val
+.autocomplete._main_complete:46> _def_menu_style=( yes select )
+.autocomplete._main_complete:47> _last_menu_style=( )
+.autocomplete._main_complete:48> zstyle -s :completion:::::default list-prompt tmp
+.autocomplete._main_complete:53> zstyle -s :completion:::::default select-prompt tmp
+.autocomplete._main_complete:55> MENUPROMPT=''
+.autocomplete._main_complete:56> zmodload -i zsh/complist
+.autocomplete._main_complete:58> zstyle -s :completion:::::default select-scroll tmp
+.autocomplete._main_complete:60> MENUSCROLL=0
+.autocomplete._main_complete:61> zmodload -i zsh/complist
+.autocomplete._main_complete:63> ((  0  ))
+.autocomplete._main_complete:78> zstyle -a :completion::::: completer _completers
+.autocomplete._main_complete:80> _completer_num=1
+.autocomplete._main_complete:81> integer SECONDS=0
+.autocomplete._main_complete:92> funcs=( )
+.autocomplete._main_complete:93> compprefuncs=( )
+.autocomplete._main_complete:98> tmp=_autocomplete.oldlist
+.autocomplete._main_complete:100> [[ -n '' ]]
+.autocomplete._main_complete:103> [[ _autocomplete.oldlist = *:-* ]]
+.autocomplete._main_complete:107> [[ _autocomplete.oldlist = *:* ]]
+.autocomplete._main_complete:112> _completer=autocomplete.oldlist
+.autocomplete._main_complete:114> curcontext=:autocomplete.oldlist::
+.autocomplete._main_complete:115> zstyle -t :completion::autocomplete.oldlist::: show-completer
+.autocomplete._main_complete:116> zstyle -a :completion::autocomplete.oldlist::: matcher-list _matchers
+.autocomplete._main_complete:116> _matchers=( '' )
+.autocomplete._main_complete:117> _matcher_num=1
+.autocomplete._main_complete:118> _matcher=''
+.autocomplete._main_complete:119> _c_matcher=
+.autocomplete._main_complete:121> [[ '' == +* ]]
+.autocomplete._main_complete:125> _matcher=''
+.autocomplete._main_complete:127> _comp_mesg=''
+.autocomplete._main_complete:128> [[ -n '' ]]
+.autocomplete._main_complete:135> _autocomplete.oldlist
+_autocomplete.oldlist:4> [[ $'\t' == [Z ]]
+_autocomplete.oldlist:5> [[ $'\t' == $'\t' ]]
+_autocomplete.oldlist:5> zstyle -t :autocomplete:tab: insert-unambiguous
+_autocomplete.oldlist:7> ((  _lastcomp[nmatches] > 1 && 3 > 1  ))
+_autocomplete.oldlist:9> [[ -z shown || 'cd g' != cd\ g || 2 -ne 2 || menu-select == _complete_help ]]
+_autocomplete.oldlist:19> compstate[old_list]=keep
+_autocomplete.oldlist:20> return 0
+.autocomplete._main_complete:137> ret=0
+.autocomplete._main_complete:138> break 2
+.autocomplete._main_complete:145> curcontext=:::
+.autocomplete._main_complete:146> [[ keep = keep ]]
+.autocomplete._main_complete:148> nm=1
+.autocomplete._main_complete:152> [[ keep = keep ]]
+.autocomplete._main_complete:154> [[ _last_nmatches -ge 0 && _last_nmatches -ne nm ]]
+.autocomplete._main_complete:154> _menu_style=( '' )
+.autocomplete._main_complete:155> tmp=2
+.autocomplete._main_complete:156> _menu_style=( '' yes select )
+.autocomplete._main_complete:157> [[ '' = *list ]]
+.autocomplete._main_complete:160> [[ '' =  ]]
+.autocomplete._main_complete:162> [[ -n '' ]]
+.autocomplete._main_complete:166> sel=( yes )
+.autocomplete._main_complete:167> ((  1  ))
+.autocomplete._main_complete:169> min=9999999
+.autocomplete._main_complete:170> i=yes
+.autocomplete._main_complete:172> [[ yes = *=[0-9]* ]]
+.autocomplete._main_complete:176> [[ yes != *=* ]]
+.autocomplete._main_complete:178> num=0
+.autocomplete._main_complete:182> [[ num -lt min ]]
+.autocomplete._main_complete:182> min=0
+.autocomplete._main_complete:183> ((  min  ))
+.autocomplete._main_complete:183> break
+.autocomplete._main_complete:186> sel=( )
+.autocomplete._main_complete:187> ((  0  ))
+.autocomplete._main_complete:206> [[ -n 0 && nm -ge min && -z '' ]]
+.autocomplete._main_complete:208> compstate[insert]=menu
+.autocomplete._main_complete:218> [[ menu = *menu* ]]
+.autocomplete._main_complete:220> [[ '' = 00 ]]
+.autocomplete._main_complete:221> [[ -n '' ]]
+.autocomplete._main_complete:224> [[ -n '' ]]
+.autocomplete._main_complete:232> [[ '' != 00 ]]
+.autocomplete._main_complete:234> sel=( select )
+.autocomplete._main_complete:235> ((  1  ))
+.autocomplete._main_complete:237> min=9999999
+.autocomplete._main_complete:238> i=select
+.autocomplete._main_complete:240> [[ select = *=[0-9]* ]]
+.autocomplete._main_complete:244> [[ select != *=* ]]
+.autocomplete._main_complete:246> num=0
+.autocomplete._main_complete:250> [[ num -lt min ]]
+.autocomplete._main_complete:250> min=0
+.autocomplete._main_complete:251> ((  min  ))
+.autocomplete._main_complete:251> break
+.autocomplete._main_complete:253> zmodload -i zsh/complist
+.autocomplete._main_complete:254> MENUSELECT=0
+.autocomplete._main_complete:259> [[ -n 0 ]]
+.autocomplete._main_complete:261> [[ -n '' ]]
+.autocomplete._main_complete:264> [[ -n '' ]]
+.autocomplete._main_complete:273> unset MENUMODE
+.autocomplete._main_complete:295> [[ -n '' ]]
+.autocomplete._main_complete:301> [[ '' = always || '' = ?* ]]
+.autocomplete._main_complete:303> [[ keep = keep ]]
+.autocomplete._main_complete:305> [[ 0 = 1 ]]
+.autocomplete._main_complete:309> unset ZLS_COLORS
+.autocomplete._main_complete:318> funcs=( _autocomplete.extras .autocomplete.complete-word.comppostfunc )
+.autocomplete._main_complete:319> comppostfuncs=( )
+.autocomplete._main_complete:320> func=_autocomplete.extras
+.autocomplete._main_complete:322> _autocomplete.extras
+_autocomplete.extras:3> [[ ::: == history-*:* ]]
+_autocomplete.extras:5> [[ -z 'cd g' ]]
+_autocomplete.extras:8> zstyle -t :autocomplete:tab: insert-unambiguous
+_autocomplete.extras:8> [[ $'\t' != ($'\t'|[Z) ]]
+_autocomplete.extras:20> _autocomplete.alias_expansions
+_autocomplete.alias_expansions:1> local tag=alias-expansions
+_autocomplete.alias_expansions:2> _tags alias-expansions
+_tags:3> local prev
+_tags:10> [[ alias-expansions = -- ]]
+_tags:15> ((  1  ))
+_tags:19> local curcontext=::: order tag nodef tmp
+_tags:21> [[ alias-expansions = -C?* ]]
+_tags:24> [[ alias-expansions = -C ]]
+_tags:29> [[ alias-expansions = -(|-) ]]
+_tags:31> zstyle -a :completion::::: group-order order
+_tags:32> compgroups options arguments values local-directories executables files directories ancestor-directories named-directories recent-directories path-directories recent-files
+_tags:36> comptags -i ::: alias-expansions
+_tags:40> [[ -n '' ]]
+_tags:43> zstyle -a :completion::::: tag-order order
+_tags:44> ((  ! 0  ))
+_tags:55> [[ -z '' ]]
+_tags:55> comptry alias-expansions
+_tags:60> comptags -T
+_tags:62> return
+_autocomplete.alias_expansions:3> _tags
+_tags:3> local prev
+_tags:10> [[ '' = -- ]]
+_tags:15> ((  0  ))
+_tags:67> comptags -N
+_autocomplete.alias_expansions:3> _requested alias-expansions
+_requested:3> local __gopt
+_requested:5> __gopt=( )
+_requested:6> zparseopts -D -a __gopt 1 2 V J x
+_requested:8> comptags -R alias-expansions
+_requested:9> [[ 1 -gt 3 ]]
+_requested:11> [[ 1 -gt 1 ]]
+_requested:14> return 0
+_autocomplete.alias_expansions:6> local expansion=git
+_autocomplete.alias_expansions:7> [[ -z git ]]
+_autocomplete.alias_expansions:9> local expl
+_autocomplete.alias_expansions:10> _description alias-expansions expl 'alias expansion'
+_description:1> .autocomplete._description alias-expansions expl 'alias expansion'
+.autocomplete._description:1> local name nopt xopt format gname hidden hide match opts tag
+.autocomplete._description:2> local -a ign gropt sort
+.autocomplete._description:3> opts=( )
+.autocomplete._description:4> xopt=( -X )
+.autocomplete._description:5> nopt=( )
+.autocomplete._description:6> zparseopts -K -D -a nopt 1 2 'V=gropt' 'J=ign' 'x=xopt'
+.autocomplete._description:7> 3='alias expansion'
+.autocomplete._description:8> [[ -n 'alias expansion' ]]
+.autocomplete._description:8> _lastdescr=( '' 'alias expansion' )
+.autocomplete._description:9> zstyle -s :completion:::::alias-expansions group-name gname
+.autocomplete._description:9> [[ -z '' ]]
+.autocomplete._description:9> gname=alias-expansions
+.autocomplete._description:10> _setup alias-expansions alias-expansions
+_setup:3> local val nm=0
+_setup:5> [[ 2 -eq 1 ]]
+_setup:7> zstyle -a :completion:::::alias-expansions list-colors val
+_setup:21> [[ alias-expansions = default ]]
+_setup:27> zstyle -s :completion:::::alias-expansions show-ambiguity val
+_setup:32> zstyle -t :completion:::::alias-expansions list-packed
+_setup:34> [[ 2 -eq 1 ]]
+_setup:37> compstate[list]=''
+_setup:40> zstyle -t :completion:::::alias-expansions list-rows-first
+_setup:42> [[ 2 -eq 1 ]]
+_setup:45> compstate[list]=''
+_setup:48> zstyle -t :completion:::::alias-expansions last-prompt
+_setup:50> [[ 2 -eq 1 ]]
+_setup:53> compstate[last_prompt]=yes
+_setup:56> zstyle -t :completion:::::alias-expansions 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:::::alias-expansions menu val
+_setup:71> _last_nmatches=-1
+_setup:74> [[ '' != always ]]
+_setup:75> zstyle -s :completion:::::alias-expansions force-list val
+.autocomplete._description:11> name=expl
+.autocomplete._description:12> zstyle -s :completion:::::alias-expansions format format
+.autocomplete._description:13> zstyle -s :completion:::::alias-expansions hidden hidden
+.autocomplete._description:18> zstyle -s :completion:::::alias-expansions matcher match
+.autocomplete._description:19> [[ -n '' ]]
+.autocomplete._description:20> [[ -z '' ]]
+.autocomplete._description:22> zstyle -a :completion:::::alias-expansions sort sort
+.autocomplete._description:24> [[ -z yes ]]
+.autocomplete._description:27> [[ yes != (yes|true|1|on|menu) ]]
+.autocomplete._description:35> [[ -z '' ]]
+.autocomplete._description:37> zstyle -a :completion:::::alias-expansions ignored-patterns _comp_ignore
+.autocomplete._description:37> _comp_ignore=( )
+.autocomplete._description:38> zstyle -s :completion:::::alias-expansions ignore-line hidden
+.autocomplete._description:40> local -a qwords
+.autocomplete._description:41> qwords=( cd g )
+.autocomplete._description:42> case current (true|yes|on|1)
+.autocomplete._description:42> case current (current)
+.autocomplete._description:44> _comp_ignore+=( g )
+.autocomplete._description:49> ((  1  ))
+.autocomplete._description:49> opts=( -F _comp_ignore )
+.autocomplete._description:53> tag=alias-expansions
+.autocomplete._description:54> shift 2
+.autocomplete._description:55> [[ -z 'alias expansion' ]]
+.autocomplete._description:58> [[ -n $'%{\C-[[01;02;39m%}%d%{\C-[[22;02;39m%}  (press %{\C-[[22;39m%}Shift%{\C-[[22;02;39m%}+%{\C-[[22;39m%}Tab%{\C-[[22;02;39m%} to insert)%{\C-[[0m%}' ]]
+.autocomplete._description:60> zformat -f format $'%{\C-[[01;02;39m%}%d%{\C-[[22;02;39m%}  (press %{\C-[[22;39m%}Shift%{\C-[[22;02;39m%}+%{\C-[[22;39m%}Tab%{\C-[[22;02;39m%} to insert)%{\C-[[0m%}' 'd:alias expansion'
+.autocomplete._description:62> [[ -n alias-expansions ]]
+.autocomplete._description:64> [[ -n $'%{\C-[[01;02;39m%}alias expansion%{\C-[[22;02;39m%}  (press %{\C-[[22;39m%}Shift%{\C-[[22;02;39m%}+%{\C-[[22;39m%}Tab%{\C-[[22;02;39m%} to insert)%{\C-[[0m%}' ]]
+.autocomplete._description:66> set -A expl -F _comp_ignore -J alias-expansions -X $'%{\C-[[01;02;39m%}alias expansion%{\C-[[22;02;39m%}  (press %{\C-[[22;39m%}Shift%{\C-[[22;02;39m%}+%{\C-[[22;39m%}Tab%{\C-[[22;02;39m%} to insert)%{\C-[[0m%}'
+.autocomplete._description:78> ((  1  ))
+.autocomplete._description:94> return 0
+_description:1> local -i ret=0
+_description:2> _lastdescr=( 'alias expansion' )
+_description:3> [[ . == . ]]
+_description:5> return ret
+_autocomplete.alias_expansions:11> compadd -F _comp_ignore -J alias-expansions -X $'%{\C-[[01;02;39m%}alias expansion%{\C-[[22;02;39m%}  (press %{\C-[[22;39m%}Shift%{\C-[[22;02;39m%}+%{\C-[[22;39m%}Tab%{\C-[[22;02;39m%} to insert)%{\C-[[0m%}' -qS ' ' -QU - git
+compadd:1> setopt localoptions listtypes
+compadd:2> [[ autocomplete.oldlist == expand* ]]
+compadd:6> compadd -F _comp_ignore -J alias-expansions -X $'%{\C-[[01;02;39m%}alias expansion%{\C-[[22;02;39m%}  (press %{\C-[[22;39m%}Shift%{\C-[[22;02;39m%}+%{\C-[[22;39m%}Tab%{\C-[[22;02;39m%} to insert)%{\C-[[0m%}' -qS ' ' -QU - git
+_autocomplete.extras:24> ((  compstate[nmatches] > 0  ))
+.autocomplete._main_complete:320> func=.autocomplete.complete-word.comppostfunc
+.autocomplete._main_complete:322> .autocomplete.complete-word.comppostfunc
+.autocomplete.complete-word.comppostfunc:1> local keyname=tab
+.autocomplete.complete-word.comppostfunc:4> [[ $'\t' == [Z ]]
+.autocomplete.complete-word.comppostfunc:5> [[ $'\t' == $'\t' ]]
+.autocomplete.complete-word.comppostfunc:5> zstyle -t :autocomplete:tab: insert-unambiguous
+.autocomplete.complete-word.comppostfunc:7> ((  compstate[nmatches] > 1 && 3 > 1  ))
+.autocomplete.complete-word.comppostfunc:12> local -i nmatches=1
+.autocomplete.complete-word.comppostfunc:12> [[ keep == keep ]]
+.autocomplete.complete-word.comppostfunc:15> compstate[insert]=1
+.autocomplete.complete-word.comppostfunc:15> ((  nmatches > 1  ))
+.autocomplete.complete-word.comppostfunc:18> ((  nmatches > 0  ))
+.autocomplete._main_complete:324> _lastcomp=( list_lines 2 all_quotes '\' nmatches 1 restore auto context command vared '' unambiguous git list_max 100 unambiguous_cursor 4 list '' insert_positions 6 unambiguous_positions 3 exact '' to_end match last_prompt yes pattern_insert menu old_list keep ignored 0 insert 1 )
+.autocomplete._main_complete:325> _lastcomp[nmatches]=1
+.autocomplete._main_complete:326> _lastcomp[completer]=autocomplete.oldlist
+.autocomplete._main_complete:327> _lastcomp[prefix]=g
+.autocomplete._main_complete:328> _lastcomp[suffix]=''
+.autocomplete._main_complete:329> _lastcomp[iprefix]=''
+.autocomplete._main_complete:330> _lastcomp[isuffix]=''
+.autocomplete._main_complete:331> _lastcomp[qiprefix]=''
+.autocomplete._main_complete:332> _lastcomp[qisuffix]=''
+.autocomplete._main_complete:333> _lastcomp[tags]=''
+.autocomplete._main_complete:334> return ret
+_main_complete:18> ret=0
+_main_complete:20> '(anon)'
+(anon):1> emulate -L zsh
+(anon):1> setopt localoptions extendedglob rcquotes NO_aliases NO_banghist NO_caseglob NO_clobber NO_listbeep
+(anon):3> [[ '(anon) _main_complete .autocomplete.complete-word.completion-widget .autocomplete.complete-word.completion-widget' == *_complete_help* ]]
+(anon):4> unfunction compadd
+_main_complete:27> typeset -gHi _autocomplete__current=2
+_main_complete:28> typeset -gH _autocomplete__words='cd g'
+_main_complete:31> compstate[list]='list packed rows'
+_main_complete:32> _lastcomp[list]='list packed rows'
+_main_complete:34> compstate[list_max]=0
+_main_complete:35> _lastcomp[list_max]=0
+_main_complete:37> return ret
+.autocomplete.complete-word.completion-widget:3> unset curcontext
gicd git/zsh: segmentation fault (core dumped)  zsh
marlonrichert commented 3 years ago

From your output, it appears that Zsh crashes after the Tab widget returns control to the Zsh Line Editor. Sorry, but I cannot help you with that. You should probably contact the Zsh mailing list about this: http://zsh.sourceforge.net/Arc/mlist.html

They will be better able to help you figure out what's going wrong. If it turns out that there is something I can do about it, please report back here and I will reopen this issue.