#!/bin/bash PREVIEWBORDERCOLOR="#c8bcb7" PREVIEWBORDERTHICKNESS="2" ROFI_THEME="BernGray" SCROTDIR="$HOME/Desktop" SCROTPROGRAM="gimp" SCROTTMP="$( mktemp -t hackshot_XXXXXXXXXX.png )" SCROTFINAL="Screenshot_$( date -u +%Y-%m-%d_%H-%M-%S ).png" SCROTMONITOR="$( xdotool getmouselocation --shell | grep "SCREEN=" | cut -d "=" -f 2 )" SCROTGEOMETRY="" SHORTCUTS=( 'FUNCTION | TERMINAL EQUIVALENT | RECOMMENDED KEYBIND' '--------------------------------------------------------------------------------------------' 'Take screenshot of selected region | hackshot.sh -r | PrintScr' 'Take screenshot of active window | hackshot.sh -w | Ctrl+PrintScr' 'Take screenshot of active screen | hackshot.sh -s | Shift+PrintScr' 'Take screenshot of all screens | hackshot.sh | Ctrl+Shift+PrintScr' ) while getopts "hrws" opt; do case $opt in h) echo -e "usage: $0 [-h help] [-d toggle daemon] [-s select]\n\nSuggested Keyboard Shortcuts:\n"; printf '%s\n' "${SHORTCUTS[@]}"; exit ;; # PRINT HELP IN TERMINAL r) SCROTGEOMETRY="-g $( hacksaw -c "$PREVIEWBORDERCOLOR" 2>&1 )" ;; w) SCROTGEOMETRY="-g $( xdotool getwindowgeometry $(xdotool getactivewindow) | grep -o -E "[0-9]+(,|x)[0-9]+" | tac | sed -r "s|([0-9]+),([0-9]+)|+\1+\2|g" | tr -d "\n" )" ;; # w) SCROTGEOMETRY="-i $( xdotool getactivewindow )" ;; DOESN'T JIBE BECAUSE OF THE RESOLUTION CHECK BELOW s) SCROTGEOMETRY="--single-screen" ;; ?) echo "error: option -$OPTARG is not implemented"; exit ;; esac done [[ -n $( echo "$SCROTGEOMETRY" | grep "Error" ) ]] && exit rm /tmp/hackshot_*png if [[ -z "$SCROTGEOMETRY" ]]; then shotgun "${SCROTTMP}" else shotgun $SCROTGEOMETRY "${SCROTTMP}" fi convert -bordercolor "$PREVIEWBORDERCOLOR" -border "$PREVIEWBORDERTHICKNESS" "${SCROTTMP}" "/tmp/hackshot_preview.png" # BREAKS WITH MULTIPLE MONITORS BECAUSE IT GETS THE COMBINED DIMENSIONS OF ALL OF THEM # PREVIEWWIDTH="$(( $( xdpyinfo | grep -i -A 5 "screen #$SCROTMONITOR" | awk '/dimensions/{print $2}' | cut -d "x" -f 1 ) / 3 * 2 ))" # PREVIEWHEIGHT="$(( $( xdpyinfo | grep -i -A 5 "screen #$SCROTMONITOR" | awk '/dimensions/{print $2}' | cut -d "x" -f 2 ) / 3 * 2 ))" PREVIEWWIDTH="$(( $( xdotool getdisplaygeometry | cut -d " " -f 1 ) / 3 * 2 ))" PREVIEWHEIGHT="$(( $( xdotool getdisplaygeometry | cut -d " " -f 2 ) / 3 * 2 ))" if [[ "$SCROTGEOMETRY" != "--single-screen" ]]; then SCROTWIDTH="${SCROTGEOMETRY#* }"; SCROTWIDTH="${SCROTWIDTH%x*}"; SCROTHEIGHT="${SCROTGEOMETRY#*x}"; SCROTHEIGHT="${SCROTHEIGHT%%+*}"; [[ "$SCROTWIDTH" -lt "$PREVIEWWIDTH" ]] && PREVIEWWIDTH="$SCROTWIDTH" [[ "$SCROTHEIGHT" -lt "$PREVIEWHEIGHT" ]] && PREVIEWHEIGHT="$SCROTHEIGHT" fi PREVIEWWIDTH="$(( "$PREVIEWWIDTH" + ( "$PREVIEWBORDERTHICKNESS" * 2 ) ))" PREVIEWHEIGHT="$(( "$PREVIEWHEIGHT" + ( "$PREVIEWBORDERTHICKNESS" * 2 ) ))" # SAME AS ABOVE # PREVIEWX="$(( ( $( xdpyinfo | grep -i -A 5 "screen #$SCROTMONITOR" | awk '/dimensions/{print $2}' | cut -d "x" -f 1 ) / 2 ) - ( ${PREVIEWWIDTH} / 2 ) ))" # PREVIEWY="$(( ( $( xdpyinfo | grep -i -A 5 "screen #$SCROTMONITOR" | awk '/dimensions/{print $2}' | cut -d "x" -f 2 ) / 2 ) - ( ${PREVIEWHEIGHT} / 2 ) ))" PREVIEWX="$(( ( $( xdotool getdisplaygeometry | cut -d " " -f 1 ) / 2 ) - ( ${PREVIEWWIDTH} / 2 ) ))" PREVIEWX="$(( ( $( xdotool getdisplaygeometry | cut -d " " -f 2 ) / 2 ) - ( ${PREVIEWWIDTH} / 2 ) ))" feh -x -g "${PREVIEWWIDTH}x${PREVIEWHEIGHT}+${PREVIEWX}+${PREVIEWY}" -. "/tmp/hackshot_preview.png" & CHOICE=$(echo -e "1. Save to $SCROTDIR\n2. Copy to clipboard\n3. Open with $SCROTPROGRAM\n4. Abort" \ | rofi -dmenu -i -no-custom -p "" -theme "$ROFI_THEME" -async-pre-read 3 -no-click-to-exit ) kill $! if [[ -n $( grep "^1" <<< "$CHOICE" ) ]]; then mv "${SCROTTMP}" "${SCROTDIR}/${SCROTFINAL}" elif [[ -n $( grep "^2" <<< "$CHOICE" ) ]]; then echo "file:///${SCROTTMP}" | xclip -selection clipboard -t text/uri-list elif [[ -n $( grep "^3" <<< "$CHOICE" ) ]]; then nohup "$SCROTPROGRAM" "${SCROTTMP}" >/dev/null 2>&1 & else # rm "${SCROTTMP}" exit 0 fi