diff options
Diffstat (limited to 'hackshot.sh')
-rwxr-xr-x | hackshot.sh | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/hackshot.sh b/hackshot.sh new file mode 100755 index 0000000..8bd6e69 --- /dev/null +++ b/hackshot.sh @@ -0,0 +1,90 @@ +#!/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 |