xkb-model-zsh-completion.zsh 1.0 KB

1234567891011121314151617181920212223242526
  1. #compdef -value-,XKB_DEFAULT_MODEL,-default-
  2. local models_yaml
  3. models_yaml="$(_call_program -l xkb-yaml xkbcli list)"
  4. case $status in
  5. 127 ) _message "xkb model completion requires xkbcli" && return 127 ;;
  6. <1->) _message "error listing xkb models" && return 1 ;;
  7. esac
  8. local yq_prog='.models[] | "\(.name):\(.description)"'
  9. local -a models
  10. models=( ${(@f)"$(printf '%s\n' $models_yaml | _call_program -l xkb-parse-yaml yq ${(q)yq_prog})"} )
  11. case $status in
  12. 127)
  13. local sed_models='/^models:/,/^$/p' sed_names='s/- name: //p' sed_descriptions='s/ description: //p'
  14. local models_sed="$(_call_program -l sed sed -n ${(q)sed_models} <<< $models_yaml)"
  15. local -a model_names=( ${(@f)"$(_call_program -l sed-names sed -n ${(q)sed_names} <<< $models_sed)"})
  16. local -a model_descriptions=( ${(@f)"$(_call_program -l sed-models sed -n ${(q)sed_descriptions} <<< $models_sed)"})
  17. printf -v models '%s:%s' ${model_names:^model_descriptions}
  18. ;;
  19. <1->) _message "error completing xkb models" && return 1 ;;
  20. esac
  21. _describe -t xkb-model 'xkb model' models "$@"