225 lines
5.6 KiB
Bash
225 lines
5.6 KiB
Bash
#!/bin/bash
|
|
# ____ _ _
|
|
# / ___| ___ _ __ ___ ___ _ __ ___| |__ ___ | |_
|
|
# \___ \ / __| '__/ _ \/ _ \ '_ \/ __| '_ \ / _ \| __|
|
|
# ___) | (__| | | __/ __/ | | \__ \ | | | (_) | |_
|
|
# |____/ \___|_| \___|\___|_| |_|___/_| |_|\___/ \__|
|
|
#
|
|
# Based on https://github.com/hyprwm/contrib/blob/main/grimblast/screenshot.sh
|
|
# -----------------------------------------------------
|
|
|
|
# Screenshots will be stored in $HOME by default.
|
|
# The screenshot will be moved into the screenshot directory
|
|
|
|
# Add this to ~/.config/user-dirs.dirs to save screenshots in a custom folder:
|
|
# XDG_SCREENSHOTS_DIR="$HOME/Screenshots"
|
|
|
|
prompt='Screenshot'
|
|
mesg="DIR: ~/Screenshots"
|
|
|
|
# Screenshot Filename
|
|
source ~/.config/ml4w/settings/screenshot-filename.sh
|
|
|
|
# Screenshot Folder
|
|
source ~/.config/ml4w/settings/screenshot-folder.sh
|
|
|
|
# Screenshot Editor
|
|
export GRIMBLAST_EDITOR="$(cat ~/.config/ml4w/settings/screenshot-editor.sh)"
|
|
|
|
# Example for keybindings
|
|
# bind = SUPER, p, exec, grimblast save active
|
|
# bind = SUPER SHIFT, p, exec, grimblast save area
|
|
# bind = SUPER ALT, p, exec, grimblast save output
|
|
# bind = SUPER CTRL, p, exec, grimblast save screen
|
|
|
|
# Options
|
|
option_1="Immediate"
|
|
option_2="Delayed"
|
|
|
|
option_capture_1="Capture Everything"
|
|
option_capture_2="Capture Active Display"
|
|
option_capture_3="Capture Selection"
|
|
|
|
option_time_1="5s"
|
|
option_time_2="10s"
|
|
option_time_3="20s"
|
|
option_time_4="30s"
|
|
option_time_5="60s"
|
|
#option_time_4="Custom (in seconds)" # Roadmap or someone contribute :)
|
|
|
|
list_col='1'
|
|
list_row='2'
|
|
|
|
copy='Copy'
|
|
save='Save'
|
|
copy_save='Copy & Save'
|
|
edit='Edit'
|
|
|
|
# Rofi CMD
|
|
rofi_cmd() {
|
|
rofi -dmenu -replace -config ~/.config/rofi/config-screenshot.rasi -i -no-show-icons -l 2 -width 30 -p "Take screenshot"
|
|
}
|
|
|
|
# Pass variables to rofi dmenu
|
|
run_rofi() {
|
|
echo -e "$option_1\n$option_2" | rofi_cmd
|
|
}
|
|
|
|
####
|
|
# Choose Timer
|
|
# CMD
|
|
timer_cmd() {
|
|
rofi -dmenu -replace -config ~/.config/rofi/config-screenshot.rasi -i -no-show-icons -l 5 -width 30 -p "Choose timer"
|
|
}
|
|
|
|
# Ask for confirmation
|
|
timer_exit() {
|
|
echo -e "$option_time_1\n$option_time_2\n$option_time_3\n$option_time_4\n$option_time_5" | timer_cmd
|
|
}
|
|
|
|
# Confirm and execute
|
|
timer_run() {
|
|
selected_timer="$(timer_exit)"
|
|
if [[ "$selected_timer" == "$option_time_1" ]]; then
|
|
countdown=5
|
|
${1}
|
|
elif [[ "$selected_timer" == "$option_time_2" ]]; then
|
|
countdown=10
|
|
${1}
|
|
elif [[ "$selected_timer" == "$option_time_3" ]]; then
|
|
countdown=20
|
|
${1}
|
|
elif [[ "$selected_timer" == "$option_time_4" ]]; then
|
|
countdown=30
|
|
${1}
|
|
elif [[ "$selected_timer" == "$option_time_5" ]]; then
|
|
countdown=60
|
|
${1}
|
|
else
|
|
exit
|
|
fi
|
|
}
|
|
###
|
|
|
|
####
|
|
# Chose Screenshot Type
|
|
# CMD
|
|
type_screenshot_cmd() {
|
|
rofi -dmenu -replace -config ~/.config/rofi/config-screenshot.rasi -i -no-show-icons -l 3 -width 30 -p "Type of screenshot"
|
|
}
|
|
|
|
# Ask for confirmation
|
|
type_screenshot_exit() {
|
|
echo -e "$option_capture_1\n$option_capture_2\n$option_capture_3" | type_screenshot_cmd
|
|
}
|
|
|
|
# Confirm and execute
|
|
type_screenshot_run() {
|
|
selected_type_screenshot="$(type_screenshot_exit)"
|
|
if [[ "$selected_type_screenshot" == "$option_capture_1" ]]; then
|
|
option_type_screenshot=screen
|
|
${1}
|
|
elif [[ "$selected_type_screenshot" == "$option_capture_2" ]]; then
|
|
option_type_screenshot=output
|
|
${1}
|
|
elif [[ "$selected_type_screenshot" == "$option_capture_3" ]]; then
|
|
option_type_screenshot=area
|
|
${1}
|
|
else
|
|
exit
|
|
fi
|
|
}
|
|
###
|
|
|
|
####
|
|
# Choose to save or copy photo
|
|
# CMD
|
|
copy_save_editor_cmd() {
|
|
rofi -dmenu -replace -config ~/.config/rofi/config-screenshot.rasi -i -no-show-icons -l 4 -width 30 -p "How to save"
|
|
}
|
|
|
|
# Ask for confirmation
|
|
copy_save_editor_exit() {
|
|
echo -e "$copy\n$save\n$copy_save\n$edit" | copy_save_editor_cmd
|
|
}
|
|
|
|
# Confirm and execute
|
|
copy_save_editor_run() {
|
|
selected_chosen="$(copy_save_editor_exit)"
|
|
if [[ "$selected_chosen" == "$copy" ]]; then
|
|
option_chosen=copy
|
|
${1}
|
|
elif [[ "$selected_chosen" == "$save" ]]; then
|
|
option_chosen=save
|
|
${1}
|
|
elif [[ "$selected_chosen" == "$copy_save" ]]; then
|
|
option_chosen=copysave
|
|
${1}
|
|
elif [[ "$selected_chosen" == "$edit" ]]; then
|
|
option_chosen=edit
|
|
${1}
|
|
else
|
|
exit
|
|
fi
|
|
}
|
|
###
|
|
|
|
timer() {
|
|
if [[ $countdown -gt 10 ]]; then
|
|
notify-send -t 1000 "Taking screenshot in ${countdown} seconds"
|
|
countdown_less_10=$((countdown - 10))
|
|
sleep $countdown_less_10
|
|
countdown=10
|
|
fi
|
|
while [[ $countdown -ne 0 ]]; do
|
|
notify-send -t 1000 "Taking screenshot in ${countdown} seconds"
|
|
countdown=$((countdown - 1))
|
|
sleep 1
|
|
done
|
|
}
|
|
|
|
# take shots
|
|
takescreenshot() {
|
|
sleep 1
|
|
grimblast --notify "$option_chosen" "$option_type_screenshot" $NAME
|
|
if [ -f $HOME/$NAME ] ;then
|
|
if [ -d $screenshot_folder ] ;then
|
|
mv $HOME/$NAME $screenshot_folder/
|
|
fi
|
|
fi
|
|
}
|
|
|
|
takescreenshot_timer() {
|
|
sleep 1
|
|
timer
|
|
grimblast --notify "$option_chosen" "$option_type_screenshot" $NAME
|
|
if [ -f $HOME/$NAME ] ;then
|
|
if [ -d $screenshot_folder ] ;then
|
|
mv $HOME/$NAME $screenshot_folder/
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Execute Command
|
|
run_cmd() {
|
|
if [[ "$1" == '--opt1' ]]; then
|
|
type_screenshot_run
|
|
copy_save_editor_run "takescreenshot"
|
|
elif [[ "$1" == '--opt2' ]]; then
|
|
timer_run
|
|
type_screenshot_run
|
|
copy_save_editor_run "takescreenshot_timer"
|
|
fi
|
|
}
|
|
|
|
# Actions
|
|
chosen="$(run_rofi)"
|
|
case ${chosen} in
|
|
$option_1)
|
|
run_cmd --opt1
|
|
;;
|
|
$option_2)
|
|
run_cmd --opt2
|
|
;;
|
|
esac
|