X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=home%2Fbin%2Fwallpapers_preview;fp=home%2Fbin%2Fwallpapers_preview;h=0000000000000000000000000000000000000000;hb=6ec50bf3e0c31dddcbb7e35f81e9b50c9811154b;hp=34d98d79e24472a9890802bd5dbcc43b029293f9;hpb=ddd3f2511171abed8c071ff0794b518792f44570;p=khome.git diff --git a/home/bin/wallpapers_preview b/home/bin/wallpapers_preview deleted file mode 100755 index 34d98d7..0000000 --- a/home/bin/wallpapers_preview +++ /dev/null @@ -1,112 +0,0 @@ -#! /bin/bash - -### XXX Chose not to 'set -e' because arithmetic evaluation can cause a non-zero exit. -### XXX Chose not to 'set -u' because unset params ($1, $2, ...) cause failures. -### Solutions to the above are ugly. - -declare -a paths -declare -i n=0 - -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';; - esac -} - -paths_set() { - local path - - while read -r path - do - if file "$path" | grep 'image data' > /dev/null - then - (( n++ )) - # \r jumps to the beginning of the line: - printf '\rFound %d images.' "$n" >&2 - paths["$(( n - 1 ))"]="$path" - fi - done - printf '\n' >&2 -} - -paths_set_from_dir_find() { - paths_set < <(find "$1" -type f) -} - -paths_set_from_favs() { - paths_set < <(sort -k 2 "$FILE_WALLPAPER_FAVS" | awk '{sub("^" $1 " +", ""); print}') -} - -set_wallpaper() { - local -ri i="$1" - local -r path="$2" - - printf '%d of %d %s\n' "$(( i + 1 ))" "$n" "$path" - feh --bg-scale "$path" -} - -paths_preview() { - local -i i=0 - local path="${paths[$i]}" - - set_wallpaper "$i" "$path" - - while : - do - if [[ "${paths[$i]}" != "$path" ]] - then - path="${paths[$i]}" - set_wallpaper "$i" "$path" - fi - - case "$(read_command)" in - CMD_QUIT) - exit 0;; - CMD_MOVE_BACK) - (( i = i == 0 ? (n - 1) : i - 1));; - CMD_MOVE_FORWARD) - (( i = (i + 1) % n ));; - CMD_FAVORITE_ADD) - printf 'Adding to favorites set: "%s"\n' "$path" >&2 - wallpaper_fav;; - CMD_FAVORITE_REMOVE) - printf 'Removing from favorites set: "%s"\n' "$path" >&2 - digest=$(sha256sum "$path" | awk '{print $1}') - grep -v "$digest" "$FILE_WALLPAPER_FAVS" \ - | sort -u \ - | sponge "$FILE_WALLPAPER_FAVS" - ;; - CMD_SET_CURRENT) - printf 'Setting as current: "%s"\n' "$path" >&2 - echo "$path" > "$FILE_WALLPAPER_CURR";; - CMD_UKNOWN) - continue;; - esac - done -} - -main() { - case "$1" in - f | fav) paths_set_from_favs;; - d | dir) paths_set_from_dir_find "$2";; - a | all) paths_set_from_dir_find "$DIR_WALLPAPERS";; - '') - paths_set_from_dir_find "$DIR_WALLPAPERS";; - *) - printf 'Error: unknown source "%s"\n' "$1" >&2 - exit 1;; - esac - - paths_preview -} - -main "$@"