From 84f251ee6e829d33a4f29aa4043924023a378724 Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Sat, 18 Apr 2026 05:59:07 +0100 Subject: Re-format --- format.el | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 format.el (limited to 'format.el') diff --git a/format.el b/format.el new file mode 100644 index 0000000..48c2df6 --- /dev/null +++ b/format.el @@ -0,0 +1,50 @@ +;;; format.el — batch scheme formatter for downstroke. +;;; +;;; Reformats every tracked .scm file using `indent-region` under +;;; `scheme-mode`, with the user's full Emacs init loaded so the indent +;;; rules match exactly what interactive Emacs does (notably the +;;; geiser-chicken / scheme-mode `module` indent). +;;; +;;; Usage (from the Makefile): +;;; make format +;;; +;;; Or directly: +;;; emacs --batch \ +;;; --init-directory=$HOME/.emacs-perso \ +;;; --eval "(add-to-list 'load-path (expand-file-name \"emacs-substrate/\" \"~/.emacs-perso\"))" \ +;;; -l ~/.emacs-perso/init.el \ +;;; -l format.el \ +;;; --eval "(downstroke-format-tracked-scm-files)" + +(require 'subr-x) + +(defun downstroke--project-root () + "Directory containing this script — the downstroke project root." + (file-name-directory (or load-file-name buffer-file-name default-directory))) + +(defun downstroke--tracked-scm-files () + "Return a list of all .scm files tracked by git in the project." + (let ((default-directory (downstroke--project-root))) + (split-string + (string-trim + (shell-command-to-string "git ls-files -- '*.scm'")) + "\n" t))) + +(defun downstroke-format-file (path) + "Reformat a single .scm file with `indent-region'." + (let ((inhibit-message t)) + (find-file path) + (scheme-mode) + (indent-region (point-min) (point-max)) + (save-buffer) + (kill-buffer))) + +(defun downstroke-format-tracked-scm-files () + "Reformat every tracked .scm file in the project." + (let ((default-directory (downstroke--project-root)) + (files (downstroke--tracked-scm-files))) + (message "downstroke-format: reindenting %d files" (length files)) + (dolist (p files) + (message "indent: %s" p) + (downstroke-format-file p)) + (message "downstroke-format: done"))) -- cgit v1.2.3