marlonrichert / zsh-autocomplete

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

Conflict between zoxide, zsh-autocomplete, and fzf results in erroneous behavior #709

Closed argamanza closed 5 months ago

argamanza commented 6 months ago

Environment

Shell: zsh 5.9 OS: macOS 14.1

Tools & Versions: zoxide: 0.9.4 fzf: 0.48.1 (installed via brew) zsh-autocomplete: 23.07.13

% typeset -p1 VENDOR OSTYPE ZSH_PATCHLEVEL _autocomplete__funcfiletrace
typeset VENDOR=apple
typeset OSTYPE=darwin23.0
typeset ZSH_PATCHLEVEL=zsh-5.9-0-g73d3173
typeset -a _autocomplete__funcfiletrace=(
  /opt/homebrew/share/zsh-autocomplete/zsh-autocomplete.plugin.zsh:4
  /Users/tzahi.argaman/.zshrc:5
  zsh:0
)
% git -C ~autocomplete log --oneline -n1
92a4311868 (HEAD -> stable, tag: 4.2.15) Merge pull request #16944 from cho-m/mismatched_binary_allowlist-granular-globs

Description

When using zoxide in conjunction with zsh-autocomplete and fzf, the expected behavior of navigating to directories sorted by frecency fails. Specifically, after initiating a directory search with z prefix<SPACE><TAB>, selecting a directory from the fzf menu, and pressing <ENTER>, the fzf menu reopens with the input "0n" instead of changing the directory.

Steps to Reproduce

  1. Configure .zshrc with the following setup:
    
    # Set up fzf key bindings and fuzzy completion
    eval "$(fzf --zsh)"

Initialize zsh-autocomplete

source /opt/homebrew/share/zsh-autocomplete/zsh-autocomplete.plugin.zsh

Initialize zoxide

eval "$(zoxide init zsh)"

2. Type z `sometext<SPACE><TAB>` to invoke the fzf menu.
3. Select a directory and press `<ENTER>`.

### Expected Behavior
Upon selecting a directory from the fzf menu and pressing `<ENTER>`, the shell should navigate to the selected directory.

### Actual Behavior
After selecting a directory, pressing `<ENTER>` reopens the fzf menu with `0n` pre-filled, leading to an empty list. Exiting this state requires pressing `<ESCAPE>` three times or manually correcting the input.

### Additional Information
- When using zoxide on a directory prefix with only one possible completion it will paste the command 4 times and `cd` into it.
- This issue does not occur when zsh-autocomplete is not initialized in the .zshrc file.
- using `zi` works as expected, seems like the issue is with the `<TAB>` key press.
- I will attach a video demonstrating the described behavior.

### Attempts to Resolve
Using `autoload -U compinit; compinit` as demonstrated below, instead of the zsh-autocomplete initialization allows zoxide to function as expected but without the desired autocomplete features.

autoload -U compinit; compinit

Initialize zsh-autocomplete

source /opt/homebrew/share/zsh-autocomplete/zsh-autocomplete.plugin.zsh

Initialize zoxide

eval "$(zoxide init zsh)"



## TL;DR
When using zoxide in conjunction with zsh-autocomplete, pressing `<TAB>` performs _some action_ 4 times which leads to erroneous behavior.

## Issue Demonstration
![CleanShot 2024-03-30 at 00 01 18](https://github.com/ajeetdsouza/zoxide/assets/9576019/68726c69-ab08-45ce-aeee-eeb5a2c8695c)

<details>
<summary>Contents of <code>~autocomplete-log/YYYY-MM-DD.log</code> (click to expand)</summary>
<pre>
cat ~autocomplete-log/2024-03-29.log
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
zoxide: no match found
**Following lines are automatically added when trying to `cat` the log file**
^[[2;1R^[[10;1R^[[25;1R^[[25;1R%
tzahi.argaman@NG-TZAHI-AR % 1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R;1R
shell function
TRAPINT   TRAPQUIT
common substring: TRAPI
</pre>
</details>
argamanza commented 5 months ago

Just noticed it's a duplicate of #706 - closing