Files
dotfile/usr/local/bin/screenshot
T
2023-05-25 01:05:57 +05:45

157 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
rofi_command="rofi -theme"
time=$(date +%Y-%m-%d-%I-%M-%S)
geometry=$(xrandr | head -n1 | cut -d',' -f2 | tr -d '[:blank:],current')
dir="$(xdg-user-dir PICTURES)/Screenshots"
file="Screenshot_${time}_${geometry}.png"
timer_icon="$HOME/.config/bspwm/assets/icons/timer.svg"
clipboard_icon="$HOME/.config/bspwm/assets/icons/clipboard.svg"
[ ! -d $dir ] && mkdir -p $dir
notify_user () {
notify-send -a Clipboard -i $clipboard_icon -u low -r 699 "Clipboard" "Screenshot saved on clipboard"
if [[ -e $dir/$file ]]; then
notify-send -a Screenshot -u low -i $dir/$file "Screenshot Saved"
else
notify-send -a Screenshot -u low -i ~/.config/bspwm/assets/icons/cancel.svg "Screenshot Deleted"
fi
}
countdown () {
for sec in `seq $1 -1 1`; do
notify-send -a Clock -u normal -t 1000 -i $timer_icon "Countdown" "Taking shot in : $sec"
sleep 1
done
}
magic () {
convert $file +antialias \
\( +clone -alpha extract \
-draw 'fill black polygon 0,0 0,20 20,0 fill white circle 20,20 20,0' \
\( +clone -flip \) -compose Multiply -composite \
\( +clone -flop \) -compose Multiply -composite \
\) -alpha off -compose CopyOpacity -composite $file
convert $file \
\( +clone -background black -shadow 69x20+0+10 \) \
+swap -background none -layers merge +repage $file
}
shot () {
cd $dir && maim -u -f png $file && magic && xclip -selection clipboard -t image/png -i $file
notify_user
}
shot_window () {
cd $dir && maim -u -f png -i `xdotool getactivewindow` $file && magic && xclip -selection clipboard -t image/png -i $file
notify_user
}
shot_area () {
cd $dir && maim -u -f png -s -b 2 -c 0.35,0.55,0.85,0.25 -l $file && magic && xclip -selection clipboard -t image/png -i $file
notify_user
}
shot_3 () {
countdown '3'
sleep 1 && cd $dir && maim -u -f png $file && magic && xclip -selection clipboard -t image/png -i $file
notify_user
}
shot_10 () {
countdown '10'
sleep 1 && cd $dir && maim -u -f png $file && magic && xclip -selection clipboard -t image/png -i $file
notify_user
}
shot_timer () {
confirm=$($HOME/.config/rofi/bin/confirm 'Set a number')
confirm_config="$HOME/.config/rofi/rasi/confirm.rasi"
if [[ $confirm =~ ^[0-9]+$ ]]; then
countdown $confirm
sleep 1 && cd $dir && maim -u -f png $file && magic && xclip -selection clipboard -t image/png -i $file
notify_user
else
$rofi_command $confirm_config -e "Please input a Number"
exit
fi
}
shot_rofi () {
config="$HOME/.config/rofi/rasi/screenutils.rasi"
screen=""
area=""
window=""
inthree=""
inten=""
timer=""
options="$screen\n$area\n$window\n$inthree\n$inten\n$timer"
chosen="$(echo -e "$options" | $rofi_command $config -p 'Take Screenshot' -dmenu -selected-row 0 -theme-str 'listview {lines: 6;}')"
case $chosen in
$screen)
shot
;;
$area)
shot_area
;;
$window)
shot_window
;;
$inthree)
shot_3
;;
$inten)
shot_10
;;
$timer)
shot_timer
;;
esac
}
docs () {
echo "
Usage: screenshot [Options]
Options:
now - Take screenshot of the desktop
window - Take screenshot of the focused window
area - Take screenshot of the selected area
in5 - Take screenshot in 5 seconds
in10 - Take screenshot in 10 seconds
timer - Set a custom timer
"
}
case $1 in
shot-screen)
shot
;;
shot-window)
shot_window
;;
shot-area)
shot_area
;;
shot-in3)
shot_3
;;
shot-in10)
shot_10
;;
shot-rofi)
shot_rofi
;;
shot-timer)
shot_timer
;;
--help)
docs
;;
esac