From 98e32d2ff22cba1e60caf6a252eee0d38f26f736 Mon Sep 17 00:00:00 2001 From: Robin Jarry Date: Sun, 15 Jan 2023 23:27:29 +0100 Subject: filters: rewrite colorize in c Since its introduction, we had multiple issues with the colorize awk script with regard to non-GNU awk compatibility. Also, this script is standalone and the color theme must be hard coded into it. Reading from an external configuration file (aerc's styleset) from a non-GNU awk is close to impossible (and even far from trivial with GNU awk). Rewrite the builtin colorize filter in C to allow getting the color theme from aerc's active styleset. The theme is configured using the existing styleset syntax and attributes under a separate [viewer] section (see examples and man page). Export the active styleset file path to AERC_STYLESET env var when invoking the filter command so that colorize can access it and use it. I have tested compilation (with clang-analyzer and gcc -fanalyzer) and basic operation on FreeBSD, Fedora (glibc) and Alpine (muslibc). More tests would probably be required on MacOSX and older Linux distros. I also added test vectors to give some confidence that this works as expected. The execution with these vectors passed valgrind --leak-check=full without errors. NB: the default theme has changed to be more minimal. Sample stylesets have more colorful examples. The awk -v theme=xxx option is no longer supported. usage: colorize [-h] [-s FILE] [-f FILE] options: -h show this help message -s FILE use styleset file (default $AERC_STYLESET) -f FILE read from filename (default stdin) Signed-off-by: Robin Jarry Tested-by: Bence Ferdinandy Acked-by: Moritz Poldrack --- Makefile | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index fcb80a46..3ac53e0a 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ DOCS := \ aerc-templates.7 \ aerc-stylesets.7 -all: aerc wrap $(DOCS) +all: aerc wrap colorize $(DOCS) build_cmd:=$(GO) build $(BUILD_OPTS) $(GOFLAGS) -ldflags "$(GO_LDFLAGS)" -o aerc @@ -60,6 +60,9 @@ CFLAGS?=-O2 -g wrap: filters/wrap.c $(CC) $(CFLAGS) $(LDFLAGS) -o wrap filters/wrap.c +colorize: filters/colorize.c + $(CC) $(CFLAGS) $(LDFLAGS) -o colorize filters/colorize.c + .PHONY: dev dev: $(MAKE) aerc BUILD_OPTS="-trimpath -race" @@ -86,7 +89,7 @@ vulncheck: $(GO) run golang.org/x/vuln/cmd/govulncheck@latest ./... .PHONY: tests -tests: wrap +tests: wrap colorize $(GO) test $(GOFLAGS) ./... filters/test.sh @@ -113,9 +116,9 @@ doc: $(DOCS) RM?=rm -f clean: - $(RM) $(DOCS) aerc wrap + $(RM) $(DOCS) aerc wrap colorize -install: $(DOCS) aerc wrap +install: $(DOCS) aerc wrap colorize mkdir -m755 -p $(DESTDIR)$(BINDIR) $(DESTDIR)$(MANDIR)/man1 $(DESTDIR)$(MANDIR)/man5 $(DESTDIR)$(MANDIR)/man7 \ $(DESTDIR)$(SHAREDIR) $(DESTDIR)$(SHAREDIR)/filters $(DESTDIR)$(SHAREDIR)/templates $(DESTDIR)$(SHAREDIR)/stylesets \ $(DESTDIR)$(PREFIX)/share/applications $(DESTDIR)$(LIBEXECDIR)/filters @@ -137,12 +140,12 @@ install: $(DOCS) aerc wrap install -m644 config/aerc.conf $(DESTDIR)$(SHAREDIR)/aerc.conf install -m644 config/binds.conf $(DESTDIR)$(SHAREDIR)/binds.conf install -m755 filters/calendar $(DESTDIR)$(LIBEXECDIR)/filters/calendar - install -m755 filters/colorize $(DESTDIR)$(LIBEXECDIR)/filters/colorize install -m755 filters/hldiff $(DESTDIR)$(LIBEXECDIR)/filters/hldiff install -m755 filters/html $(DESTDIR)$(LIBEXECDIR)/filters/html install -m755 filters/html-unsafe $(DESTDIR)$(LIBEXECDIR)/filters/html-unsafe install -m755 filters/plaintext $(DESTDIR)$(LIBEXECDIR)/filters/plaintext install -m755 filters/show-ics-details.py $(DESTDIR)$(LIBEXECDIR)/filters/show-ics-details.py + install -m755 colorize $(DESTDIR)$(LIBEXECDIR)/filters/colorize install -m755 wrap $(DESTDIR)$(LIBEXECDIR)/filters/wrap install -m644 templates/new_message $(DESTDIR)$(SHAREDIR)/templates/new_message install -m644 templates/quoted_reply $(DESTDIR)$(SHAREDIR)/templates/quoted_reply -- cgit