From 53a447b36876b18302ac4f2d9b7cc1a6cb3407c5 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Tue, 26 May 2026 12:47:30 -0500 Subject: fix(text): compose every org src-block marker to the lambda glyph The prettify-symbols alist already mapped #+begin_src and #+end_src to a lambda, but only some markers actually rendered as one. prettify-symbols-default-compose-p decides composition from a syntax heuristic on the characters around the match, and inside org's src-block fontification that heuristic vetoed most of the markers. In todo.org only one of five composed. I added cj/prettify-compose-block-markers-p, a compose predicate that always composes the block markers (case-insensitive, since the alist carries upcased variants) and defers to the default for everything else like lambda. Every marker composes now. Tests cover the marker branch and the deferral to the default. --- tests/test-text-config.el | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tests/test-text-config.el (limited to 'tests') diff --git a/tests/test-text-config.el b/tests/test-text-config.el new file mode 100644 index 00000000..96935e1b --- /dev/null +++ b/tests/test-text-config.el @@ -0,0 +1,41 @@ +;;; test-text-config.el --- Tests for text-config -*- lexical-binding: t; -*- + +;;; Commentary: +;; Covers cj/prettify-compose-block-markers-p, the prettify-symbols compose +;; predicate that forces org src-block markers (#+begin_src / #+end_src) to +;; compose while deferring to the default predicate for everything else. + +;;; Code: + +(require 'ert) +(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory)) +(require 'text-config) + +(ert-deftest test-text-config-compose-markers-composes-begin-src () + "Normal: the begin-src marker always composes. +The bounds are arbitrary because the marker branch short-circuits before +touching the buffer." + (should (cj/prettify-compose-block-markers-p 1 12 "#+begin_src"))) + +(ert-deftest test-text-config-compose-markers-composes-end-and-upcased () + "Boundary: the end marker and the upcased variants also compose." + (should (cj/prettify-compose-block-markers-p 1 10 "#+end_src")) + (should (cj/prettify-compose-block-markers-p 1 12 "#+BEGIN_SRC")) + (should (cj/prettify-compose-block-markers-p 1 10 "#+END_SRC"))) + +(ert-deftest test-text-config-compose-markers-defers-for-non-markers () + "Error: a non-marker match defers to the default predicate. +The predicate must return exactly what `prettify-symbols-default-compose-p' +returns for a symbol that is not a block marker, so `lambda' keeps the +standard boundary check." + (with-temp-buffer + (insert "x lambda y") + (goto-char (point-min)) + (re-search-forward "lambda") + (let ((start (match-beginning 0)) + (end (match-end 0))) + (should (eq (cj/prettify-compose-block-markers-p start end "lambda") + (prettify-symbols-default-compose-p start end "lambda")))))) + +(provide 'test-text-config) +;;; test-text-config.el ends here -- cgit v1.2.3