#!/bin/sh set -eu TAGS=" artist album genre composer work " expr_reduce() { awk -vFS="\n" 'NR > 1 { printf(" AND ") } { printf "%s", $1 }' } alternatives() { EXPR="$1" TAG="$2" if [ -n "$EXPR" ]; then davis list "$TAG" "($EXPR)" else davis list "$TAG" fi } foo() { EXPR="${1:-}" LAST="${2-}" echo "$EXPR" case "$TAGS" in *" $LAST "*) NEW_TERMS="$(alternatives "$EXPR" "$LAST" | fzf -m | while read -r l; do echo "($LAST == \"$l\")"; done | expr_reduce)" if [ -n "$EXPR" ]; then EXPR="$EXPR AND $NEW_TERMS" else EXPR="$NEW_TERMS" fi foo "$EXPR" ;; *) SELECTED="$(echo "$TAGS path" | tr ' ' '\n' | grep -v '^$' | fzf)" || return 0 foo "$EXPR" "$SELECTED" ;; esac } EXPR="$(foo | tail -n 1)" if [ -n "$EXPR" ]; then davis clear davis search "($EXPR)" | rev | cut -d/ -f2- | rev | sort -u | xargs -d'\n' davis add davis play fi