completely rewrite screenshotutil

This commit is contained in:
speedie 2023-02-07 21:03:51 +01:00
parent 07c9a9b943
commit 6dcdedef67

View file

@ -1,133 +1,88 @@
#!/bin/sh
# speedwm-screenshotutil
# Built in screenshot utility for my build of speedwm
# Requires curl, maim and xclip.
# screenshot script
#
# curl snippet by nezbednik, thank you!
# dependencies: curl, maim and xclip.
#
# curl snippet for imgbb by nezbednik, thank you!
rm -f /tmp/screenshot*
# basic functions for taking the screenshots
SLEEP() { sleep "$2" && maim -s"${ARG2}"B > "$1"; }
SLEEP_AND_FULL() { sleep "$3" && maim -"${ARG2}"B > "$1" || exit 0; }
FULL_SCR() { [ ! -e "$1" ] && maim -"${ARG2}"B > "$1" || return 0; }
SEL_SCR() { [ ! -e "$1" ] && maim -s"${ARG2}"B > "$1" || return 0; }
case "$RUNLAUNCHER" in
"") RUNLAUNCHER=spmenu ;;
esac
# functions for sending notifications
SENDNOTIF() { command -v notify-send > /dev/null && notify-send "$1"; }
BINDIR="$(dirname $(command -v speedwm-winnav))/"
# function for uploading image to imgbb or 0x0.st
UPLOAD_IMAGE() {
[ "$IMAGE_HOST" = "imgbb" ] && IMAGE="$(curl -s -F source=@"$1" -F "type=file" -F "action=upload" "https://imgbb.com/json" | sed "s/\\\\//g; s/\"/\\n/g" | grep -m 1 -A 2 url | tail -n 1)"
[ "$IMAGE_HOST" = "0x0" ] && IMAGE="$(curl -s -F file=@"$1" -F secret= https://0x0.st)"
EXPORTDIR"=$HOME/.config/speedwm"
mkdir -p "$EXPORTDIR"
printf "%s\n" "$IMAGE" && return 0 || return 1
}
# Config
# default configuration
[ -z "$RUNLAUNCHER" ] && RUNLAUNCHER=spmenu
[ -z "$EXPORTDIR" ] && EXPORTDIR="$HOME/.config/speedwm"; mkdir -p "$EXPORTDIR"
[ -z "$IMAGEHOST" ] && IMAGE_HOST="imgbb" # Image host (imgbb/0x0)
[ -z "$SHOWCURSOR" ] && SHOWCURSOR="true" # Show cursor or not (true/false)
[ -z "$DEFAULT_SCREENSHOT_DIRECTORY" ] && DEFAULT_SCREENSHOT_DIRECTORY=$HOME/Screenshots # Default screenshot path
[ -z "$FORMAT" ] && FORMAT="+%T_%D" # Screenshot format
[ -z "$PREFIX" ] && PREFIX="screenshot-" # Screenshot prefix
[ -e "$EXPORTDIR/screenshotutilrc" ] && . "$EXPORTDIR/screenshotutilrc" || cat <<CONFIG > "$EXPORTDIR/screenshotutilrc"
# speedwm-screenshotutil configuration file
RUNLAUNCHER="spmenu" # Run launcher to use
IMAGE_HOST="imgbb" # Image host (imgbb/0x0)
SHOWCURSOR="true" # Show cursor or not (true/false)
DEFAULTSCREENSHOTPATH=$HOME/Screenshots # Default screenshot path
DEFAULT_SCREENSHOT_DIRECTORY="$HOME/Screenshots" # Default screenshot path
PREFIX="screenshot-" # Screenshot prefix
FORMAT="+%T_%D" # Screenshot format
CONFIG
if [ -e "$EXPORTDIR/screenshotutilrc" ]; then
. $EXPORTDIR/screenshotutilrc
else
printf "SHOWCURSOR=$SHOWCURSOR # Show cursor or not (true/false)" > $EXPORTDIR/screenshotutilrc
printf "\nDEFAULTSCREENSHOTPATH=$DEFAULTSCREENSHOTPATH # Where screenshots are saved\n" >> $EXPORTDIR/screenshotutilrc
echo "FORMAT='$FORMAT' # Where screenshots are saved. : and / will be replaced with _ and nothing respectively." >> $EXPORTDIR/screenshotutilrc
fi
# showcursor
[ "$SHOWCURSOR" = "true" ] && ARG2="" || ARG2=u
case "$SHOWCURSOR" in
"true") ARG2="" ;;
"false") ARG2=u ;;
esac
# make default screenshot path
mkdir -p "$DEFAULT_SCREENSHOT_DIRECTORY"
# Help argument action
HELP() {
printf "speedwm-screenshotutil\n-t | Wait <second argument> seconds and then take the screenshot."
printf "\n-f | Take a full screen screenshot instead of selecting manually."
printf "\n-s | Take a screenshot, allowing the user to select a section manually."
printf "\n-o | Select a file and allow the user to perform actions with it."
printf "\n-tf | Wait <second argument> seconds and then take a full screen screenshot."
printf "\n-h | View this help screen"
printf "\nNo arguments will print this screen.\n"
printf "speedwm-screenshotutil\n\n"
printf "%s - Wait <second argument> seconds and then take the screenshot.\n" "-t"
printf "%s - Take a full screen screenshot instead of selecting manually.\n" "-f"
printf "%s - Take a screenshot, allowing the user to select a section manually.\n" "-s"
printf "%s - Select a file and allow the user to perform actions with it.\n" "-o"
printf "%s - Wait <second argument> seconds and then take a full screen screenshot.\n" "-t -f"
printf "%s - View this help screen\n" "-h"
printf "No arguments will print this screen.\n"
}
# Sleep argument (-t)
if [ "$1" = "-t" ]; then
sleep "$2" && maim -s${ARG2}B > /tmp/screenshot-$DATE || exit 0
fi
# -t -f argument
[ "$1" = "-t" ] && [ "$2" = "-f" ] && SLEEP_AND_FULL "$@"
# Open argument (-o)
if [ "$1" = "-o" ]; then
if [ -e "$2" ]; then
cat "$2" > /tmp/screenshot-$DATE
else
printf "File $2 not found.\n"
exit 1
fi
fi
# check arguments
case "$1" in
"") HELP; exit 0 ;;
"-t") SLEEP "/tmp/screenshot-$DATE" ;;
"-f") FULL_SCR "/tmp/screenshot-$DATE" ;;
"-s") SEL_SCR "/tmp/screenshot-$DATE" ;;
"-o") cat "$2" > "/tmp/screenshot-$DATE" || printf "File %s not found.\n" "$2" ;;
*) HELP; exit 0 ;;
esac
# Sleep and full argument (-tf)
if [ "$1" = "-tf" ]; then
sleep "$2" && maim -${ARG2}B > /tmp/screenshot-$DATE || exit 0
elif [ "$1" = "-ft" ]; then
sleep "$2" && maim -${ARG2}B > /tmp/screenshot-$DATE || exit 0
fi
# user action
[ -e "/tmp/screenshot-$DATE" ] && U_INPUT="$(printf "Image\nURL\nSave" | $RUNLAUNCHER -l 3 -p "Copy to clipboard as an: ")" || exit 1
# Full argument (-f)
if [ "$1" = "" ]; then
HELP ; exit 0
else
if [ "$1" = "-f" ]; then
if [ -e "/tmp/screenshot-$DATE" ]; then
exists=true
else
maim -${ARG2}B > /tmp/screenshot-$DATE || exit 0
fi
fi
if [ "$1" = "-s" ]; then
if [ -e "/tmp/screenshot-$DATE" ]; then
exists=true
else
maim -s${ARG2}B > /tmp/screenshot-$DATE || exit 0
fi
fi
fi
# Help argument (-h)
if [ "$1" = "-h" ]; then
HELP ; exit 0
fi
# User action
if [ -e "/tmp/screenshot-$DATE" ]; then
U_INPUT="$(printf "Image\nURL\nSave" | $RUNLAUNCHER -l 3 -p "Copy to clipboard as an: ")"
else
exit 0
fi
# Send notification for URL
SENDNOTIF_URL() {
if [ -e "${BINDIR}notify-send" ]; then
notify-send "Screenshot copied to clipboard."
fi
}
# Send notifcation for local image save
SENDNOTIF_SAVE() {
if [ -e "${BINDIR}notify-send" ]; then
notify-send "Screenshot saved to $SAVEDIR."
fi
}
# Send notification for image copied to clipboard
SENDNOTIF_IMG() {
if [ -e "${BINDIR}notify-send" ]; then
notify-send "Screenshot copied to clipboard."
fi
}
mkdir -p $DEFAULTSCREENSHOTPATH
# Perform actions based on user input
# perform actions based on user input
case "$U_INPUT" in
"Image") cat /tmp/screenshot-$DATE | xclip -selection clipboard -t image/png && SENDNOTIF_IMG ;;
"URL") printf "\n" | xclip -selection clipboard && curl -s -F source=@"/tmp/screenshot-$DATE" -F "type=file" -F "action=upload" "https://imgbb.com/json" | sed "s/\\\\//g; s/\"/\\n/g" | grep -m 1 -A 2 url | tail -n 1 | xclip -selection clipboard && SENDNOTIF_URL ;;
"Save") SAVEDIR=$(printf "$DEFAULTSCREENSHOTPATH/screenshot-$(date "$FORMAT" | sed "s|:|-|g" | sed "s|/||g").png" | $RUNLAUNCHER -l 1 -g 1 -p "Where do you want to save it? (Including filename)") && cat /tmp/screenshot-$DATE > $SAVEDIR && SENDNOTIF_SAVE ;;
"Image") cat "/tmp/screenshot-$DATE" | xclip -selection clipboard -t image/png && SENDNOTIF "Screenshot copied to clipboard." ;;
"URL") printf "\n" | xclip -selection clipboard && UPLOAD_IMAGE "/tmp/screenshot-$DATE" | xclip -selection clipboard && SENDNOTIF "Screenshot copied to clipboard." ;;
"Save") SAVEDIR=$(printf "%s/screenshot-%s.png" "$DEFAULT_SCREENSHOT_DIRECTORY" "$(date "$FORMAT" | sed "s|:|-|g" | sed "s|/||g")" | $RUNLAUNCHER -l 1 -g 1 -p "Where do you want to save it? (Including filename)") && cat /tmp/screenshot-"$DATE" > "$SAVEDIR" && SENDNOTIF "Screenshot saved to $SAVEDIR" ;;
"") rm -f "/tmp/screenshot*"; exit 0 ;;
*) HELP "$@"; exit 0 ;;
esac
rm -f /tmp/screenshot* # Remove the screenshots