X-Git-Url: https://git.distorted.org.uk/~mdw/skel/blobdiff_plain/d18fb0e729613723f0549d25e922d26421374142..e37dd246bdc763df5bfa57459de449aca1da0ecc:/skelrc diff --git a/skelrc b/skelrc index 045075b..67ffd1a 100644 --- a/skelrc +++ b/skelrc @@ -1,5 +1,13 @@ ;;; -*-emacs-lisp-*- +(defun skelrc-dribble (msg &rest args) + "Write MSG (a `format'-style string, with ARGS) to the debug buffer." + (let ((buffer (get-buffer "*skel-debug*"))) + (and buffer + (with-current-buffer buffer + (goto-char (point-max)) + (insert (apply #'format msg args) "\n"))))) + (defun skelrc-strip-trailing-whitespace (string) "Return STRING, but with trailing whitespace removed. @@ -54,6 +62,23 @@ its chosen major-mode before calling `skel-include'." (let ((val (assq key alist))) (and val (cdr val)))) +(defun skelrc-expand-text (text) + "Return the result of expanding TEXT in the current context. + +The context is extended with any new associations formed during +the expansion." + (let* ((alist skel-alist) + (expanded (with-temp-buffer + (let ((skel-alist alist)) + (insert text) + (goto-char (point-min)) + (skelrc-dribble "before: alist = `%s'" skel-alist) + (skel-do-fill-in) + (setq alist skel-alist) + (buffer-string))))) + (setq skel-alist alist) + expanded)) + (defun skelrc-prefix-lines (prefix lines) "Return LINES, each with PREFIX prepended to the beginning. @@ -70,6 +95,28 @@ the PREFIX is removed." (forward-line)) (buffer-string))) +(defun skelrc-prefix-and-reflow (prefix text) + "Return LINES, reflowed to `fill-column', with PREFIX at the start." + (let ((expanded-prefix (skelrc-expand-text prefix)) + (expanded-text (skelrc-expand-text text)) + (col (string-to-number (skel-lookup 'fill-column)))) + (with-temp-buffer + (let* ((fill-prefix expanded-prefix) + (paragraph-start (concat (skelrc-strip-trailing-whitespace + (regexp-quote expanded-prefix)) + "[ \t\f]*$")) + (paragraph-separate paragraph-start) + (fill-column col)) + + (insert (skelrc-prefix-lines expanded-prefix expanded-text)) + + (goto-char (point-min)) + (while (< (point) (point-max)) + (fill-paragraph) + (forward-paragraph)) + + (buffer-string))))) + (defun skelrc-component () "Return a suitable a `This file is part of ...' line." (if (assq 'full-title skel-alist)