chiark / gitweb /
dot/emacs: Bind a key to `magit-toggle-buffer-lock'.
[profile] / bin / remote-slideshow
1 #! /bin/sh -e
2
3 case $#,$2 in
4   0,* | 1,*) ok=nil ;;
5   *,*:*) ok=t ;;
6   *) ok=nil ;;
7 esac
8 case $ok in
9   nil) echo >&2 "usage: $0 DIR,... HOST:DISP [CMD ARGS ...]"; exit 2; ;;
10 esac
11 dirs=$1 host=${2%:*} dpy=${2##*:}; shift 2
12 case $#,$1 in
13   0, | 1,:slideshow)
14     set -- /usr/lib/xscreensaver/glslideshow -duration 10 -pan 10 \
15         -xrm "'*desktopGrabber: ./getimg %s'"
16      ;;
17   1,:photopile)
18     set -- /usr/lib/xscreensaver/photopile -no-titles -no-polaroid -shadows \
19         -xrm "'*desktopGrabber: ./getimg %s'"
20      ;;
21 esac
22
23 t=$(mktemp -d "${TMPDIR-/tmp}/remote-slidesshow.XXXXXXXX")
24 mkfifo "$t/pipe"
25 exec 3<>"$t/pipe"
26 rm -rf "$t"
27
28 ssh -ax "$host" "
29         set -e
30         tmp=\$(mktemp -d \"\${TMPDIR-/tmp}/remote-slideshow.XXXXXXXX\")
31         trap 'cd / && rm -rf \$tmp' EXIT INT TERM HUP
32         cd \$tmp
33         IMAGEFILE=\$tmp/img; export IMAGEFILE
34         DISPLAY=:$dpy; export DISPLAY
35         exec 3<&0 4>&1
36         cat >getimg <<'EOF'
37 #! /bin/sh -e
38 rm -f img
39 echo \"\$IMAGEFILE\" >&4
40 xscreensaver-command -deactivate >/dev/null 2>&1 || :
41 IFS= read -r f <&3
42 exec xscreensaver-getimage -directory \"\${IMAGEFILE%/*}\" -file img \"\$@\"
43 EOF
44         chmod +x getimg
45         $*" <&3 |
46 while IFS= read -r rdir; do
47   set -- \( -false
48   for e in jpg jpeg pjpeg pjpg png gif tif tiff xbm xpm; do
49     set --  "$@" -o -name "*.$e"
50   done
51   set -- "$@" \) -type f -print -o -type d \( -false
52   dd=$dirs
53   while :; do
54     case $dd in
55       "") break ;;
56       *,*) d=${dd##*,} dd=${dd%,*} ;;
57       *) d=$dd dd= ;;
58     esac
59     for i in $(find "$d" -name .slideshow-ignore -type f -print); do
60       while IFS= read -r line; do
61         case $line in \#*) continue ;; esac
62         set -- "$@" -o -path "${i%/*}/$line"
63       done <"$i"
64     done
65     set -- "$d" "$@"
66   done
67   set -- "$@" \) -prune
68   f=$(find "$@" | shuf -n1)
69   echo "$f"
70   scp "$f" "$host:$rdir" >/dev/null 2>&1
71   echo done >&3
72 done