add render script for reproducible screenshots
This commit is contained in:
35
scripts/render.sh
Normal file
35
scripts/render.sh
Normal file
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env bash
|
||||
# usage: render.sh width height [extra kitty args...]
|
||||
# useful for reproducible screenshots of terminal/vim setups
|
||||
|
||||
set -euo pipefail
|
||||
w=${1:?width}; h=${2:?height}
|
||||
out="kitty-$(date +%Y%m%d-%H%M%S).png"
|
||||
shift 2 || true
|
||||
|
||||
# spawn a kitty window w/ a mark
|
||||
title="kitty-$(date +%s%N)"
|
||||
kitty --title "$title" "$@" &
|
||||
|
||||
# create a targeted rule for the marked window and resize
|
||||
sleep 2
|
||||
swaymsg "for_window [title=\"$title\"] mark --add $title, floating enable, resize set width ${w} px height ${h} px, move position center" >/dev/null
|
||||
|
||||
# get the spawned window geometry
|
||||
sleep 2
|
||||
geom=$(swaymsg -t get_tree | jq -r --arg t "$title" '.. | select(.name? == $t) | .rect | "\(.x),\(.y) \(.width)x\(.height)"')
|
||||
wgeom=$(swaymsg -t get_tree | jq -r --arg t "$title" '.. | select(.name? == $t) | .window_rect | "\(.x),\(.y) \(.width)x\(.height)"')
|
||||
|
||||
read gx gy _ < <(awk -F'[ ,x]' '{print $1,$2}' <<<"$geom")
|
||||
read wx wy ww wh < <(awk -F'[ ,x]' '{print $1,$2,$3,$4}' <<<"$wgeom")
|
||||
inner_geom="$((gx+wx)),$((gy+wy)) ${ww}x${wh}"
|
||||
|
||||
echo title=$title
|
||||
echo geom=$geom
|
||||
echo out=$out
|
||||
|
||||
# take a screenshot
|
||||
mkdir -p "$(dirname "$out")"
|
||||
grim -g "$inner_geom" "$out"
|
||||
echo "saved: $out"
|
||||
|
||||
Reference in New Issue
Block a user