2017-09-08 21:49:12 +02:00
|
|
|
|
;;; lang/ledger/config.el -*- lexical-binding: t; -*-
|
|
|
|
|
|
2020-02-08 20:53:50 -05:00
|
|
|
|
(use-package! ledger-mode
|
|
|
|
|
:defer t
|
|
|
|
|
:init
|
|
|
|
|
(setq ledger-clear-whole-transactions 1
|
|
|
|
|
ledger-mode-should-check-version nil)
|
|
|
|
|
|
2021-03-25 13:48:05 -04:00
|
|
|
|
(add-hook 'ledger-mode-hook #'outline-minor-mode)
|
|
|
|
|
|
2020-07-14 22:57:20 +02:00
|
|
|
|
(set-company-backend! 'ledger-mode 'company-capf)
|
2021-03-27 15:23:46 -04:00
|
|
|
|
(set-popup-rules!
|
|
|
|
|
'(("^\\*Ledger Report" :size 0.5 :quit 'other :ttl 0)
|
|
|
|
|
("^\\*Ledger Error" :quit t :ttl 0)))
|
2020-07-14 22:57:20 +02:00
|
|
|
|
|
2021-08-04 01:18:06 -04:00
|
|
|
|
(defadvice! +ledger--fail-gracefully-if-absent-a (fn)
|
2020-02-08 20:53:50 -05:00
|
|
|
|
"Fail gracefully if ledger binary isn't available."
|
|
|
|
|
:around #'ledger-check-version
|
|
|
|
|
(if (executable-find ledger-binary-path)
|
2021-08-04 01:18:06 -04:00
|
|
|
|
(funcall fn)
|
2020-02-08 20:53:50 -05:00
|
|
|
|
(message "Couldn't find '%s' executable" ledger-binary-path)))
|
|
|
|
|
|
2021-03-25 13:48:24 -04:00
|
|
|
|
;; `ledger-mode' lacks imenu support out of the box, so we gie it some. At
|
|
|
|
|
;; least to make jumping to outline headings or transactions easier.
|
|
|
|
|
(setq-hook! 'ledger-mode-hook
|
|
|
|
|
imenu-generic-expression
|
|
|
|
|
`((nil ,(concat
|
|
|
|
|
"^[\\*]+[ \t]+\\([^\n\r]+\\)\\|" ; outline headings
|
|
|
|
|
"^[0-9]\\{4\\}[-/.][0-9]\\{2\\}[-/.][0-9]\\{2\\}[ \t]+[^\n]+") ; transactions
|
|
|
|
|
0)))
|
|
|
|
|
|
2020-02-08 20:53:50 -05:00
|
|
|
|
(map! :map ledger-report-mode-map
|
|
|
|
|
"C-c C-c" #'ledger-report-edit-report
|
|
|
|
|
"C-c C-r" #'ledger-report-redo
|
|
|
|
|
"C-c C-s" #'ledger-report-save
|
|
|
|
|
:map ledger-reconcile-mode-map
|
|
|
|
|
[tab] #'ledger-reconcile-toggle))
|
2018-08-20 23:33:07 +02:00
|
|
|
|
|
2017-09-08 21:49:12 +02:00
|
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
|
(use-package! flycheck-ledger
|
2020-01-14 03:04:26 -05:00
|
|
|
|
:when (featurep! :checkers syntax)
|
2018-06-21 15:54:36 +02:00
|
|
|
|
:after ledger-mode)
|
2018-08-20 23:33:45 +02:00
|
|
|
|
|
|
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
|
(use-package! evil-ledger
|
2019-04-21 19:59:44 -04:00
|
|
|
|
:when (featurep! :editor evil +everywhere)
|
2018-08-22 02:35:55 +02:00
|
|
|
|
:hook (ledger-mode . evil-ledger-mode)
|
|
|
|
|
:config
|
|
|
|
|
(set-evil-initial-state! 'ledger-report-mode 'normal)
|
2021-03-27 15:47:36 -04:00
|
|
|
|
(map! (:map ledger-report-mode-map
|
|
|
|
|
:n "q" #'ledger-report-quit
|
|
|
|
|
:n "RET" #'ledger-report-edit-report
|
|
|
|
|
:n "gd" #'ledger-report-visit-source
|
|
|
|
|
:n "gr" #'ledger-report-redo
|
|
|
|
|
;; This is redundant, but helps `substitute-command-keys' find them
|
|
|
|
|
;; below, in `+ledger--fix-key-help-a'.
|
|
|
|
|
:n "C-d" #'evil-scroll-down
|
|
|
|
|
:n "C-u" #'evil-scroll-up)
|
|
|
|
|
(:map ledger-mode-map
|
|
|
|
|
:m "]]" #'ledger-navigate-next-xact-or-directive
|
|
|
|
|
:m "[[" #'ledger-navigate-prev-xact-or-directive)
|
2018-12-23 23:54:27 -05:00
|
|
|
|
|
2021-03-27 15:47:36 -04:00
|
|
|
|
(:localleader
|
|
|
|
|
:map ledger-mode-map
|
|
|
|
|
"a" #'ledger-add-transaction
|
|
|
|
|
"e" #'ledger-post-edit-amount
|
|
|
|
|
"t" #'ledger-toggle-current
|
|
|
|
|
"d" #'ledger-delete-current-transaction
|
|
|
|
|
"r" #'ledger-report
|
|
|
|
|
"R" #'ledger-reconcile
|
|
|
|
|
"s" #'ledger-sort-region
|
|
|
|
|
"S" #'ledger-schedule-upcoming
|
|
|
|
|
(:prefix "g"
|
2018-12-23 23:54:27 -05:00
|
|
|
|
"s" #'ledger-display-ledger-stats
|
2021-03-27 15:47:36 -04:00
|
|
|
|
"b" #'ledger-display-balance-at-point)))
|
2019-09-13 21:59:03 -04:00
|
|
|
|
|
2021-08-04 01:18:06 -04:00
|
|
|
|
(defadvice! +ledger--fix-key-help-a (fn &rest args)
|
2019-09-13 21:59:03 -04:00
|
|
|
|
"Fix inaccurate keybind message."
|
2021-03-27 15:47:36 -04:00
|
|
|
|
:around #'ledger-report
|
2021-08-04 01:18:06 -04:00
|
|
|
|
(quiet! (apply fn args))
|
2021-03-27 15:47:36 -04:00
|
|
|
|
(with-current-buffer (get-buffer ledger-report-buffer-name)
|
|
|
|
|
(setq header-line-format
|
|
|
|
|
(substitute-command-keys
|
|
|
|
|
(concat "\\[ledger-report-quit] to quit; "
|
|
|
|
|
"\\[ledger-report-redo] to redo; "
|
|
|
|
|
"\\[ledger-report-edit-report] to edit; "
|
|
|
|
|
"\\[ledger-report-save] to save; "
|
|
|
|
|
"\\[evil-scroll-up] and \\[evil-scroll-down] to scroll"))))))
|