diff options
| author | Craig Jennings <c@cjennings.net> | 2024-04-07 13:41:34 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2024-04-07 13:41:34 -0500 |
| commit | 754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 (patch) | |
| tree | f1190704f78f04a2b0b4c977d20fe96a828377f1 /modules/ledger-config.el | |
new repository
Diffstat (limited to 'modules/ledger-config.el')
| -rw-r--r-- | modules/ledger-config.el | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/modules/ledger-config.el b/modules/ledger-config.el new file mode 100644 index 00000000..21f7fb81 --- /dev/null +++ b/modules/ledger-config.el @@ -0,0 +1,74 @@ +;;; ledger-config.el --- Ledger Configuration -*- lexical-binding: t; -*- + +;;; Commentary: + +;; Use C-c ? in ledger mode for discoverability. + +;; Unlike Mu4e and Elfeed (with Elfeed dashboard), there's no landing page for +;; Ledger. You're thrown immediately into your financial data file in edit mode. +;; Ok, but might be frightening for someone learning how to use Ledger. The +;; added hydra is intended to show what actions are available, as well as their +;; key bindings. + + +;; -------------------------------- Ledger Mode -------------------------------- +;; edit files in ledger format + +(use-package ledger-mode + :mode ("\\.dat\\'" + "\\.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 (ledger-mode-clean-buffer)) + (save-buffer)))) + :bind + (:map ledger-mode-map + ("C-x C-s" . cj/ledger-save)) + :custom + (ledger-clear-whole-transactions t) + (ledger-reconcile-default-commodity "$") + (ledger-report-use-header-line nil) + (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)")))) + +;; === Ledger Hydra === +;; menu available while in ledger-mode for common ledger commands + +(with-eval-after-load 'ledger-mode + (defhydra hydra-ledger (:color teal :timeout 10 :hint nil) + "Ledger common commands menu" + ("r" ledger-report "report" :column "report") + ("a" ledger-add-transaction "add transaction" :column "edit") + ("R" ledger-sort-region "sort region" :column "edit") + ("A" ledger-sort-buffer "sort all" :column "edit")) + + (defun ledger-mode-hook-hydra-setup () + "Create ledger hydra/menu keybinding when entering ledger mode." + (local-set-key (kbd "C-c ?") 'hydra-ledger/body)) + (add-hook 'ledger-mode-hook 'ledger-mode-hook-hydra-setup)) + +;; ------------------------------ Flycheck Ledger ------------------------------ +;; syntax and unbalanced transaction linting + +(use-package flycheck-ledger + :after ledger-mode) + +;; ------------------------------- Company Ledger ------------------------------ +;; autocompletion for ledger + +(use-package company-ledger + :after (company ledger-mode) + :config + (add-to-list 'company-backends 'company-ledger)) + +(provide 'ledger-config) +;;; ledger-config.el ends here. |
