Commit | Line | Data |
---|---|---|
2953aaf3 | 1 | #! /bin/bash |
31df3021 | 2 | |
2953aaf3 SK |
3 | declare -a paths |
4 | declare -i n=0 | |
31df3021 | 5 | |
2953aaf3 SK |
6 | read_command() { |
7 | local char | |
8 | ||
9 | read -rsn 1 char | |
10 | case "$char" in | |
11 | q | Q) echo 'CMD_QUIT';; | |
12 | h | H) echo 'CMD_MOVE_BACK';; | |
13 | l | L) echo 'CMD_MOVE_FORWARD';; | |
14 | f | F) echo 'CMD_FAVORITE';; | |
15 | *) echo 'CMD_UKNOWN';; | |
16 | esac | |
17 | } | |
18 | ||
19 | paths_find() { | |
20 | local -r root_dir="$1" | |
21 | local path | |
22 | ||
23 | IFS=$'\n' | |
24 | for path in $(find "$root_dir" -type f) | |
25 | do | |
26 | if file "$path" | grep 'image data' > /dev/null | |
27 | then | |
28 | (( n++ )) | |
29 | # \r jumps to the beginning of the line: | |
30 | printf '\rFound %d images.' "$n" >&2 | |
31 | paths["$n"]="$path" | |
32 | fi | |
33 | done | |
34 | unset IFS | |
35 | printf '\n' >&2 | |
36 | } | |
37 | ||
38 | paths_preview() { | |
39 | local -i i | |
40 | local path | |
41 | ||
42 | for ((i=1; i<=n; i++)) | |
43 | do | |
44 | path="${paths[$i]}" | |
45 | ||
46 | printf '%d of %d : %s\n' "$i" "$n" "$path" | |
47 | feh --bg-scale "$path" | |
48 | ||
49 | case "$(read_command)" in | |
50 | CMD_QUIT) | |
51 | exit 0;; | |
52 | CMD_MOVE_BACK) | |
53 | # TODO Cycle around. | |
54 | # One step further back than needed, | |
55 | # to correct for the upcoming i++. | |
56 | ((i = i - 2)) | |
57 | if [[ i -lt 0 ]]; then | |
58 | i=-1 | |
59 | fi;; | |
60 | CMD_MOVE_FORWARD) | |
61 | ;; | |
62 | CMD_FAVORITE) | |
63 | wallpaper_fav | |
64 | ((i--));; | |
65 | CMD_UKNOWN) | |
66 | # Remain | |
67 | ((i--));; | |
68 | esac | |
69 | done | |
70 | } | |
71 | ||
72 | main() { | |
73 | local root_dir | |
74 | ||
75 | case "$1" in | |
76 | '') root_dir="$DIR_WALLPAPERS";; | |
77 | *) root_dir="$1";; | |
78 | esac | |
79 | ||
80 | paths_find "$root_dir" | |
81 | paths_preview | |
82 | } | |
83 | ||
84 | main "$@" |