summaryrefslogtreecommitdiff
path: root/hackshot.sh
diff options
context:
space:
mode:
Diffstat (limited to 'hackshot.sh')
-rwxr-xr-xhackshot.sh90
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