Live-editing tools

Tags:

I really like live-editing documents. Interactively seeing the results of your edits makes editing more fun. For tools made by others, this would mean WYSIWYG, but for tools made by (and for) myself, I prefer the approach of editing a text file and having the conversion process kick off automatically on every file save.

For some reason, I mostly prefer editing text in a plain/small editor as ASCII. My markup needs are usually restricted to bold and italics, with a sprinkling of images and links. I don't have particular layout needs - most of that is covered by a template.

The main idea is to have two programs, one program for editing (commonly, a text editor) and one program for converting and displaying the rendered file. Instead of having a program that does the display and editing for one or more file formats, this separation allows me to use the convenient text editor that I've customized to my liking instead of a built-in text editor. It also allows me to add arbitrary intermediate steps to convert from the source to the display.

This idea is nothing new - the Emacs Flymake mode does recompilation (and other recreation) in the background whenever a source file changes as well.

With File::ChangeNotify ( and Linux::Inotify2 on Linux, respectively File::ChangeNotify::ReadDirectoryChanges for Windows, writing such tools that auto-update the viewer whenever the source file changes is really easy.

One of the programs that implement this idea is live-edit.pl.

live-edit.pl

This program runs make whenever a file in a given directory or its subdirectories changes. The Makefile should contain the rules to regenerate the interesting content. The default rules are only for converting LaTeX files into PDF:

# This is the default Makefile to be used by the asset reloader
# if no Makefile is found in the current directory

OPEN=xdg-open
MAYBE_OPEN=perl /home/corion/Projekte/App-LiveEdit/scripts/maybe-open.pl

.PHONY: all

all: .pdf

.pdf.tex:
    pdflatex -interaction=batchmode "$<"
    $(MAYBE_OPEN) "$@"

make solves the problem backwards, given a file that I want, regenerate everything intermediate. live-edit.pl solves the problem forwards, given a file that changed, regenerate everything that depends on it. Maybe live-edit.pl should be named ekam instead.

maybe-open.pl - this is an offshoot program that opens a file using xdg-open if no process is running with the file name on its command line. Highly convenient for launching a .pdf file once in its viewer.