feat(shell): zsh support completion in the middle of a prompt

This commit is contained in:
dkmar 2025-04-10 05:07:55 -07:00
parent 251d2e6f5f
commit 000d18b32e

View File

@ -6,17 +6,18 @@ _tv_smart_autocomplete() {
current_prompt=$LBUFFER
local output
output=$(tv --autocomplete-prompt "$current_prompt" $*)
output=$(tv --autocomplete-prompt "$current_prompt" $* | tr '\n' ' ')
if [[ -n $output ]]; then
zle reset-prompt
RBUFFER=""
local rhs=$RBUFFER
# add a space if the prompt does not end with one
[[ "${current_prompt}" != *" " ]] && current_prompt="${current_prompt} "
LBUFFER=$current_prompt$output
LBUFFER=$current_prompt$output
CURSOR=${#LBUFFER}
RBUFFER=$rhs
zle reset-prompt
# uncomment this to automatically accept the line
# (i.e. run the command without having to press enter twice)
# zle accept-line
@ -52,4 +53,3 @@ zle -N tv-shell-history _tv_shell_history
bindkey '{tv_smart_autocomplete_keybinding}' tv-smart-autocomplete
bindkey '{tv_shell_history_keybinding}' tv-shell-history