123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- #!/bin/bash
-
- . "$(ffoom path)" || exit 3
-
- ffoo import inigrep
- ffoo import pretty
-
- usage() {
- mkusage "[-g generator_cmd] [-s selector_cmd] [-c consumer_cmd] [name]"
- }
-
- SATURNIN_MENU_MNAME=""
- SATURNIN_MENU_GENERATOR=""
- SATURNIN_MENU_SELECTOR=""
- SATURNIN_MENU_SELECT_ARGS=""
- SATURNIN_MENU_CONSUMER=""
-
- load_parts() {
- #
- # Load mandatory parts for menu name $1
- #
- local mname
-
- # last chance to get mname
- test -n "$SATURNIN_MENU_MNAME" \
- || SATURNIN_MENU_MNAME="$(get_mname)" \
- || usage
- mname="$SATURNIN_MENU_MNAME"
-
- # check that menu item exists
- inigrep -s "menu.$mname" | grep -q . \
- || die "no such menu: $mname"
-
- test -n "$SATURNIN_MENU_GENERATOR" \
- || SATURNIN_MENU_GENERATOR="$(get_generator)" \
- || die "cannot find generator for menu: $mname"
-
- test -n "$SATURNIN_MENU_SELECTOR" \
- || SATURNIN_MENU_SELECTOR="$(get_selector)" \
- || die "cannot find selector for menu: $mname"
-
- test -n "$SATURNIN_MENU_SELECT_ARGS" \
- || SATURNIN_MENU_SELECT_ARGS="$(get_select_args)"
-
- test -n "$SATURNIN_MENU_CONSUMER" \
- || SATURNIN_MENU_CONSUMER="$(get_consumer)" \
- || die "cannot find consumer for menu: $mname"
- }
-
- get_mname() {
- #
- # Take from global INI default
- #
- inigrep -1 -p menu._default_.name | grep .
- }
-
- get_generator() {
- #
- # Obtain and echo generator for menu $mname
- #
- # First, look for 'generator' key in menu definition,
- # then for items as 'item' keys at the same place,
- # finally default 'generator'.
- #
- inigrep -1 -p "menu.$mname.generator" | grep . \
- && return 0
- inigrep -p "menu.$mname.item" | grep -m 1 -q . \
- && echo "inigrep -p menu.$mname.item" \
- && return 0
- inigrep -1 -p "menu._default_.generator" | grep . \
- && return 0
- return 1
- }
-
- get_selector() {
- #
- # Obtain and echo selector for menu $mname
- #
- # First, look for 'selector' key in menu definition,
- # then a default 'selector'.
- #
- inigrep -1 -p "menu.$mname.selector" | grep . \
- && return 0
- inigrep -1 -p "menu._default_.selector" | grep .
- }
-
- get_select_args() {
- #
- # Obtain and echo selector args for menu $mname
- #
- # First, look for 'select_args' key in menu definition,
- # then a default 'select_args'.
- #
- inigrep -1 -p "menu.$mname.select_args" | grep . \
- && return 0
- inigrep -1 -p "menu._default_.select_args"
- }
-
- get_consumer() {
- #
- # Obtain and echo consumer args for menu $mname
- #
- # First, look for 'consumer' key in menu definition,
- # then a default 'consumer'.
- #
- inigrep -1 -p "menu.$mname.consumer" | grep . \
- && return 0
- inigrep -1 -p "menu._default_.consumer" | grep .
- }
-
- do_generate() {
- #
- # Generate menu items
- #
- bash -n <<<"$SATURNIN_MENU_GENERATOR" \
- || die "syntax errors in generator: $SATURNIN_MENU_GENERATOR"
- eval "$SATURNIN_MENU_GENERATOR"
- }
-
- do_select() {
- #
- # Bring up selection UI
- #
- bash -n <<<"$SATURNIN_MENU_SELECTOR" \
- || die "syntax errors in selector: $SATURNIN_MENU_SELECTOR"
- eval "$SATURNIN_MENU_SELECTOR $SATURNIN_MENU_SELECT_ARGS"
- }
-
-
- do_consume() {
- #
- # Process the selected item(s)
- #
- bash -n <<<"$SATURNIN_MENU_CONSUMER" \
- || die "syntax errors in consumer: $SATURNIN_MENU_CONSUMER"
- eval "$SATURNIN_MENU_CONSUMER"
- }
-
- while true; do case "$1" in
- -g) SATURNIN_MENU_GENERATOR="$2"; shift; shift ;;
- -s) SATURNIN_MENU_SELECTOR="$2"; shift; shift ;;
- -c) SATURNIN_MENU_CONSUMER="$2"; shift; shift ;;
- -*) usage ;;
- "") usage ;;
- *) SATURNIN_MENU_MNAME="$1"; shift; break ;;
- esac done
-
- load_parts
-
- debug -v SATURNIN_MENU_MNAME \
- SATURNIN_MENU_GENERATOR \
- SATURNIN_MENU_SELECTOR \
- SATURNIN_MENU_SELECT_ARGS \
- SATURNIN_MENU_CONSUMER
-
- do_generate | do_select | do_consume
|