Support navigating backwards
[khome.git] / home / bin / wallpapers_preview
CommitLineData
2953aaf3 1#! /bin/bash
31df3021 2
2953aaf3
SK
3declare -a paths
4declare -i n=0
31df3021 5
2953aaf3
SK
6read_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
19paths_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
38paths_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
72main() {
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
84main "$@"
This page took 0.036971 seconds and 4 git commands to generate.