shot() { # Usage: shot XY local destdir="$HOME/Pictures/screenshots" local fname local pb="fb" local paste msgt msgd opts fname="shot-$(date +%F-%T).png" if [ -z "$1" ]; then printf " Usage: shot XY X: Target Y: Destination Valid Targets: w Active Window a All displays s Mouse Selection Valid Destinations: f Save to file (defined in function) p Upload to a pastebin (defined in function) " return fi # X: What to capture case ${1:0:1} in # Active window w) printf "Focus target window now...\n" opts="-i" msgt="active window" ;; # All a) msgt="all displays" ;; # Mouse selection s) opts="-s --noopengl" msgt="mouse selection" ;; *) printf "Invalid target: %s\n" "${1:0:1}" return ;; esac # Y: Where to put the result case ${1:1:1} in # Save to file f) msgd="file: $destdir/$fname" ;; # Post to a pastebin p) destdir=$destdir/pasted msgd="pastebin" paste=1 ;; *) printf "Invalid destination: %s\n" "${1:1:1}" return ;; esac # Make sure destination directory will exist [[ ! -d "$destdir" ]] && mkdir -p "$destdir" local fpath="${destdir}/${fname}" # If target is active window, give a 5 second countdown before running maim if [[ "$msgt" = "active window" ]]; then countdown 5 opts="-i $(xdotool getactivewindow)" fi maim $opts "$fpath" printf "Captured %s -> %s\n" "$msgt" "$msgd" # If destination is a pastebin, do the needful [[ "$paste" ]] && $pb "$fpath" }