From 6e56b8bb1cf94da7416b479c8560ad334a9dbfbe Mon Sep 17 00:00:00 2001 From: Benson Chu Date: Sun, 10 Aug 2025 13:57:27 -0500 Subject: [PATCH] Nice, new rx form --- lisp/my-ledger.el | 27 +++++++++++++++++++++++++++ lisp/my-rx-forms.el | 5 +++++ 2 files changed, 32 insertions(+) diff --git a/lisp/my-ledger.el b/lisp/my-ledger.el index 048a517..1144c11 100644 --- a/lisp/my-ledger.el +++ b/lisp/my-ledger.el @@ -247,6 +247,33 @@ ;; (advice-add #'ledger-reconcile ;; :before ;; #'my/ledger-reconcile-switch-to-master) + + (defface ledger-starting-monthly-face + `((t ,(list + :background "gray25" + :extend t + :inherit font-lock-comment-face + :box `(:line-width 1 :color "gray30" :style ,(if (>= emacs-major-version 30) 'released-button 'raised))))) + nil) + + (defun ledger-apply-month-separator () + (interactive) + (remove-overlays nil nil 'face 'ledger-starting-monthly-face) + (save-excursion + (beginning-of-buffer) + (while (not (eobp)) + (when (looking-at-p (rx line-start + (separated " - " + (separated "-" (= 2 digit) (= 3 alpha) (= 2 digit)) + (separated "-" (= 2 digit) (= 3 alpha) (= 2 digit))) + (+ nonl))) + (let ((ol (make-overlay (point) (line-end-position)))) + (overlay-put ol 'face 'ledger-starting-monthly-face) + (overlay-put ol 'priority 5))) + (next-line)))) + + (add-hook 'ledger-report-mode-hook + 'ledger-apply-month-separator) ) (fset 'credit_card_statement diff --git a/lisp/my-rx-forms.el b/lisp/my-rx-forms.el index 5b93399..fccbed4 100644 --- a/lisp/my-rx-forms.el +++ b/lisp/my-rx-forms.el @@ -26,5 +26,10 @@ (rx-define separated-list (sep &rest match) (seq match (* sep match))) +(rx-define separated (sep &rest matches) + (eval `(seq ,@(cdr (mapcon (lambda (x) + (list sep (car x))) + '(matches)))))) + (provide 'my-rx-forms) ;;; my-rx-forms.el ends here