summaryrefslogtreecommitdiff
path: root/x11-misc/xshot/files/xshot
blob: decebc5e9152faec9265424e67114334dfa2512d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/bin/sh

MODE=
OUTPUT=
while [ $# -gt 0 ]; do
	case "$1" in
		-h|--help)
			echo "Usage: xshot [MODE] [OUTPUT]"
			echo "Make Xorg screenshot"
			echo
			echo "Modes:"
			echo "  window (w)"
			echo "  screen (s)"
			echo "  desktop (d)"
			echo "Default mode is window."
			exit 0
			;;
		window|screen|desktop)
			MODE="$1"
			;;
		*)
			if [ -z "$MODE" ]; then
				MODE="$1"
			elif [ -z "$OUTPUT" ]; then
				OUTPUT="$1"
			else
				echo "Unknown argument: $1" >&2
				exit 1
			fi
	esac
	shift
done

[ -n "$MODE" ] || MODE=window

case "$MODE" in
	window|w)
		# TODO how about getting window class and naming it according to it
		[ -n "$OUTPUT" ] || OUTPUT="xshot_$(date +%F_%H%M%S_%N).png"
		import "$OUTPUT"
		;;
	screen|s)
		# TODO mode complicated
		# https://unix.stackexchange.com/questions/247935/automatically-take-screenshot-of-specific-display-in-x#247936
		# This is going to work but question is how to specify screen/which screen
		# is currently active
		exit 1
		;;
	desktop|d)
		[ -n "$OUTPUT" ] || OUTPUT="xshot_$(date +%F_%H%M%S_%N).png"
		import -window root "$OUTPUT"
		;;
	*)
		echo "Unknown mode: $MODE" >&2
		exit 1
esac