#!/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