_cmake: fix cmake presets for real

support presets without descriptions, and modify the commandline
to add --list-presets at the end.

Improve how cmake presets are listed, should be more robust
in regards to quoting.
This commit is contained in:
Norbert Lange 2022-07-19 11:39:59 +02:00
parent 073379d908
commit 061f09cd53
1 changed files with 6 additions and 7 deletions

View File

@ -141,14 +141,13 @@ _cmake_generator_options() {
# -------------- # --------------
(( $+functions[_cmake_presets] )) || (( $+functions[_cmake_presets] )) ||
_cmake_presets() { _cmake_presets() {
# TODO: Problems with quotes need eval local invoke; invoke=(${(Q)words})
# would need a way to exec the array invoke[$CURRENT]=()
local -a list_presets; # TODO: remove all arguments -* except -S
if [[ -e CMakePresets.json ]]; then local list_presets; list_presets=(${(f)"$(${invoke} --list-presets 2>/dev/null |
# some old projects uses BOM in json file. strip UTF-8 BOM and then parse JSON sed -n -e 's,^[[:space:]]*"\([^"]*\)"[[:space:]]*-[[:space:]]*\(.*\),\1:\2,p' \
list_presets=("${(@f)$(sed '1s/^\xEF\xBB\xBF//' < CMakePresets.json | perl -0777 -MJSON::PP -nE 'do{$k=$_;($e=$k)=~s/:/\\:/g; printf "$_->{name}:$_->{description}\n"} for @{decode_json($_)->{configurePresets}}' 2>/dev/null)}") -e 's,^[[:space:]]*"\([^"]*\)"[[:space:]]*$,\1,p')"})
fi
_describe 'presets' list_presets _describe 'presets' list_presets
} }