diff options
| author | Craig Jennings <c@cjennings.net> | 2026-06-24 22:38:01 -0400 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-06-24 22:38:01 -0400 |
| commit | 6ec857aec8958baa8d0c98c86ab4bbca9d2d1539 (patch) | |
| tree | 60a0ae53fe173558a6529bb74e4f7de5c930df64 | |
| parent | 134a530916f24a288e8b4755f336b1820868d4b4 (diff) | |
| download | dotemacs-6ec857aec8958baa8d0c98c86ab4bbca9d2d1539.tar.gz dotemacs-6ec857aec8958baa8d0c98c86ab4bbca9d2d1539.zip | |
feat(ledger): un-orphan ledger-config and rewrite clean-on-save
ledger-config.el was never required in init.el, so the whole module was dead code. I added the require (which installs ledger-mode, flycheck-ledger, and company-ledger via the global ensure) and rewrote the clean-on-save: instead of rebinding C-x C-s to a clean-then-save command, a buffer-local before-save-hook tidies the buffer on every save path, gated by cj/ledger-clean-on-save. The reports shell out to the ledger CLI, so a load-time check now warns when it isn't on PATH. Added ledger-highlight-xact-under-point.
| -rw-r--r-- | init.el | 1 | ||||
| -rw-r--r-- | modules/ledger-config.el | 40 |
2 files changed, 27 insertions, 14 deletions
@@ -120,6 +120,7 @@ (require 'prog-webdev) (require 'prog-json) (require 'prog-yaml) +(require 'ledger-config) ;; plain-text accounting (ledger format) ;; ---------------------------------- Org Mode --------------------------------- diff --git a/modules/ledger-config.el b/modules/ledger-config.el index 5b2712b57..018601043 100644 --- a/modules/ledger-config.el +++ b/modules/ledger-config.el @@ -2,15 +2,25 @@ ;; author Craig Jennings <c@cjennings.net> ;;; Commentary: +;; Editing support for ledger-format plain-text accounting files: ledger-mode, +;; flycheck linting, company completion, clean-on-save, and a small report set. +;; The reports and reconcile shell out to the `ledger' CLI; a load-time check +;; warns when it is missing rather than letting a report fail cryptically. ;;; Code: ;; ------------------------------- Declarations -------------------------------- (declare-function ledger-mode-clean-buffer "ledger-mode") +(declare-function cj/executable-find-or-warn "system-lib") (defvar ledger-mode-map) (defvar company-backends) +(defcustom cj/ledger-clean-on-save t + "When non-nil, tidy a ledger buffer with `ledger-mode-clean-buffer' before save." + :type 'boolean + :group 'ledger) + ;; -------------------------------- Ledger Mode -------------------------------- ;; edit files in ledger format @@ -19,36 +29,38 @@ "\\.ledger\\'" "\\.journal\\'") :preface - (defun cj/ledger-save () - "Automatically clean the ledger buffer at each save." - (interactive) - (save-excursion - (when (buffer-modified-p) - (with-demoted-errors "Error cleaning ledger buffer: %S" - (ledger-mode-clean-buffer)) - (save-buffer)))) - :bind - (:map ledger-mode-map - ("C-x C-s" . cj/ledger-save)) + (defun cj/ledger--clean-before-save () + "Tidy the ledger buffer before save when `cj/ledger-clean-on-save' is set. +Errors are demoted so a malformed buffer still saves." + (when cj/ledger-clean-on-save + (with-demoted-errors "Error cleaning ledger buffer: %S" + (ledger-mode-clean-buffer)))) + (defun cj/ledger--enable-clean-on-save () + "Install the clean-on-save hook buffer-locally so it fires on every save path." + (add-hook 'before-save-hook #'cj/ledger--clean-before-save nil t)) + :hook (ledger-mode . cj/ledger--enable-clean-on-save) :custom (ledger-clear-whole-transactions t) (ledger-reconcile-default-commodity "$") (ledger-report-use-header-line nil) + (ledger-highlight-xact-under-point t) (ledger-reports '(("bal" "%(binary) --strict -f %(ledger-file) bal") ("bal this month" "%(binary) --strict -f %(ledger-file) bal -p %(month) -S amount") ("bal this year" "%(binary) --strict -f %(ledger-file) bal -p 'this year'") ("net worth" "%(binary) --strict -f %(ledger-file) bal Assets Liabilities") - ("account" "%(binary) --strict -f %(ledger-file) reg %(account)")))) + ("account" "%(binary) --strict -f %(ledger-file) reg %(account)"))) + :config + (cj/executable-find-or-warn "ledger" 'ledger-mode)) ;; ------------------------------ Flycheck Ledger ------------------------------ -;; syntax and unbalanced transaction linting +;; syntax and unbalanced-transaction linting (use-package flycheck-ledger :after ledger-mode) ;; ------------------------------- Company Ledger ------------------------------ -;; autocompletion for ledger +;; account/payee autocompletion for ledger (use-package company-ledger :after (company ledger-mode) |
