129 lines
2.4 KiB
Bash
Executable File
129 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
screenshot_dir="${XDG_PICTURES_DIR:-$HOME/Pictures}/Screenshots"
|
|
|
|
notify() {
|
|
notify-send " Screenshot" "$1"
|
|
}
|
|
|
|
require_cmd() {
|
|
local cmd="$1"
|
|
|
|
if ! command -v "$cmd" >/dev/null 2>&1; then
|
|
notify "$cmd ist nicht installiert."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
filename() {
|
|
date +%Y-%m-%d_%H-%M-%S.png
|
|
}
|
|
|
|
take_hyprshot() {
|
|
local mode="$1"
|
|
local name="$2"
|
|
|
|
require_cmd hyprshot
|
|
mkdir -p "$screenshot_dir"
|
|
hyprshot -m "$mode" -o "$screenshot_dir" -f "$name" -s
|
|
printf '%s/%s\n' "$screenshot_dir" "$name"
|
|
}
|
|
|
|
annotate_region() {
|
|
local name path
|
|
|
|
require_cmd satty
|
|
name="$(filename)"
|
|
path="$(take_hyprshot region "$name")"
|
|
satty --filename "$path" --output-filename "$path"
|
|
}
|
|
|
|
quick_region() {
|
|
local name
|
|
|
|
name="$(filename)"
|
|
take_hyprshot region "$name" >/dev/null
|
|
notify "Bereich gespeichert."
|
|
}
|
|
|
|
quick_window() {
|
|
local name
|
|
|
|
name="$(filename)"
|
|
take_hyprshot window "$name" >/dev/null
|
|
notify "Fenster gespeichert."
|
|
}
|
|
|
|
quick_output() {
|
|
local name
|
|
|
|
name="$(filename)"
|
|
take_hyprshot output "$name" >/dev/null
|
|
notify "Bildschirm gespeichert."
|
|
}
|
|
|
|
copy_region() {
|
|
require_cmd hyprshot
|
|
hyprshot -m region --clipboard-only -s
|
|
notify "Bereich in die Zwischenablage kopiert."
|
|
}
|
|
|
|
show_menu() {
|
|
require_cmd wofi
|
|
|
|
local choice
|
|
choice="$(
|
|
printf '%s\n' \
|
|
" Bereich markieren" \
|
|
" Bereich speichern" \
|
|
" Fenster speichern" \
|
|
" Bildschirm speichern" \
|
|
" Bereich kopieren" |
|
|
wofi --dmenu --prompt " Screenshot" --insensitive
|
|
)"
|
|
|
|
case "$choice" in
|
|
*"Bereich markieren"*)
|
|
annotate_region
|
|
;;
|
|
*"Bereich speichern"*)
|
|
quick_region
|
|
;;
|
|
*"Fenster speichern"*)
|
|
quick_window
|
|
;;
|
|
*"Bildschirm speichern"*)
|
|
quick_output
|
|
;;
|
|
*"Bereich kopieren"*)
|
|
copy_region
|
|
;;
|
|
esac
|
|
}
|
|
|
|
case "${1:-menu}" in
|
|
annotate-region)
|
|
annotate_region
|
|
;;
|
|
region)
|
|
quick_region
|
|
;;
|
|
window)
|
|
quick_window
|
|
;;
|
|
output)
|
|
quick_output
|
|
;;
|
|
copy-region)
|
|
copy_region
|
|
;;
|
|
menu)
|
|
show_menu
|
|
;;
|
|
*)
|
|
notify "Unbekannter Screenshot-Modus: $1"
|
|
exit 2
|
|
;;
|
|
esac
|