mirror of
https://github.com/js0ny/dotfiles.git
synced 2025-12-21 00:33:00 +00:00
35 lines
1.5 KiB
EmacsLisp
35 lines
1.5 KiB
EmacsLisp
;;; init-beancount.el --- beancount support -*- lexical-binding: t -*-
|
|
(after! beancount
|
|
|
|
;; 1. 自动启用 outline-minor-mode
|
|
(add-hook! 'beancount-mode-hook #'outline-minor-mode)
|
|
|
|
;; 2. 设置大纲导航快捷键 (使用 Doom 的 map! 宏)
|
|
(map! :map beancount-mode-map
|
|
"C-c C-n" #'outline-next-visible-heading
|
|
"C-c C-p" #'outline-previous-visible-heading)
|
|
|
|
;; 3. 核心功能:跨文件账户补全 (这部分逻辑完全保留)
|
|
(defvar my-beancount-accounts-files nil "List of account files.")
|
|
(setq my-beancount-accounts-files
|
|
(directory-files "~/Documents/Finance/Beancount/config/" 'full (rx ".beancount" eos)))
|
|
|
|
(defun my-beancount--collect-accounts-from-files (oldfun &rest args)
|
|
"Collect all accounts from files specified in `my-beancount-accounts-files'."
|
|
(let ((keys (apply oldfun args))
|
|
(hash (make-hash-table :test 'equal)))
|
|
(dolist (key keys)
|
|
(puthash key nil hash))
|
|
;; collect accounts from files
|
|
(save-excursion
|
|
(dolist (f my-beancount-accounts-files)
|
|
;; `ignore-errors` is a good practice for file operations
|
|
(ignore-errors
|
|
(with-current-buffer (find-file-noselect f)
|
|
(goto-char (point-min))
|
|
(while (re-search-forward beancount-account-regexp nil t)
|
|
(puthash (match-string-no-properties 1) nil hash))))))
|
|
(hash-table-keys hash)))
|
|
|
|
(advice-add #'beancount-collect
|
|
:around #'my-beancount--collect-accounts-from-files))
|