#!/bin/sh - # Images herein are assumed to be in */*.$sfx{,.gz,.Z} # where the second "*" alone is a unique name for the image: dir="${IMGBGDIR-/l/imgbg/default}" sfx="${IMGBGSFX-`ls "$dir"/*/* | sed 's/.*\///; s/[^.]*.//; s/\..*//' | sort | uniq -c | sort -nr | sed 's/^ *[0-9]* *//; 1q'`}" rcf="${IMGBGRC-$HOME/.imgbgrc}" see="${IMGBGVIEW-xv}" lnk="${IMGBGLNK-$HOME/etc/img/imgbg%}" case "$lnk" in "$HOME/l/arc"*) lnkdir=`echo "$lnk" | sed "s/.*\/l\/arc\///; s/\/[^\/]*$//"` lnkdir="$HOME/share/arc/$lnkdir" test -d "$lnkdir" || { mkdir -p "$lnkdir"; mkl; };; esac # imgbg - output or link to a specified or random background image # Steve Kinzler, kinzler@cs.indiana.edu, Sep 99/Apr 05/Jul 2011 # http://www.cs.indiana.edu/~kinzler/home.html#x11 if echo "$sfx" | grep -s '[^a-zA-Z0-9_]' > /dev/null then echo "$0: aborting, invalid suffix ($sfx)" 1>&2 exit 2 fi cwd=`pwd` || exit $? cd "$dir" || exit $? case "$1" in -h|'') cat << EOF 1>&2 usage: $0 { name | RANDOM | LIST | -v | -r } [ sym/link | tag ] ... EOF exit 1;; -v) exec "$see" */*.$sfx*;; -r) test -f "$rcf" || rcf=/dev/null star='chop; s,^,*/, unless m,/,; s,$,.'"$sfx," star="$star"'; $_ = "$_\n$_.Z\n$_.gz\n"' strip='s,.*/,,; s,\.'"$sfx"'.*,,' tmp=/tmp/ir$$ tmpE=/tmp/irE$$ tmpI=/tmp/irI$$ trap "rm -f $tmp $tmpE $tmpI; exit" 0 1 2 13 15 sed 's/[ ]*#.*//; /^[ ]*$/d; s/^[ ]*//; s/[ ]*$//' "$rcf" > $tmp ls `sed -n 's/^-[ ]*//p' $tmp | perl -pe "$star"` \ 2> /dev/null | perl -pe "$strip" | sort > $tmpE ls `sed '/^-/d' $tmp | perl -pe "$star"` NoSuCH \ 2> /dev/null | perl -pe "$strip" | sort > $tmpI ls */*.$sfx */*.$sfx.Z */*.$sfx.gz 2> /dev/null | perl -pe "$strip" | #cat - $tmpI | sort | comm -23 - $tmpE | # exclude > include sort | comm -23 - $tmpE | cat - $tmpI | sort | # include > exclude perl -e '@_ = <>; print $_[int rand $#_ + 1]' exit;; esac name="$1"; shift case "$name" in LIST) ls */*.$sfx */*.$sfx.Z */*.$sfx.gz 2> /dev/null | perl -pe "s,.*/,,; s,\.$sfx.*,," | sort; exit 0;; RANDOM) rand=`$0 -r` file=`ls */"$rand".$sfx* | sed 1q`; rand=",$rand,";; *) file=`ls */"$name".$sfx* | sed 1q`;; esac case "$file" in ''|\**) echo "$0: cannot find imgbg file in $dir ($name)" 1>&2; exit 2;; esac case $# in 0) case "$file" in *.Z) uncompress;; *.gz) gunzip;; *) cat;; esac < "$file" exit $?;; esac cd "$cwd" || exit $? while : do case $# in 0) break;; *) symlink="$1"; shift;; esac case "$symlink" in */*) ;; *) symlink=`echo "$lnk" | sed "s/%/$symlink/g"` esac rm -f "$symlink.$sfx" echo "ln -s $dir/$file $symlink.$sfx" ln -s "$dir/$file" "$symlink.$sfx" case "$name,$#" in RANDOM,[1-9]*) cd "$dir" while : # we trust there's enough images to not make do # this a slow or infinite loop file=`$0 -r` case "$rand" in *,"$file",*) ;; *) rand="$rand$file,"; break;; esac done file=`ls */"$file".$sfx* | sed 1q` cd "$cwd";; esac done