Browse Source

cleanup

master
Marc 1 year ago
parent
commit
21f183f35a
1 changed files with 4 additions and 141 deletions
  1. 145
      user-global/elisp/beancount.el

145
user-global/elisp/beancount.el

@ -3,7 +3,6 @@
;; A humble try to port leder-mode to beancount ;; A humble try to port leder-mode to beancount
;;; Code: ;;; Code:
;(require 'beancount-regex)
(require 'font-lock) (require 'font-lock)
(require 'company) ; for company-mode (require 'company) ; for company-mode
@ -93,11 +92,6 @@
"[:alnum:]-_:" "[:alnum:]-_:"
"Allowed account characters.") "Allowed account characters.")
;beancount-account-regexp original
;"\\(?:A\\(?:ktiva\\|ssets\\|ufwendungen\\)\\|E\\(?:igenkapital\\|quity\\|rtraege\\|xpenses\\)\\|Income\\|Liabilities\\|Verbindlichkeiten\\)\\(?::[[:upper:]][[:alnum:]-_]+\\)+"
;"\\(?:A\\(?:ktiva\\|ssets\\|ufwendungen\\)\\|E\\(?:igenkapital\\|quity\\|rtraege\\|xpenses\\)\\|Income\\|Liabilities\\|Verbindlichkeiten\\)\\(?::[[:upper:]][[:alnum:]-_]+\\)+"
; ^[\s\{2\}][Aufwendungen\|Aktiva\[:[:alnum:]-_]+
(defconst beancount-account-regexp (defconst beancount-account-regexp
"^[ ][ ][a-z]+" "^[ ][ ][a-z]+"
; (concat (regexp-opt beancount-account-categories) ; (concat (regexp-opt beancount-account-categories)
@ -118,10 +112,6 @@
(defconst beancount-date-regexp (defconst beancount-date-regexp
"^[12][901][0-9]\\{2\\}-\\(0[1-9]\\|1[012]\\)-\\([012][0-9]\\|3[01]\\)" "^[12][901][0-9]\\{2\\}-\\(0[1-9]\\|1[012]\\)-\\([012][0-9]\\|3[01]\\)"
;"\\(^[12][901][0-9]\\{2\\}-\\(0[1-9]\\|1[012]\\)-\\([012][0-9]\\|3[01]\\)\\)"
;"\\(^[12][901][0-9]\\{2\\}-\\(0[1-9]\\|1[012]\\)-\\(\\([012][0-9]\\)\\(\\|3[01]\\)\\)\\)"
; "^[12][901][0-9]\\{2\\}-0[1-9]1[012]-[012][0-9]3[01]"
; "^[12][901][0-9]\\{2\\}-\\(\\(0[1-9]\\)\\|\\(1[012]\\)\\)-\\(\\([012][0-9]\\)\\|\\(3[01]\\)\\)"
"Regular expression for dates.") "Regular expression for dates.")
(defconst beancount-number-regexp (defconst beancount-number-regexp
@ -196,8 +186,6 @@
"\\)$" ; the whole regex looks from the right side of the line "\\)$" ; the whole regex looks from the right side of the line
)) ))
; "^[12][901][0-9]\\{2\\}-\\(0[1-9]\\|1[012]\\)-\\([012][0-9]\\|3[01]\\)\\(\\s-+[\\*!]\\)\\s-+\"[^\"]*\"\\s-+\"[^\"]*\"\\(?1:\\s-+#\\)"
; "^[12][901][0-9]\\{2\\}-\\(0[1-9]\\|1[012]\\)-\\([012][0-9]\\|3[01]\\)\\(\\s-+[\\*!]\\)\\s-+\"[^\"\n]*\"\\s-+\"[^\"\n]*\"\\(?1:\\s-+#\\)"
(defconst beancount-prefix-for-tag-completion-regex (defconst beancount-prefix-for-tag-completion-regex
(concat ;"\\(" (concat ;"\\("
beancount-date-and-status-regex beancount-date-and-status-regex
@ -211,8 +199,6 @@
"\\(?1:" "\\(?1:"
"[^\"\n]*" "[^\"\n]*"
"\\)" "\\)"
;"\\)$" ; the whole regex looks from the right side of the line
)) ))
(defconst beancount-comments-regex (defconst beancount-comments-regex
@ -371,10 +357,8 @@ This is a cache of the value computed by `beancount-get-accounts'.")
(interactive) (interactive)
(setq beancount-accounts (beancount-get-accounts-in-buffer)) ;-new (setq beancount-accounts (beancount-get-accounts-in-buffer)) ;-new
(pcomplete-uniqify-list (nreverse beancount-accounts)) (pcomplete-uniqify-list (nreverse beancount-accounts))
;; (setq beancount-accounts (beancount-get-accounts))
(message "Accounts updated.")) (message "Accounts updated."))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Navigation ;; Navigation
@ -419,12 +403,6 @@ Leave point at the beginning of the thing under point.")
"Replace trailing whitespaces in STR." "Replace trailing whitespaces in STR."
(replace-regexp-in-string "[ \t]*$" "" str)) (replace-regexp-in-string "[ \t]*$" "" str))
;; (defun beancount-fully-complete-xact ()
;; "Completes a transaction if there is another matching payee in the buffer."
;; (interactive)
;; (let* ((name (beancount-trim-trailing-whitespace (caar (beancount-parse-arguments))))
;; xacf)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Functions for external programs ;; Functions for external programs
@ -475,6 +453,7 @@ Only useful if you have not installed Beancount properly in your PATH")
(start-process "termx" nil beancount-terminal-name "-e" beancount-fava-exec beancount-filename-main) (start-process "termx" nil beancount-terminal-name "-e" beancount-fava-exec beancount-filename-main)
(sleep-for 0.5) ; necessary to prevent an error (sleep-for 0.5) ; necessary to prevent an error
(browse-url "127.0.0.1:5000")) (browse-url "127.0.0.1:5000"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Completions ;; Completions
@ -500,8 +479,6 @@ Only useful if you have not installed Beancount properly in your PATH")
"^[0-9- *]*\"\\(?1:.*?\\)\" \"\\(?2:.*?\\)\"" nil t) ; matches are in brackets "^[0-9- *]*\"\\(?1:.*?\\)\" \"\\(?2:.*?\\)\"" nil t) ; matches are in brackets
(setq payees-list (cons (match-string-no-properties 1) ; get first match, generally the payee (setq payees-list (cons (match-string-no-properties 1) ; get first match, generally the payee
payees-list)))) payees-list))))
; (setq payees-list (cons (match-string-no-properties 2) ; get second match, generally a description
; payees-list))))
(pcomplete-uniquify-list (nreverse payees-list)))) (pcomplete-uniquify-list (nreverse payees-list))))
(defun beancount-get-payee-text-in-buffer () (defun beancount-get-payee-text-in-buffer ()
@ -582,18 +559,6 @@ Only useful if you have not installed Beancount properly in your PATH")
'("Beancount" '("Beancount"
["Customize Ledger Mode" (lambda () (interactive) (customize-group 'beanmode))])) ["Customize Ledger Mode" (lambda () (interactive) (customize-group 'beanmode))]))
;; (defun beancount-get-accounts (&optional string)
;; "Return list of account names with STRING infix present.
;; STRING can be multiple words separated by a space."
;; (let* ((accounts-string (shell-command-to-string
;; (concat "bean-query -q -f csv "
;; "/home/marc/Archiv/Finanzen/transactions_ingdiba.beancount "
;; "'SELECT DISTINCT account ORDER BY ACCOUNT ASC'")))
;; (accounts-list (split-string accounts-string)))
;; accounts-list))
(defvar beancount-accounts-cache nil (defvar beancount-accounts-cache nil
"List of accounts cached for capf.") "List of accounts cached for capf.")
@ -636,14 +601,6 @@ Only useful if you have not installed Beancount properly in your PATH")
(setq beancount-tags-cache (beancount-get-tags-in-buffer)) (setq beancount-tags-cache (beancount-get-tags-in-buffer))
(pcomplete-uniquify-list (nreverse beancount-tags-cache)) (pcomplete-uniquify-list (nreverse beancount-tags-cache))
(message "Tags updated.")) (message "Tags updated."))
;; first test for conditional completions
;; e.g. only account names when completion is after a date
;; (defun beancount-company-candidates (prefix)
;; "Check what PREFIX does."
;; (let* (accounts (beancount-accounts-cache))
;; accounts))
;;################################## ;;##################################
;;stuff from https://github.com/debanjum/company-ledger/blob/master/company-ledger.el ;;stuff from https://github.com/debanjum/company-ledger/blob/master/company-ledger.el
@ -680,30 +637,6 @@ Only useful if you have not installed Beancount properly in your PATH")
(eolp) (eolp)
(eobp)))) (eobp))))
;; hier werden Vorschläge zeitlich rückwärts gemacht (jüngste Einträge zuerst)!
;;;###autoload
(defun company-beancountGIT (command &optional arg &rest ignored)
"Fuzzy company back-end for ledger, beancount and other ledger-like modes.
Provide completion info based on COMMAND and ARG. IGNORED, not used."
(interactive (list 'interactive))
(cl-case command
(interactive (company-begin-backend 'company-beancount))
(`interactive (company-begin-backend 'company-beancount))
(`prefix (and (eq major-mode 'beancount-mode)
(company-grab-symbol)))
; (prefix (and (or (bound-and-true-p beancount-mode)
; (derived-mode-p 'ledger-mode))
; (company-ledger--next-line-empty-p)
; (thing-at-point 'line t)))
(candidates
(cl-remove-if-not
(lambda (c) (company-ledger--fuzzy-word-match arg c))
(company-ledger--get-all-postings)))
(sorted t)))
;;NEW;;;;;;;;;;;;;
;;##################################### ;;#####################################
(defvar beancount-accounts nil (defvar beancount-accounts nil
"A list of accounts available in buffer.") "A list of accounts available in buffer.")
@ -720,8 +653,8 @@ Provide completion info based on COMMAND and ARG. IGNORED, not used."
"A regular expression to match account names.") "A regular expression to match account names.")
(defun beancount-collect (regexp n &optional files) (defun beancount-collect (regexp n &optional files)
"Return a unique list of REGEXP group N in the current buffer. Optionally
also look at data in selected files."
"Return a unique list of REGEXP group N in the current buffer.
Optionally also look at data in selected FILES."
(let ((pos (point))) (let ((pos (point)))
(save-excursion (save-excursion
(save-match-data (save-match-data
@ -756,9 +689,6 @@ also look at data in selected files."
(and (looking-at regexp) (and (looking-at regexp)
(>= pos (match-beginning n)) (>= pos (match-beginning n))
(<= pos (match-end n)))) (<= pos (match-end n))))
;;#####################################
;2022-12-12 ! "Ne"
;;;###autoload ;;;###autoload
(defun beancount-completion-at-point () (defun beancount-completion-at-point ()
@ -879,71 +809,6 @@ also look at data in selected files."
;;end stuff ;;end stuff
;;################################## ;;##################################
;;;###autoload
(defun company-beancount (command &optional arg &rest ignored)
"Company backend for 'beancount-mode'.
COMMAND, ARG, and IGNORED the regular meanings."
(interactive (list 'interactive))
(message arg)
(cl-case command
(`interactive (company-begin-backend 'company-beancount))
(`prefix (and (eq major-mode 'beancount-mode)
(company-grab-symbol)))
(`candidates
(cond
;; if line ends with date and status, at max one quoted text, and an open quote, offer payees and explainations
((string-match-p beancount-valid-prefix-for-payee-completion-regex (thing-at-point 'line))
(delq nil
(mapcar (lambda (c)
; (and (string-prefix-p (substring arg 1) c) c)
(and (string-prefix-p arg c) c))
beancount-payees-cache)))
;; if line starts with date, offer directives
((string-match-p beancount-valid-prefix-for-directives-regex (thing-at-point 'line))
(delq nil
(mapcar (lambda (c)
(and (string-prefix-p arg c) c))
beancount-timestamped-directive-names)))
;; if line starts with date, status and payees, offer tags
((string-match-p beancount-valid-prefix-for-tag-completion-regex (thing-at-point 'line))
(delq nil
(mapcar (lambda (c)
(and (string-prefix-p (substring arg 1) c) c))
beancount-tags-cache)))
;; if line starts with accounts and amounts, offer commodities
((string-match-p (concat "^[ ]+[A-Za-z0-9-_:]+[ ]+[-]?[0-9,.]+[ ]+" beancount-currency-regexp) (thing-at-point 'line))
(delq nil
(mapcar (lambda (c)
(and (string-prefix-p arg c) c))
beancount-commodities-cache)))
;; if line is empty, offer accounts
((or (string-match-p "^\\s-+" (thing-at-point 'line))
;; if the preceding text is allowed before an account, offer accounts
;; TODO: Not yet working!
(string-match-p beancount-timestamped-accounts-regexp (thing-at-point 'line)))
(delq nil
(mapcar (lambda (c)
(message c)
(and (string-prefix-p arg c) c))
beancount-accounts-cache)))
;; new function for whole transactions!
;; source https://github.com/debanjum/company-ledger/blob/master/company-ledger.el
;; these suggestions go when there are no matches for the stuff before
;;TODO matches only work for first word.
;;TODO reverse list, newest one first
((delq nil
(cl-remove-if-not
(lambda (c) (company-ledger--fuzzy-word-match arg c))
(company-ledger--get-all-postings))))
; (cl-remove-if-not
; (lambda (c) (beancount-company--fuzzy-word-match arg c))
; (beancount-get-transactions-in-buffer))))
))
;;erst hier wird Reihenfolge umgekehrt (jüngste zuerst)!
(sorted t)))
;;;###autoload ;;;###autoload
(define-derived-mode beancount-mode text-mode "Beancount" (define-derived-mode beancount-mode text-mode "Beancount"
"A mode for editing beancount files. "A mode for editing beancount files.
@ -973,7 +838,5 @@ COMMAND, ARG, and IGNORED the regular meanings."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) )
(provide 'beancount) (provide 'beancount)
;;; beancount-mode.el ends here
;;; beancount.el ends here
Loading…
Cancel
Save