screenshot: make cross compatible with wayland
This commit is contained in:
parent
c9e9c6a722
commit
50391c8d2d
104
screenshot
104
screenshot
|
@ -1,83 +1,95 @@
|
|||
#!/bin/sh
|
||||
set -ef
|
||||
set -euf
|
||||
|
||||
OUTFILE="$HOME/pics/screenshots/$(date +"%Y-%m-%d_%H-%M-%S").jxl" # output file template, change as needed
|
||||
MENU="fzfmenu"
|
||||
CATBOX_USERHASH="" # catbox userhash
|
||||
BASEIFS=$IFS
|
||||
OUTFILE="${HOME}/pics/screenshots/$(date +"%Y-%m-%d_%H-%M-%S").jxl" # output file template, change as needed
|
||||
# menu + args, split on spaces
|
||||
MENU="fzfmenu -p screenshot"
|
||||
|
||||
clean() {
|
||||
[ -n "$nsxiv_pid" ] && kill "$nsxiv_pid"
|
||||
[ -f "$tmpfreeze" ] && rm -f "$tmpfreeze"
|
||||
rm -f "$tmpfp"
|
||||
[ -n "${freeze_pid:-}" ] && kill "$freeze_pid"
|
||||
[ -f "${tmpfreeze:-}" ] && rm -f "$tmpfreeze"
|
||||
[ -f "${tmpfp:-}" ] && rm -f "$tmpfp"
|
||||
}
|
||||
|
||||
save() {
|
||||
cjxl "$tmpfp" -d 0.0 "$OUTFILE" && notify-send -u low "$OUTFILE"
|
||||
cjxl "$tmpfp" -d 0.0 "$OUTFILE"
|
||||
notify-send -u low "$OUTFILE"
|
||||
exit 0
|
||||
}
|
||||
|
||||
savemenu() { printf 'save?' | $MENU && save; }
|
||||
|
||||
choose() {
|
||||
while true; do
|
||||
case "$(printf "save\nedit\nscan\nupload" | $MENU -p "screenshot actions")" in
|
||||
case "$(printf "save\nedit\nscan" | $MENU)" in
|
||||
save) save ;;
|
||||
edit)
|
||||
h1="$(md5sum "$tmpfp")"
|
||||
gimp -n "$tmpfp"
|
||||
h2="$(md5sum "$tmpfp")"
|
||||
[ "$h1" != "$h2" ] && save # changed, save
|
||||
h1="$(sha256sum "$tmpfp")"
|
||||
$editor "$tmpfp"
|
||||
h2="$(sha256sum "$tmpfp")"
|
||||
[ "$h1" != "$h2" ] && save # change, save
|
||||
exit 0
|
||||
;;
|
||||
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 -' &
|
||||
$TERMINAL -e sh -c 'printf "%s\n" "${zdata#*:}"; read -r __' &
|
||||
printf '%s\n' "${zdata#*:}"
|
||||
;;
|
||||
upload)
|
||||
set +e
|
||||
ut="$(printf "owo\ncatbox\nlitterbox (1h)\nlitterbox (12h)\nlitterbox (24h)\nlitterbox (72h)" | $MENU -p "upload")"
|
||||
case $ut in
|
||||
owo) owo -u "$tmpfp" | xclip -sel clipboard ;;
|
||||
catbox) curl -F "reqtype=fileupload" ${CATBOX_USERHASH:+-F "userhash=$CATBOX_USERHASH"} -F "fileToUpload=@$tmpfp" https://catbox.moe/user/api.php | xclip -sel clipboard ;;
|
||||
litterbox*) IFS=" ()"; set -- $ut ; curl -F "reqtype=fileupload" -F "time=$2" -F "fileToUpload=@$tmpfp" https://litterbox.catbox.moe/resources/internals/api.php | xclip -sel clipboard ;;
|
||||
*) continue ;;
|
||||
esac
|
||||
[ "$?" -eq 0 ] && notify-send "uploaded and copied successfully!" || notify-send "upload error! you should probably save the image"
|
||||
set -e
|
||||
;;
|
||||
*) break ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
ss() {
|
||||
[ "$ssopts" = "-g" ] && ssopts="$(hacksaw -f "-i %i -g %g")"
|
||||
shotgun $ssopts "$tmpfp"
|
||||
[ -n "$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!)
|
||||
$cap "$tmpfreeze"
|
||||
$freeze "$tmpfreeze" &
|
||||
freeze_pid=$!
|
||||
sleep 0.1
|
||||
# x11: window manager makes it fullscreen
|
||||
# doesn't work too well on cwm but idc
|
||||
}
|
||||
|
||||
tmpfp="$(mktemp -t screenshot_XXXX.png)"
|
||||
trap 'clean' INT HUP EXIT
|
||||
case "${XDG_SESSION_TYPE:-}" in
|
||||
wayland)
|
||||
editor="swappy -f"
|
||||
freeze="swayimg -g 0,0,1920,1080"
|
||||
cap="grim -l 0"
|
||||
ss() {
|
||||
if [ -n "$REGION" ]; then
|
||||
eval 'grim '"$(slurp -f '-g "%x,%y %wx%h"')"' "$tmpfp"'
|
||||
else
|
||||
grim "$tmpfp"
|
||||
fi
|
||||
wl-copy < "$tmpfp"
|
||||
}
|
||||
;;
|
||||
*)
|
||||
editor="gimp -n"
|
||||
freeze="nsxiv -b -N SCREENSHOT_FREEZE"
|
||||
cap="shotgun"
|
||||
ss() {
|
||||
shotgun ${SCREEN:+-s} ${REGION:+$(hacksaw -f '-i %i -g %g')} \
|
||||
${WINDOW:+-i $(xdotool getactivewindow)} "$tmpfp"
|
||||
xclip -sel clipboard -t image/png < "$tmpfp"
|
||||
}
|
||||
;;
|
||||
esac
|
||||
|
||||
tmpfp="$(mktemp -t screenshot_XXXX.png)"
|
||||
trap 'clean' EXIT
|
||||
|
||||
SCREEN="" REGION="" WINDOW="" FREEZE="" ssopts=""
|
||||
while getopts :srwf OPT; do
|
||||
case "$OPT" in
|
||||
s) ssopts="-s" ;; # screen
|
||||
r) ssopts="-g" ;; # region
|
||||
w) ssopts="-i $(xdotool getactivewindow)" ;; # active window
|
||||
s) SCREEN=1 ;; #screen
|
||||
r) REGION=1 ;; # region
|
||||
w) WINDOW=1 ;; # active window
|
||||
f) freeze ;; # freeze screen, only useful with -r
|
||||
*) echo "invalid option: -$OPTARG" && exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
ss
|
||||
|
||||
[ -n "${freeze_pid:-}" ] && kill "$freeze_pid" && freeze_pid="" # unfreeze
|
||||
choose
|
||||
|
|
Loading…
Reference in New Issue