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

Can not use autocomplete with `setopt HIST_FIND_NO_DUPS` #567

Closed thorn-jmh closed 1 year ago

thorn-jmh commented 1 year ago

Failure to do so can result in your issue being closed.

Environment

typeset -p1 VENDOR OSTYPE SHELL ZSH_ARGZERO ZSH_PATCHLEVEL _autocomplete__funcfiletrace
git -C ~zsh-autocomplete log --oneline -n1

pc linux-gnu /bin/zsh zsh zsh-5.9-0-g73d3173
.zshrc:92
zsh:3
2c7a323 (grafted, HEAD -> main, origin/main, origin/HEAD) Remove debug code

Steps to reproduce

cd $(mktemp -d)
git clone --depth 1 -- https://github.com/marlonrichert/zsh-autocomplete.git
> .zshrc <<EOF
PS1='%# ' PS2= RPS2='%^'; setopt transientrprompt interactivecomments
source ~/zsh-autocomplete/zsh-autocomplete.plugin.zsh
EOF
env -i HOME=$PWD PATH=$PATH TERM=$TERM ${TERMINFO:+TERMINFO=$TERMINFO} zsh -d

echo  "setopt HIST_FIND_NO_DUPS" >> .zshrc
source .zshrc

# press pgup
%;;;;;;;;;

When I set HIST_FIND_NO_DUPS, it will just output some ";" when I want to open history menu (press pgup)

I have tried functions -t _autocomplete.history_lines:

functions -t _autocomplete.history_lines ```shell +_autocomplete.history_lines:3> [[ 1 -eq 1 ]] +_autocomplete.history_lines:6> local -P lbuffer='' rbuffer='' +_autocomplete.history_lines:7> [[ 1 -gt 1 ]] +_autocomplete.history_lines:9> [[ 1 -lt 1 ]] +_autocomplete.history_lines:11> lbuffer='' +_autocomplete.history_lines:12> rbuffer='' +_autocomplete.history_lines:14> local -P query='' pre='' post='' +_autocomplete.history_lines:15> [[ -z '' ]] +_autocomplete.history_lines:16> query='*' +_autocomplete.history_lines:35> query='(|)*' +_autocomplete.history_lines:37> [[ history-search-backward:history-lines:: == *history-search-backward* ]] +_autocomplete.history_lines:38> zle -R Loading... +_autocomplete.history_lines:40> fc -lrm '(|)*' -1 1 +_autocomplete.history_lines:40> local -P out=$' 1 clear\n 2 echo "setopt HIST_FIND_NO_DUPS" >> .zshrc\n 3 cat .zshrc\n 4 source .zshrc\n 5 clear\n 6 functions -t _autocomplete.history_lines\n 7 cls\n 8 clear\n 9 clear\n 10 clear\n 11 clear\n 12 clear\n 13 1 > ./log\n 14 1>>./log' +_autocomplete.history_lines:43> [[ -n $' 1 clear\n 2 echo "setopt HIST_FIND_NO_DUPS" >> .zshrc\n 3 cat .zshrc\n 4 source .zshrc\n 5 clear\n 6 functions -t _autocomplete.history_lines\n 7 cls\n 8 clear\n 9 clear\n 10 clear\n 11 clear\n 12 clear\n 13 1 > ./log\n 14 1>>./log' ]] +_autocomplete.history_lines:46> local -aU displays=( ' 1 clear' ' 2 echo "setopt HIST_FIND_NO_DUPS" >> .zshrc' ' 3 cat .zshrc' ' 4 source .zshrc' ' 5 clear' ' 6 functions -t _autocomplete.history_lines' ' 7 cls' ' 8 clear' ' 9 clear' ' 10 clear' ' 11 clear' ' 12 clear' ' 13 1 > ./log' ' 14 1>>./log' ) +_autocomplete.history_lines:48> local -P numpat='[[:blank:]]#(<->)[*[:blank:]][[:blank:]]' +_autocomplete.history_lines:49> local -P groups='' +_autocomplete.history_lines:50> _comp_colors=( '=(#b)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]((|)*)=2=2=0=0=30;103' '=(#b)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]((|)*)*=2=2=0=30;103' '=(#b)[[:blank:]]#(<->)[*[:blank:]][[:blank:]](*)=2=2=0' '=(#b)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]*=0=2' ) +_autocomplete.history_lines:58> local -Pi list_lines=0 +_autocomplete.history_lines:59> zstyle -s :autocomplete:history-search-backward:history-lines::: list-lines list_lines +_autocomplete.history_lines:60> list_lines=16 +_autocomplete.history_lines:62> [[ history-search-backward:history-lines:: == *history-search-* ]] +_autocomplete.history_lines:63> list_lines=256 +_autocomplete.history_lines:68> [[ -o histfindnodups ]] +_autocomplete.history_lines:69> local -Pa uniques=( ) +_autocomplete.history_lines:70> (( 14 && 0 < list_lines )) +_autocomplete.history_lines:71> (( uniques[(I)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]] )) +_autocomplete.history_lines:72> uniques+=( '' ) +_autocomplete.history_lines:73> shift displays +_autocomplete.history_lines:70> (( 13 && 1 < list_lines )) +_autocomplete.history_lines:71> (( uniques[(I)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]] )) +_autocomplete.history_lines:72> uniques+=( '' ) +_autocomplete.history_lines:73> shift displays +_autocomplete.history_lines:70> (( 12 && 2 < list_lines )) +_autocomplete.history_lines:71> (( uniques[(I)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]] )) +_autocomplete.history_lines:72> uniques+=( '' ) +_autocomplete.history_lines:73> shift displays +_autocomplete.history_lines:70> (( 11 && 3 < list_lines )) +_autocomplete.history_lines:71> (( uniques[(I)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]] )) +_autocomplete.history_lines:72> uniques+=( '' ) +_autocomplete.history_lines:73> shift displays +_autocomplete.history_lines:70> (( 10 && 4 < list_lines )) +_autocomplete.history_lines:71> (( uniques[(I)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]] )) +_autocomplete.history_lines:72> uniques+=( '' ) +_autocomplete.history_lines:73> shift displays +_autocomplete.history_lines:70> (( 9 && 5 < list_lines )) +_autocomplete.history_lines:71> (( uniques[(I)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]] )) +_autocomplete.history_lines:72> uniques+=( '' ) +_autocomplete.history_lines:73> shift displays +_autocomplete.history_lines:70> (( 8 && 6 < list_lines )) +_autocomplete.history_lines:71> (( uniques[(I)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]] )) +_autocomplete.history_lines:72> uniques+=( '' ) +_autocomplete.history_lines:73> shift displays +_autocomplete.history_lines:70> (( 7 && 7 < list_lines )) +_autocomplete.history_lines:71> (( uniques[(I)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]] )) +_autocomplete.history_lines:72> uniques+=( '' ) +_autocomplete.history_lines:73> shift displays +_autocomplete.history_lines:70> (( 6 && 8 < list_lines )) +_autocomplete.history_lines:71> (( uniques[(I)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]] )) +_autocomplete.history_lines:72> uniques+=( '' ) +_autocomplete.history_lines:73> shift displays +_autocomplete.history_lines:70> (( 5 && 9 < list_lines )) +_autocomplete.history_lines:71> (( uniques[(I)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]] )) +_autocomplete.history_lines:72> uniques+=( '' ) +_autocomplete.history_lines:73> shift displays +_autocomplete.history_lines:70> (( 4 && 10 < list_lines )) +_autocomplete.history_lines:71> (( uniques[(I)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]] )) +_autocomplete.history_lines:72> uniques+=( '' ) +_autocomplete.history_lines:73> shift displays +_autocomplete.history_lines:70> (( 3 && 11 < list_lines )) +_autocomplete.history_lines:71> (( uniques[(I)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]] )) +_autocomplete.history_lines:72> uniques+=( '' ) +_autocomplete.history_lines:73> shift displays +_autocomplete.history_lines:70> (( 2 && 12 < list_lines )) +_autocomplete.history_lines:71> (( uniques[(I)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]] )) +_autocomplete.history_lines:72> uniques+=( '' ) +_autocomplete.history_lines:73> shift displays +_autocomplete.history_lines:70> (( 1 && 13 < list_lines )) +_autocomplete.history_lines:71> (( uniques[(I)[[:blank:]]#(<->)[*[:blank:]][[:blank:]]] )) +_autocomplete.history_lines:72> uniques+=( '' ) +_autocomplete.history_lines:73> shift displays +_autocomplete.history_lines:70> (( 0 && 14 < list_lines )) +_autocomplete.history_lines:75> displays=( '' '' '' '' '' '' '' '' '' '' '' '' '' '' ) +_autocomplete.history_lines:81> [[ history-search-backward:history-lines:: != *history-search-* ]] +_autocomplete.history_lines:96> displays=( ' ' ) +_autocomplete.history_lines:98> local -Pa matches=( ) +_autocomplete.history_lines:99> local -Pi index=0 +_autocomplete.history_lines:100> index= +_autocomplete.history_lines:101> matches+=( '' ) +_autocomplete.history_lines:104> local -Pa suf=( ) +_autocomplete.history_lines:105> local -a expl=( ) +_autocomplete.history_lines:106> local _comp_no_ignore=1 +_autocomplete.history_lines:107> [[ 1 -eq 1 && menu-select == *-select* ]] +_autocomplete.history_lines:108> suf=( -S ';' -R _autocomplete.history_lines.suffix ) +_autocomplete.history_lines:113> _comp_tags=history-lines +_autocomplete.history_lines:114> _description -2V history-lines expl '' +_description:3> local name nopt xopt format gname hidden hide match opts tag +_description:4> local -a ign gropt sort +_description:5> local -a match mbegin mend +_description:7> opts=( ) +_description:9> xopt=( -X ) +_description:10> nopt=( ) +_description:11> zparseopts -K -D -a nopt 1 2 'V=gropt' 'J=ign' 'x=xopt' +_description:13> 3='' +_description:14> [[ -n '' ]] +_description:16> zstyle -s :completion:history-search-backward:history-lines:::history-lines group-name gname +_description:17> [[ -z '' ]] +_description:17> gname=history-lines +_description:19> _setup history-lines history-lines +_setup:3> local val nm=0 +_setup:5> [[ 2 -eq 1 ]] +_setup:7> zstyle -a :completion:history-search-backward:history-lines:::history-lines list-colors val +_setup:21> [[ history-lines = default ]] +_setup:27> zstyle -s :completion:history-search-backward:history-lines:::history-lines show-ambiguity val +_setup:32> zstyle -t :completion:history-search-backward:history-lines:::history-lines list-packed +_setup:34> [[ 2 -eq 1 ]] +_setup:37> compstate[list]='list force packed rows' +_setup:40> zstyle -t :completion:history-search-backward:history-lines:::history-lines list-rows-first +_setup:42> [[ 2 -eq 1 ]] +_setup:45> compstate[list]='list force packed rows' +_setup:48> zstyle -t :completion:history-search-backward:history-lines:::history-lines last-prompt +_setup:50> [[ 2 -eq 1 ]] +_setup:53> compstate[last_prompt]=yes +_setup:56> zstyle -t :completion:history-search-backward:history-lines:::history-lines 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:history-search-backward:history-lines:::history-lines menu val +_setup:71> _last_nmatches=-1 +_setup:74> [[ '' != always ]] +_setup:75> zstyle -s :completion:history-search-backward:history-lines:::history-lines force-list val +_description:21> name=expl +_description:23> zstyle -s :completion:history-search-backward:history-lines:::history-lines format format +_description:26> zstyle -s :completion:history-search-backward:history-lines:::history-lines hidden hidden +_description:31> zstyle -s :completion:history-search-backward:history-lines:::history-lines matcher match +_description:33> [[ -n 'm:{[:lower:]-}={[:upper:]_} r:|[.]=**' ]] +_description:33> opts=( -M 'm:{[:lower:]-}={[:upper:]_} r:|[.]=**' ) +_description:37> [[ -z -V ]] +_description:48> gropt=( -o nosort ) +_description:51> [[ -z 1 ]] +_description:73> _comp_ignore=( ) +_description:76> tag=history-lines +_description:78> shift 2 +_description:79> [[ -z '' && 1 -eq 1 ]] +_description:80> format='' +_description:92> [[ -n history-lines ]] +_description:93> [[ -n '' ]] +_description:96> set -A expl -M 'm:{[:lower:]-}={[:upper:]_} r:|[.]=**' -2 -o nosort -J history-lines +_description:106> (( 0 )) +_description:107> local fakestyle descr +_description:108> fakestyle=fake +_description:109> zstyle -a :completion:history-search-backward:history-lines:::history-lines fake match +_description:110> continue +_description:108> fakestyle=fake-always +_description:109> zstyle -a :completion:history-search-backward:history-lines:::history-lines fake-always match +_description:110> continue +_description:123> return 0 +_autocomplete.history_lines:115> compadd -S ';' -R _autocomplete.history_lines.suffix -QU -ld displays -M 'm:{[:lower:]-}={[:upper:]_} r:|[.]=**' -2 -o nosort -J; ```
marlonrichert commented 1 year ago

Thanks for the functions -t output! That's very helpful. Yes, this is definitely a bug.