Compare commits
3 commits
fabb9394a5
...
97538c1081
Author | SHA1 | Date | |
---|---|---|---|
Bram Schoenmakers | 97538c1081 | ||
Bram Schoenmakers | 4e5405ed50 | ||
Bram Schoenmakers | 157d298512 |
|
@ -4,7 +4,7 @@
|
|||
;; URL: https://apps.bram85.nl/git/bram/comint-ledger
|
||||
;; Version: 0.1
|
||||
;; Keywords: processes
|
||||
;; Package-Requires: ((emacs "28.2"))
|
||||
;; Package-Requires: ((emacs "28.1"))
|
||||
|
||||
;;; This file is NOT part of GNU Emacs
|
||||
|
||||
|
@ -19,36 +19,40 @@
|
|||
|
||||
(require 'comint)
|
||||
|
||||
(defvar ledger-cli-path (executable-find "ledger")
|
||||
(defvar comint-ledger-cli-path (executable-find "ledger")
|
||||
"Path to the program used by `run-ledger'.")
|
||||
|
||||
(defvar ledger-file-path nil
|
||||
(defvar comint-ledger-file-path nil
|
||||
"Path to the ledger data file.")
|
||||
|
||||
(defvar ledger-cli-arguments '()
|
||||
(defvar comint-ledger-cli-arguments '()
|
||||
"Commandline arguments to pass to `ledger'.")
|
||||
|
||||
(defvar ledger-mode-map
|
||||
(defvar comint-ledger-mode-map
|
||||
(let ((map (nconc (make-sparse-keymap) comint-mode-map)))
|
||||
;; example definition
|
||||
(define-key map "\t" 'completion-at-point)
|
||||
map)
|
||||
"Basic mode map for `run-ledger'.")
|
||||
|
||||
(defvar ledger-prompt-regexp (rx bol "] ")
|
||||
(defvar comint-ledger-prompt-regexp (rx bol "] ")
|
||||
"Prompt for `run-ledger'.")
|
||||
|
||||
(defvar ledger-buffer-name "*Ledger*"
|
||||
(defvar comint-ledger-buffer-name "*Ledger*"
|
||||
"Name of the buffer to use for the `run-ledger' comint instance.")
|
||||
|
||||
;;;###autoload
|
||||
(defun run-ledger ()
|
||||
"Run an inferior instance of `ledger' inside Emacs."
|
||||
(interactive)
|
||||
(let* ((ledger-program ledger-cli-path)
|
||||
(ledger-file-arguments (list "-f" ledger-file-path))
|
||||
(ledger-arguments (append ledger-file-arguments ledger-cli-arguments))
|
||||
(buffer (get-buffer-create ledger-buffer-name))
|
||||
(defun run-ledger (ledger-file)
|
||||
"Run an inferior instance of `ledger' inside Emacs, using LEDGER-FILE.
|
||||
|
||||
The LEDGER-FILE can be configured through the `comint-ledger-file-path'
|
||||
variable, otherwise a prompt will appear to select a file."
|
||||
(interactive (list (or comint-ledger-file-path
|
||||
(read-file-name "Ledger file: "))))
|
||||
(let* ((ledger-program comint-ledger-cli-path)
|
||||
(ledger-file-arguments (list "--no-pager" "-f" ledger-file))
|
||||
(ledger-arguments (append ledger-file-arguments comint-ledger-cli-arguments))
|
||||
(buffer (get-buffer-create comint-ledger-buffer-name))
|
||||
(proc-alive (comint-check-proc buffer)))
|
||||
;; if the process is dead then re-create the process and reset the
|
||||
;; mode.
|
||||
|
@ -61,7 +65,7 @@
|
|||
(when buffer
|
||||
(pop-to-buffer buffer))))
|
||||
|
||||
(defun ledger--initialize ()
|
||||
(defun comint-ledger--initialize ()
|
||||
"Helper function to initialize ledger."
|
||||
(setq comint-process-echoes t)
|
||||
(setq comint-use-prompt-regexp t))
|
||||
|
@ -71,25 +75,25 @@
|
|||
|
||||
\\<ledger-mode-map>"
|
||||
;; this sets up the prompt so it matches things like: [foo@bar]
|
||||
(setq comint-prompt-regexp ledger-prompt-regexp)
|
||||
(setq comint-prompt-regexp comint-ledger-prompt-regexp)
|
||||
;; this makes it read only; a contentious subject as some prefer the
|
||||
;; buffer to be overwritable.
|
||||
(setq comint-prompt-read-only t)
|
||||
;; this makes it so commands like M-{ and M-} work.
|
||||
(set (make-local-variable 'paragraph-separate) "\\'")
|
||||
(set (make-local-variable 'font-lock-defaults) '(ledger-font-lock-keywords t))
|
||||
(set (make-local-variable 'paragraph-start) ledger-prompt-regexp))
|
||||
(set (make-local-variable 'font-lock-defaults) '(comint-ledger-font-lock-keywords t))
|
||||
(set (make-local-variable 'paragraph-start) comint-ledger-prompt-regexp))
|
||||
|
||||
(add-hook 'ledger-mode-hook 'ledger--initialize)
|
||||
(add-hook 'ledger-mode-hook 'comint-ledger--initialize)
|
||||
|
||||
(defconst ledger-keywords
|
||||
(defconst comint-ledger-keywords
|
||||
'()
|
||||
"List of keywords to highlight in `ledger-font-lock-keywords'.")
|
||||
"List of keywords to highlight in `comint-ledger-font-lock-keywords'.")
|
||||
|
||||
(defvar ledger-font-lock-keywords
|
||||
(defvar comint-ledger-font-lock-keywords
|
||||
(list
|
||||
;; highlight all the reserved commands.
|
||||
`(,(concat "\\_<" (regexp-opt ledger-keywords) "\\_>") . font-lock-keyword-face))
|
||||
`(,(concat "\\_<" (regexp-opt comint-ledger-keywords) "\\_>") . font-lock-keyword-face))
|
||||
"Additional expressions to highlight in `comint-ledger-mode'.")
|
||||
|
||||
(provide 'comint-ledger)
|
||||
|
|
Loading…
Reference in a new issue