Note: An LLM was not used in writing this article.
Sometimes you might like to record little GIF animations of your screen to demonstrate an Emacs feature you did (hey, some of you might…). For example, these. I made a wee F9 keybinding for Emacs to run this:
(defun screenshot-frame ()
"Take a screenshot of 400x200 pixels of the Emacs frame."
(interactive)
(shell-command-to-string
(concat "sleep 1; "
"import -window 0x3c000a3 "
"-crop 400x200+13+0 +repage /tmp/frames/`date +%s`.png")))Replace the window id with the window id of your target window, which
you can get with xwininfo -display :0.
I would execute screenshot-frame after running a command
or pressing a key (it sounds painful but it’s not, and it allows you to
make mistakes). The sleep call is to ensure that the buffer
has finished updating. I also disabled blink-cursor-mode.
Then to preview the animation so far I would use
animate -delay 35 /tmp/frames/*.png
If some frames were redundant I’d remove them. And then finally to write out a .gif I’d use
convert -delay 35 /tmp/frames/*.png out.gif
I found the whole thing quite convenient!