update packages
This commit is contained in:
@@ -45,11 +45,15 @@ This uses `ledger-occur-xact-face'."
|
||||
(defvar ledger-occur-history nil
|
||||
"History of previously searched expressions for the prompt.")
|
||||
|
||||
(defvar ledger-occur-current-regex nil
|
||||
(defvar-local ledger-occur-current-regex nil
|
||||
"Pattern currently applied to narrow the buffer.")
|
||||
(make-variable-buffer-local 'ledger-occur-current-regex)
|
||||
|
||||
(defvar ledger-occur-mode-map (make-sparse-keymap))
|
||||
(defvar ledger-occur-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map (kbd "C-c C-g") #'ledger-occur-refresh)
|
||||
(define-key map (kbd "C-c C-f") #'ledger-occur-mode)
|
||||
map)
|
||||
"Keymap used by `ledger-occur-mode'.")
|
||||
|
||||
(define-minor-mode ledger-occur-mode
|
||||
"A minor mode which display only transactions matching a pattern.
|
||||
@@ -58,13 +62,12 @@ The pattern is given by `ledger-occur-current-regex'."
|
||||
:lighter (:eval (format " Ledger-Narrow(%s)" ledger-occur-current-regex))
|
||||
:keymap ledger-occur-mode-map
|
||||
(if (and ledger-occur-current-regex ledger-occur-mode)
|
||||
(ledger-occur-refresh)
|
||||
(progn (ledger-occur-refresh)
|
||||
;; Clear overlays after revert-buffer and similar commands.
|
||||
(add-hook 'change-major-mode-hook #'ledger-occur-remove-overlays nil t))
|
||||
(ledger-occur-remove-overlays)
|
||||
(message "Showing all transactions")))
|
||||
|
||||
(define-key ledger-occur-mode-map (kbd "C-c C-g") #'ledger-occur-refresh)
|
||||
(define-key ledger-occur-mode-map (kbd "C-c C-f") #'ledger-occur-mode)
|
||||
|
||||
(defun ledger-occur-refresh ()
|
||||
"Re-apply the current narrowing expression."
|
||||
(interactive)
|
||||
@@ -92,8 +95,8 @@ currently active."
|
||||
(defun ledger-occur-prompt ()
|
||||
"Return the default value of the prompt.
|
||||
|
||||
Default value for prompt is a current word or active
|
||||
region(selection), if its size is 1 line"
|
||||
Default value for prompt is the active region, if it is one line
|
||||
long, otherwise it is the word at point."
|
||||
(if (use-region-p)
|
||||
(let ((pos1 (region-beginning))
|
||||
(pos2 (region-end)))
|
||||
@@ -106,29 +109,31 @@ currently active."
|
||||
|
||||
|
||||
(defun ledger-occur-make-visible-overlay (beg end)
|
||||
(let ((ovl (make-overlay beg end (current-buffer))))
|
||||
"Make an overlay for a visible portion of the buffer, from BEG to END."
|
||||
(let ((ovl (make-overlay beg end)))
|
||||
(overlay-put ovl ledger-occur-overlay-property-name t)
|
||||
(when ledger-occur-use-face-shown
|
||||
(overlay-put ovl 'font-lock-face 'ledger-occur-xact-face))))
|
||||
|
||||
(defun ledger-occur-make-invisible-overlay (beg end)
|
||||
(let ((ovl (make-overlay beg end (current-buffer))))
|
||||
"Make an overlay for an invisible portion of the buffer, from BEG to END."
|
||||
(let ((ovl (make-overlay beg end)))
|
||||
(overlay-put ovl ledger-occur-overlay-property-name t)
|
||||
(overlay-put ovl 'invisible t)))
|
||||
|
||||
(defun ledger-occur-create-overlays (ovl-bounds)
|
||||
"Create the overlays for the visible transactions.
|
||||
Argument OVL-BOUNDS contains bounds for the transactions to be left visible."
|
||||
(let* ((beg (caar ovl-bounds))
|
||||
(end (cl-cadar ovl-bounds)))
|
||||
(ledger-occur-remove-overlays)
|
||||
(ledger-occur-make-invisible-overlay (point-min) (1- beg))
|
||||
(dolist (visible (cdr ovl-bounds))
|
||||
(ledger-occur-remove-overlays)
|
||||
(let ((end-of-last-visible (point-min)))
|
||||
(pcase-dolist (`(,beg ,end) ovl-bounds)
|
||||
;; keep newline before xact visible, but do not highlight it with
|
||||
;; `ledger-occur-xact-face'
|
||||
(ledger-occur-make-invisible-overlay end-of-last-visible (1- beg))
|
||||
(ledger-occur-make-visible-overlay beg end)
|
||||
(ledger-occur-make-invisible-overlay (1+ end) (1- (car visible)))
|
||||
(setq beg (car visible))
|
||||
(setq end (cadr visible)))
|
||||
(ledger-occur-make-invisible-overlay (1+ end) (point-max))))
|
||||
;; keep newline after xact visible
|
||||
(setq end-of-last-visible (1+ end)))
|
||||
(ledger-occur-make-invisible-overlay end-of-last-visible (point-max))))
|
||||
|
||||
(defun ledger-occur-remove-overlays ()
|
||||
"Remove the transaction hiding overlays."
|
||||
@@ -141,19 +146,21 @@ Argument OVL-BOUNDS contains bounds for the transactions to be left visible."
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
;; Set initial values for variables
|
||||
(let (endpoint lines bounds)
|
||||
(let (lines)
|
||||
;; Search loop
|
||||
(while (not (eobp))
|
||||
;; if something found
|
||||
(when (setq endpoint (re-search-forward regex nil 'end))
|
||||
(setq bounds (ledger-navigate-find-element-extents endpoint))
|
||||
(when-let ((endpoint (re-search-forward regex nil 'end))
|
||||
(bounds (ledger-navigate-find-element-extents endpoint)))
|
||||
(push bounds lines)
|
||||
;; move to the end of the xact, no need to search inside it more
|
||||
(goto-char (cadr bounds))))
|
||||
(nreverse lines))))
|
||||
|
||||
(defun ledger-occur-compress-matches (buffer-matches)
|
||||
"identify sequential xacts to reduce number of overlays required"
|
||||
"Identify sequential xacts to reduce number of overlays required.
|
||||
|
||||
BUFFER-MATCHES should be a list of (BEG END) lists."
|
||||
(if buffer-matches
|
||||
(let ((points (list))
|
||||
(current-beginning (caar buffer-matches))
|
||||
|
||||
Reference in New Issue
Block a user