Commit cfb12672 authored by Dom Sekotill's avatar Dom Sekotill
Browse files

Add support for SIGHUP to wallpaper command

On SIGHUP the wallpaper is refreshed.
parent a2a2b228
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -44,11 +44,28 @@ else
	exit 2
fi

if has file; then
	check() { case `file --brief --mime-type "$1"` in
		image/*) return 0 ;;
		*) return 1 ;;
	esac; }
else
	check() { case "$1" in
		*.png|*.jpg|*.jpeg|*.tiff|*.bmp) return 0 ;;
		*) return 1 ;;
	esac; }
fi

min_delay=$((MIN_DELAY_MINS * 60))
max_delay=$((MAX_DELAY_MINS * 60))
dif_delay=$((max_delay - min_delay))

trap '[ -z "${PID:-}" ] || kill -HUP $PID' HUP
while true; do
	"$@" "`list|choose`"
	sleep `seq $min_delay $max_delay | choose`
	FILE="`list|choose`"
	check "$FILE" || continue
	"$@" "$FILE"
	sleep `seq $min_delay $max_delay | choose` & PID=$!
	wait $PID || [ ${CODE:=$?} -eq 129 ] || exit $CODE
	unset PID CODE
done
+29 −5
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ import os
import sys
import time
import random
import signal
import subprocess
from os import path

@@ -17,19 +18,42 @@ IMAGES_DIRECTORY = path.expanduser(
		os.environ.get('IMAGES_DIRECTORY', '~/.backgrounds'))


class InterruptSignal(KeyboardInterrupt):
	"""Raised from a signal handler to interrupt a system call"""

	def __init__(self, signum):
		KeyboardInterrupt.__init__(self, signum)
		self.signum = signum

	@classmethod
	def sighandler(cls, signum, _):
		raise cls(signum)


def all_files():
	for dirpath, _, filenames in os.walk(IMAGES_DIRECTORY):
		for filename in filenames:
			yield path.join(dirpath, filename)


try:
	signal.signal(signal.SIGHUP, InterruptSignal.sighandler)
except ValueError:
	# Running on Windows? Looks like it.
	raise OSError("This OS is not supported")

if len(sys.argv) > 0:
	cmd = sys.argv[1:] + [None]
else:
	cmd = ['feh', '--no-fehbg', '--no-xinerama', '--bg-fill', None]

while 1:
	try:
		files = list(all_files())
		if files:
			cmd[-1] = random.choice(files)
			subprocess.call(cmd)
	time.sleep(random.randint(MIN_DELAY_SECS, MAX_DELAY_SECS))
		sleep_time = random.randint(MIN_DELAY_SECS, MAX_DELAY_SECS)
		time.sleep(sleep_time)
	except InterruptSignal:
		pass