completions: Show description in zsh completions

Uses the second part of NIX_GET_COMPLETIONS if available.

Change-Id: I35efaaea3f35eea25a8de723ab32ceecd054e7df
Fixes: https://git.lix.systems/lix-project/lix/issues/910
This commit is contained in:
Matthew Bauer
2025-07-11 02:54:08 +00:00
committed by jade
parent 1a0d05d852
commit 65ef28df6d
2 changed files with 24 additions and 10 deletions
+14 -10
View File
@@ -1,24 +1,28 @@
#compdef nix
function _nix() {
local ifs_bk="$IFS"
local input=("${(Q)words[@]}")
IFS=$'\n'
local res=($(NIX_GET_COMPLETIONS=$((CURRENT - 1)) "$input[@]" 2>/dev/null))
local -a suggestions # what value to actually use on completion
local -a suggestions_display # what to display to the user
local tpe suggestion description
local ifs_bk="$IFS"
IFS=$'\t'
NIX_GET_COMPLETIONS=$((CURRENT - 1)) "$input[@]" 2>/dev/null | {read tpe; while IFS=$'\t' read -r suggestion description; do
suggestions+=("$suggestion")
if [ -n "$description" ]; then
suggestions_display+=("$suggestion -- $description")
else
suggestions_display+=("$suggestion")
fi
done}
IFS="$ifs_bk"
local tpe="${${res[1]}%%> *}"
local -a suggestions
declare -a suggestions
for suggestion in ${res:1}; do
suggestions+=("${suggestion%% *}")
done
local -a args
if [[ "$tpe" == filenames ]]; then
args+=('-f')
elif [[ "$tpe" == attrs ]]; then
args+=('-S' '')
fi
compadd -J nix "${args[@]}" -a suggestions
compadd -J nix "${args[@]}" -d suggestions_display -a suggestions
}
_nix "$@"