Improve the recorder script

Make it possible to interrupt the recording area selection process
by pressing the $mod + Escape key combination.
This commit is contained in:
Alexander Oakman 2024-08-24 20:15:31 +03:00
parent 1810959292
commit d59a58120b
2 changed files with 28 additions and 12 deletions

View file

@ -16,4 +16,4 @@ mode --pango_markup $mode_recording {
$bindsym $mod+Shift+r mode $mode_recording $bindsym $mod+Shift+r mode $mode_recording
## Launch // Stop Recording Mode ## ## Launch // Stop Recording Mode ##
$bindsym $mod+Escape exec killall -s SIGINT wf-recorder $bindsym $mod+Escape exec $recorder

View file

@ -1,8 +1,4 @@
#!/bin/bash #!/bin/bash
set -x
pgrep wf-recorder
status=$?
countdown() { countdown() {
notify "Recording in 3 seconds" -t 1000 notify "Recording in 3 seconds" -t 1000
@ -19,7 +15,28 @@ notify() {
notify-send "${line}" -i /usr/share/icons/Yaru/scalable/devices/camera-video-symbolic.svg "$@" notify-send "${line}" -i /usr/share/icons/Yaru/scalable/devices/camera-video-symbolic.svg "$@"
} }
if [ $status != 0 ]; then kill_waybar() {
pkill -RTMIN+8 waybar
}
kill_recursive() {
ps -o sid= -p "$1" | xargs pkill --signal SIGINT -g
}
cleanup() {
pid=$(cat "$1")
rm "$1"
kill_waybar
kill_recursive "$pid"
exit
}
main() {
pid_file="/tmp/screenrecorder-$UID.pid"
test -e "$pid_file" && cleanup "$pid_file"
echo "$$" > "$pid_file"
target_path=$(xdg-user-dir VIDEOS) target_path=$(xdg-user-dir VIDEOS)
timestamp=$(date +'recording_%Y%m%d-%H%M%S') timestamp=$(date +'recording_%Y%m%d-%H%M%S')
@ -27,7 +44,7 @@ if [ $status != 0 ]; then
area=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | slurp) area=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | slurp)
countdown countdown
(sleep 0.5 && pkill -RTMIN+8 waybar) & (sleep 0.5 && kill_waybar) &
if [ "$1" == "-a" ]; then if [ "$1" == "-a" ]; then
file="$target_path/$timestamp.mp4" file="$target_path/$timestamp.mp4"
@ -37,8 +54,7 @@ if [ $status != 0 ]; then
wf-recorder -g "$area" -c libvpx --codec-param="qmin=0" --codec-param="qmax=25" --codec-param="crf=4" --codec-param="b:v=1M" --file="$file" wf-recorder -g "$area" -c libvpx --codec-param="qmin=0" --codec-param="qmax=25" --codec-param="crf=4" --codec-param="b:v=1M" --file="$file"
fi fi
pkill -RTMIN+8 waybar && notify "Finished recording ${file}" kill_waybar && notify "Finished recording ${file}"
else rm $pid_file
pkill --signal SIGINT wf-recorder }
pkill -RTMIN+8 waybar main "$@"
fi