feat(screenshots): automate screenshot naming and storage - Detect active Texmaker project directory automatically - Fall back to manual directory selection when needed - Prompt user for screenshot filename - Prevent accidental filename collisions - Copy screenshot name to clipboard automatically - Capture screenshots using GNOME Screenshot area selection - Allow repeated captures until user confirms the result - Store screenshots directly in project documentation folders - Add script documentation and usage instructions ads
100 lines
3.2 KiB
Bash
Executable File
100 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
###############################################################################
|
|
# Script Name: screenshot_grab.sh
|
|
#
|
|
# Description:
|
|
# Interactive screenshot capture tool for GNOME desktops.
|
|
#
|
|
# The script automatically determines a destination directory from an
|
|
# open Texmaker project when possible. If no Texmaker project is detected,
|
|
# the user is prompted to choose a destination folder manually.
|
|
#
|
|
# Features:
|
|
# - Automatic Texmaker project path detection
|
|
# - Manual directory selection fallback
|
|
# - User-defined screenshot filenames
|
|
# - Duplicate filename detection
|
|
# - Automatic filename copy to clipboard
|
|
# - Area screenshot capture using gnome-screenshot
|
|
# - Screenshot preview/confirmation loop
|
|
#
|
|
# Requirements:
|
|
# - Bash
|
|
# - zenity
|
|
# - gnome-screenshot
|
|
# - xclip
|
|
# - Texmaker (optional)
|
|
#
|
|
# Usage:
|
|
# ./screenshot_grab.sh
|
|
#
|
|
# Workflow:
|
|
# 1. Detect current Texmaker project folder or ask for a directory.
|
|
# 2. Enter a screenshot filename.
|
|
# 3. Filename is copied to the clipboard automatically.
|
|
# 4. Select a screen area using gnome-screenshot.
|
|
# 5. Confirm the result.
|
|
# 6. Retake the screenshot until satisfied.
|
|
#
|
|
# Output:
|
|
# <selected_directory>/<filename>.png
|
|
#
|
|
# Notes:
|
|
# - The line beginning with ### contains the default fallback directory.
|
|
# - Existing filenames are checked before capturing.
|
|
# - Cancelling any dialog exits the script.
|
|
#
|
|
###############################################################################
|
|
|
|
###/data/DatenLucas/Dokumente/Studium/Master/3.Semester/Mechatronische Systeme/Lernunterlagen/
|
|
DEFAULT_DIR="$(cat ~/scripts/screenshot_grab.sh | grep "###" | grep -v grep | sed 's/###//g')"
|
|
cont=1
|
|
PATH="$(ps -elf | grep -v grep | grep -o -P '(?<=texmaker ).*(?=/.*\.tex)')/"
|
|
if [ "$PATH" == "/" ]; then
|
|
# /usr/bin/zenity --error --text="No Filepath detected"
|
|
# exit 0
|
|
while [ $cont -eq 1 ]; do
|
|
PATH="$(/usr/bin/zenity --file-selection --title="No TEX open: Where the FUCK shall I go???" --directory --width=600 --height=400 --filename="$DEFAULT_DIR")"
|
|
ret=$?
|
|
if [[ "$PATH" != "/" ]] && [[ -d "$PATH" ]] && [[ $ret -eq 0 ]]; then
|
|
cont=0
|
|
elif [[ $ret -eq 1 ]]; then
|
|
exit 1
|
|
fi
|
|
done
|
|
PATH="$PATH/"
|
|
fi
|
|
text="Filename exists:"
|
|
NAME="$(/usr/bin/zenity --entry --ok-label="Fuck" --title="Filename" --text="Enter Name:")"
|
|
while [ $cont -eq 1 ]; do
|
|
if [ -a "$PATH$NAME.png" ]; then
|
|
NEWNAME="$(/usr/bin/zenity --entry --entry-text="$NAME" --cancel-label="Fuck It!" --ok-label="New Fuck" --title="Shit Shit Shit" --text="$text")"
|
|
ret=$?
|
|
if [[ "$NEWNAME" == "" ]] && [[ $ret -eq 1 ]]; then
|
|
cont=0
|
|
elif [[ "$NAME" != "$NEWNAME" ]] && [[ $ret -eq 0 ]]; then
|
|
NAME=$NEWNAME
|
|
cont=0
|
|
elif [[ "$NAME" == "$NEWNAME" ]] && [[ $ret -eq 0 ]]; then
|
|
text="I said new name you stupd fucking Idiot"
|
|
else
|
|
/usr/bin/zenity --error --title "Fuck Fuck Fuck Error" --text='Some Fucking unexpected State'
|
|
fi
|
|
else
|
|
cont=0
|
|
fi
|
|
done
|
|
if [ "$NAME" == "" ]; then
|
|
exit 1;
|
|
fi
|
|
printf "%s" "$NAME" | /usr/bin/xclip -sel clip
|
|
NAME="$NAME.png"
|
|
printf "%s\n" "$PATH$NAME"
|
|
cont=1
|
|
while [ $cont -eq 1 ]; do
|
|
/usr/bin/gnome-screenshot -a -f "$PATH$NAME"
|
|
/usr/bin/zenity --title="Confirmation" --text="Picture OK?" --ok-label="Fuck Yes" --cancel-label="Fuck No" --question
|
|
cont=$?
|
|
done
|