fix(zsh): Tab completion and colby buffer expansion
Fix fzf_default_completion stale pointer after zle -D by setting it to expand-or-complete before deleting the lazy comp widget. Rebind ^I explicitly after widget deletion and add safety net in widgets.zsh after bindkey -e. Replace colby() function with ^M buffer expansion so the full copilot --allow-all-tools --allow-all-paths invocation is visible in terminal history and screen recordings. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -51,7 +51,6 @@ _copilot_tmux_wrap() {
|
|||||||
trap - EXIT INT TERM
|
trap - EXIT INT TERM
|
||||||
[[ -n "$TMUX" ]] && (tmux set automatic-rename on &)
|
[[ -n "$TMUX" ]] && (tmux set automatic-rename on &)
|
||||||
}
|
}
|
||||||
colby() { _copilot_tmux_wrap gh copilot --allow-all-tools --allow-all-paths "$@"; }
|
|
||||||
alias gs='git s'
|
alias gs='git s'
|
||||||
alias gd='git d'
|
alias gd='git d'
|
||||||
alias gdc='git dc'
|
alias gdc='git dc'
|
||||||
|
|||||||
@@ -387,5 +387,22 @@ for line in sys.stdin:
|
|||||||
}
|
}
|
||||||
zle -N _dots_stash_widget
|
zle -N _dots_stash_widget
|
||||||
bindkey '^Y' _dots_stash_widget
|
bindkey '^Y' _dots_stash_widget
|
||||||
|
|
||||||
|
# Restore Tab after bindkey -e
|
||||||
|
if (( ${+widgets[fzf-completion]} )); then
|
||||||
|
bindkey '^I' fzf-completion
|
||||||
|
elif (( ${+widgets[_dots_lazy_comp_widget]} )); then
|
||||||
|
bindkey '^I' _dots_lazy_comp_widget
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Enter: expand colby → full copilot invocation (visible in terminal history)
|
||||||
|
_dots_enter_handler() {
|
||||||
|
if [[ "$BUFFER" == "colby" || "$BUFFER" == "colby "* ]]; then
|
||||||
|
BUFFER="${BUFFER/#colby/copilot --allow-all-tools --allow-all-paths}"
|
||||||
|
fi
|
||||||
|
zle accept-line
|
||||||
|
}
|
||||||
|
zle -N _dots_enter_handler
|
||||||
|
bindkey '^M' _dots_enter_handler
|
||||||
}
|
}
|
||||||
_dots_load_keybindings
|
_dots_load_keybindings
|
||||||
|
|||||||
@@ -88,11 +88,14 @@ _dots_init_completion() {
|
|||||||
# Stub that loads real completion on first Tab, then replays the keypress
|
# Stub that loads real completion on first Tab, then replays the keypress
|
||||||
_dots_lazy_comp_widget() {
|
_dots_lazy_comp_widget() {
|
||||||
_dots_init_completion
|
_dots_init_completion
|
||||||
|
# Point fzf fallback to real completion before removing this widget
|
||||||
|
fzf_default_completion=expand-or-complete
|
||||||
zle -D _dots_lazy_comp_widget
|
zle -D _dots_lazy_comp_widget
|
||||||
# If fzf-completion exists (loaded via zle-line-init), use it; otherwise default
|
|
||||||
if (( ${+widgets[fzf-completion]} )); then
|
if (( ${+widgets[fzf-completion]} )); then
|
||||||
|
bindkey '^I' fzf-completion
|
||||||
zle fzf-completion "$@"
|
zle fzf-completion "$@"
|
||||||
else
|
else
|
||||||
|
bindkey '^I' expand-or-complete
|
||||||
zle expand-or-complete "$@"
|
zle expand-or-complete "$@"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user