73 lines
1.9 KiB
Bash
Executable File
73 lines
1.9 KiB
Bash
Executable File
#!/bin/sh
|
|
set -ef
|
|
|
|
OUTFILE="$HOME/Pictures/Screenshots/$(date +"%Y-%m-%d_%H-%M-%S").jxl" # output file template, change as needed
|
|
DMENUOPTS="-c -z 128 -bw 2" # custom dmenu options
|
|
|
|
clean() {
|
|
[ "$nsxiv_pid" ] && kill "$nsxiv_pid"
|
|
[ "$tmpfreeze" ] && rm -f "$tmpfreeze"
|
|
rm -f "$tmpfp"
|
|
}
|
|
|
|
save() {
|
|
cjxl "$tmpfp" -d 0.0 "$OUTFILE" && notify-send -u low "$OUTFILE"
|
|
exit 0
|
|
}
|
|
|
|
savemenu() { printf 'save?' | dmenu $DMENUOPTS -l 1 && save; }
|
|
|
|
choose() {
|
|
while true; do
|
|
case "$(printf "save\nedit\nscan\nupload" | dmenu $DMENUOPTS -l 4)" in
|
|
save) save ;;
|
|
edit)
|
|
h1="$(md5sum "$tmpfp")"
|
|
gimp -n "$tmpfp"
|
|
h2="$(md5sum "$tmpfp")"
|
|
[ "$h1" != "$h2" ] && save # changed, save
|
|
;;
|
|
scan)
|
|
zdata="$(zbarimg -1 "$tmpfp")" || zdata="error: scan failed with exit code $?"
|
|
export zdata
|
|
urxvt -g 75x25 -e sh -c 'printf "%s\n" "${zdata#*:}" | vim -' &
|
|
printf '%s\n' "${zdata#*:}"
|
|
;;
|
|
upload)
|
|
owo -u "$tmpfp" | xclip -sel clipboard && notify-send "uploaded and copied successfully!" || notify-send "upload error! you should probably save the image"
|
|
;;
|
|
*) break ;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
ss() {
|
|
[ "$ssopts" = "-g" ] && ssopts="$(hacksaw -f "-i %i -g %g")"
|
|
shotgun $ssopts "$tmpfp"
|
|
[ "$nsxiv_pid" ] && kill "$nsxiv_pid" && nsxiv_pid="" # unfreeze
|
|
xclip -selection clipboard -t image/png < "$tmpfp" # copy screenshot
|
|
choose
|
|
}
|
|
|
|
freeze() {
|
|
tmpfreeze="$(mktemp -t screenshot_freeze_XXXX.png)"
|
|
shotgun "$tmpfreeze"
|
|
nsxiv -b -N SCREENSHOT_FREEZE "$tmpfreeze" &
|
|
nsxiv_pid=$!
|
|
# window manager makes it fullscreen (yippee!)
|
|
}
|
|
|
|
tmpfp="$(mktemp -t screenshot_XXXX.png)"
|
|
trap 'clean' INT HUP EXIT
|
|
|
|
while getopts :srwf OPT; do
|
|
case "$OPT" in
|
|
s) ssopts="-s" ;; # screen
|
|
r) ssopts="-g" ;; # region
|
|
w) ssopts="-i $(xdotool getactivewindow)" ;; # active window
|
|
f) freeze ;; # freeze screen, only useful with -r
|
|
*) echo "invalid option: -$OPTARG" && exit 1 ;;
|
|
esac
|
|
done
|
|
ss
|