summaryrefslogtreecommitdiff
path: root/hackshot.sh
blob: 8bd6e6991da4d20271f47f891dbcb2bcd57b6bde (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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