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:
@@ -0,0 +1,10 @@
|
||||
---
|
||||
synopsis: add description to zsh completions
|
||||
issues: [fj#910]
|
||||
cls: [3632]
|
||||
category: "Fixes"
|
||||
credits: [matthewbauer]
|
||||
---
|
||||
|
||||
Emit descriptions when completing args in zsh completions. This uses the descriptions we already
|
||||
provided in NIX\_GET\_COMPLETIONS.
|
||||
+14
-10
@@ -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 "$@"
|
||||
|
||||
Reference in New Issue
Block a user