X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;ds=sidebyside;f=home%2Fbin%2Fwallpaper_review;h=b4662551417c9202d78c112cb89eb861ac43b7fd;hb=101c2c385239d4de389357403085627e06fa7850;hp=c62a54c9a84223f4040f5cd41c50462f8edf2ba3;hpb=b3a26007671a28c1a5043cd39947db36dee1394b;p=khome.git diff --git a/home/bin/wallpaper_review b/home/bin/wallpaper_review index c62a54c..b466255 100755 --- a/home/bin/wallpaper_review +++ b/home/bin/wallpaper_review @@ -7,18 +7,46 @@ declare -a paths declare -i n=0 +declare _command +declare -i _goto=0 + +read_command_goto() { + local buf + + printf ':' >&2 + read -r buf + printf '\n' >&2 + if [[ "$buf" =~ ^[0-9]+$ ]]; then + if [[ "$buf" -gt 0 && "$buf" -le "$n" ]]; then + (( buf-- )) + _goto="$buf" + _command='CMD_GOTO' + else + printf 'Error: out of range: %s\n' "$buf" >&2 + _command='CMD_UKNOWN' + fi + else + printf 'Error: not an integer: %s\n' "$buf" >&2 + _command='CMD_UKNOWN' + fi +} + read_command() { local char read -rsn 1 char case "$char" in - q | Q) echo 'CMD_QUIT';; - h | H) echo 'CMD_MOVE_BACK';; - l | L) echo 'CMD_MOVE_FORWARD';; - f | F) echo 'CMD_FAVORITE_ADD';; - r | R) echo 'CMD_FAVORITE_REMOVE';; - s | S) echo 'CMD_SET_CURRENT';; - *) echo 'CMD_UKNOWN';; + q | Q) _command='CMD_QUIT';; + h | H) _command='CMD_MOVE_BACK';; + l | L) _command='CMD_MOVE_FORWARD';; + f | F) _command='CMD_FAVORITE_ADD';; + r | R) _command='CMD_FAVORITE_REMOVE';; + s | S) _command='CMD_SET_CURRENT';; + z | Z) _command='CMD_FZF';; + :) read_command_goto;; + *) + printf 'Error: unknown command: %s\n' "$char" >&2 + _command='CMD_UKNOWN';; esac } @@ -68,10 +96,13 @@ paths_preview() { set_wallpaper "$i" "$path" fi - case "$(read_command)" in + read_command + case "$_command" in CMD_QUIT) feh --bg-scale "$(< "$FILE_WALLPAPER_CURR")" exit 0;; + CMD_GOTO) + i="$_goto";; CMD_MOVE_BACK) (( i = i == 0 ? (n - 1) : i - 1));; CMD_MOVE_FORWARD) @@ -89,6 +120,14 @@ paths_preview() { CMD_SET_CURRENT) printf 'Setting as current: "%s"\n' "$path" >&2 echo "$path" > "$FILE_WALLPAPER_CURR";; + CMD_FZF) + i=$( + for j in "${!paths[@]}"; do + printf '%d %s\n' "$((j + 1))" "${paths[j]}" + done \ + | fzf -e \ + | awk '{print $1 - 1}' + );; CMD_UKNOWN) continue;; esac