+typeset -A GRML_STATUS_FEATURES
+
+function grml_status_feature () {
+ emulate -L zsh
+ local f=$1
+ local -i success=$2
+ if (( success == 0 )); then
+ GRML_STATUS_FEATURES[$f]=success
+ else
+ GRML_STATUS_FEATURES[$f]=failure
+ fi
+ return 0
+}
+
+function grml_status_features () {
+ emulate -L zsh
+ local mode=${1:-+-}
+ local this
+ if [[ $mode == -h ]] || [[ $mode == --help ]]; then
+ cat <<EOF
+grml_status_features [-h|--help|-|+|+-|FEATURE]
+
+Prints a summary of features the grml setup is trying to load. The
+result of loading a feature is recorded. This function lets you query
+the result.
+
+The function takes one argument: "-h" or "--help" to display this help
+text, "+" to display a list of all successfully loaded features, "-" for
+a list of all features that failed to load. "+-" to show a list of all
+features with their statuses.
+
+Any other word is considered to by a feature and prints its status.
+
+The default mode is "+-".
+EOF
+ return 0
+ fi
+ if [[ $mode != - ]] && [[ $mode != + ]] && [[ $mode != +- ]]; then
+ this="${GRML_STATUS_FEATURES[$mode]}"
+ if [[ -z $this ]]; then
+ printf 'unknown\n'
+ return 1
+ else
+ printf '%s\n' $this
+ fi
+ return 0
+ fi
+ for key in ${(ok)GRML_STATUS_FEATURES}; do
+ this="${GRML_STATUS_FEATURES[$key]}"
+ if [[ $this == success ]] && [[ $mode == *+* ]]; then
+ printf '%-16s %s\n' $key $this
+ fi
+ if [[ $this == failure ]] && [[ $mode == *-* ]]; then
+ printf '%-16s %s\n' $key $this
+ fi
+ done
+ return 0
+}
+