49 lines
1.6 KiB
Bash
Executable file
49 lines
1.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# fiw-shot: Spectacle in background mode (never opens the app window).
|
|
# The shot goes straight to the clipboard, then a notification shows the
|
|
# thumbnail (drag it into any app) with Save / Edit buttons.
|
|
#
|
|
# fiw-shot region Alt+S select area (adjust with handles, Enter = take)
|
|
# fiw-shot screen Alt+D monitor under the cursor
|
|
set -u
|
|
|
|
mode=${1:-region}
|
|
tmp_dir="${XDG_RUNTIME_DIR:-/tmp}/fiw-shot" # tmpfs, gone at logout
|
|
save_dir="$HOME/Pictures/Screenshots"
|
|
|
|
case $mode in
|
|
region) flag=-r ;;
|
|
screen) flag=-m ;;
|
|
*) echo "usage: fiw-shot region|screen" >&2; exit 2 ;;
|
|
esac
|
|
|
|
mkdir -p "$tmp_dir"
|
|
# keep the last 20 unsaved shots, drop older ones
|
|
ls -1t "$tmp_dir"/*.png 2>/dev/null | tail -n +21 | xargs -r rm -f --
|
|
|
|
name="Screenshot_$(date +%Y%m%d_%H%M%S).png"
|
|
shot="$tmp_dir/$name"
|
|
|
|
spectacle --background --nonotify $flag --output "$shot" 2>/dev/null
|
|
[[ -s $shot ]] || exit 0 # Esc during selection: nothing to do
|
|
|
|
wl-copy --type image/png < "$shot"
|
|
|
|
action=$(notify-send --app-name=Screenshot --icon="$shot" \
|
|
--hint="variant:x-kde-urls:@as ['file://$shot']" \
|
|
--action=save=Save --action=edit=Edit \
|
|
"Copied to clipboard" "$name")
|
|
|
|
case $action in
|
|
save)
|
|
mkdir -p "$save_dir"
|
|
cp -- "$shot" "$save_dir/$name"
|
|
notify-send --transient --app-name=Screenshot --icon="$save_dir/$name" \
|
|
--hint="variant:x-kde-urls:@as ['file://$save_dir/$name']" \
|
|
"Saved" "$save_dir/$name"
|
|
;;
|
|
edit)
|
|
# Spectacle's editor; copy/save from there when done
|
|
spectacle --edit-existing "$shot"
|
|
;;
|
|
esac
|