branch: externals/dired-preview commit 4af91a6b7c6d64ecbdfcb3b048a4035f9fb49be7 Author: Protesilaos Stavrou <i...@protesilaos.com> Commit: Protesilaos Stavrou <i...@protesilaos.com>
Re-order large portions of the file --- dired-preview.el | 140 +++++++++++++++++++++++++++---------------------------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/dired-preview.el b/dired-preview.el index c4a0ff8f16..a98282b428 100644 --- a/dired-preview.el +++ b/dired-preview.el @@ -101,49 +101,6 @@ details." (defvar dired-preview--buffers nil "List with buffers of previewed files.") -(defun dired-preview--find-file-no-select (file) - "Call `find-file-noselect' on FILE with appropriate settings." - ;; NOTE: I learnt about `non-essential' and `delay-mode-hooks' from - ;; Daniel Mendler's `consult' package, which imnplements a preview - ;; functionality as well (more sophisticated than mine): - ;; <https://github.com/minad/consult>. - (let ((inhibit-message t) - (enable-dir-local-variables nil) - (enable-local-variables :safe) - (non-essential t) - (delay-mode-hooks t)) - (find-file-noselect file :nowarn))) - -(defun dired-preview--set-window-parameters (window value) - "Set desired WINDOW parameters to VALUE." - (with-selected-window window - (set-window-parameter window 'dired-preview-window value) - (set-window-parameter window 'dedicated value) - (set-window-parameter window 'no-other-window value))) - -(defun dired-preview--run-mode-hooks () - "Run mode hooks in current buffer, if `delayed-mode-hooks' is non-nil." - (cond - ((window-parameter (selected-window) 'dired-preview-window) - (dired-preview--delete-windows)) - ((and delay-mode-hooks (current-buffer)) - (dired-preview--set-window-parameters (selected-window) nil) - (apply #'run-hooks (delete-dups delayed-mode-hooks)) - (kill-local-variable 'delayed-mode-hooks) - (remove-hook 'post-command-hook #'dired-preview--run-mode-hooks :local)))) - -(defun dired-preview--add-to-previews (file) - "Add FILE to `dired-preview--buffers', if not already in a buffer. -Always return FILE buffer." - (let ((buffer (find-buffer-visiting file))) - (if (buffer-live-p buffer) - buffer - (setq buffer (dired-preview--find-file-no-select file))) - (with-current-buffer buffer - (add-hook 'post-command-hook #'dired-preview--run-mode-hooks nil :local)) - (add-to-list 'dired-preview--buffers buffer) - buffer)) - (defun dired-preview--get-buffers () "Return buffers that show previews." (seq-filter @@ -157,10 +114,37 @@ Always return FILE buffer." "Return non-nil if WINDOW has `dired-preview-window' parameter." (window-parameter window 'dired-preview-window)) +;; TODO 2023-07-05: We need a garbage collection function so that we +;; do not accummulate too many buffers that exceed a given threshold. +(defun dired-preview--kill-buffers () + "Kill preview buffers." + (mapc + (lambda (buffer) + (let ((window (get-buffer-window buffer))) + (cond + ((and (dired-preview--window-parameter-p window) + (current-buffer)) + (delete-window (get-buffer-window buffer))) + ((dired-preview--window-parameter-p window) + (ignore-errors + (kill-buffer-if-not-modified buffer) + (setq dired-preview--buffers (delq buffer dired-preview--buffers))))))) + (dired-preview--get-buffers))) + (defun dired-preview--get-windows () "Return windows that show previews." (seq-filter #'dired-preview--window-parameter-p (window-list))) +(defun dired-preview--delete-windows () + "Delete preview windows." + (mapc + (lambda (window) + (unless (or (one-window-p) + (eq window (minibuffer-window)) + (eq window (selected-window))) + (delete-window window))) + (dired-preview--get-windows))) + (defun dired-preview--file-ignored-p (file) "Return non-nil if FILE extension is among the ignored extensions. See user option `dired-preview-ignored-extensions-regexp'." @@ -177,6 +161,49 @@ See user option `dired-preview-ignored-extensions-regexp'." (window (get-buffer-window buffer))) (window-live-p window))) +(defun dired-preview--set-window-parameters (window value) + "Set desired WINDOW parameters to VALUE." + (with-selected-window window + (set-window-parameter window 'dired-preview-window value) + (set-window-parameter window 'dedicated value) + (set-window-parameter window 'no-other-window value))) + +(defun dired-preview--run-mode-hooks () + "Run mode hooks in current buffer, if `delayed-mode-hooks' is non-nil." + (cond + ((window-parameter (selected-window) 'dired-preview-window) + (dired-preview--delete-windows)) + ((and delay-mode-hooks (current-buffer)) + (dired-preview--set-window-parameters (selected-window) nil) + (apply #'run-hooks (delete-dups delayed-mode-hooks)) + (kill-local-variable 'delayed-mode-hooks) + (remove-hook 'post-command-hook #'dired-preview--run-mode-hooks :local)))) + +(defun dired-preview--find-file-no-select (file) + "Call `find-file-noselect' on FILE with appropriate settings." + ;; NOTE: I learnt about `non-essential' and `delay-mode-hooks' from + ;; Daniel Mendler's `consult' package, which imnplements a preview + ;; functionality as well (more sophisticated than mine): + ;; <https://github.com/minad/consult>. + (let ((inhibit-message t) + (enable-dir-local-variables nil) + (enable-local-variables :safe) + (non-essential t) + (delay-mode-hooks t)) + (find-file-noselect file :nowarn))) + +(defun dired-preview--add-to-previews (file) + "Add FILE to `dired-preview--buffers', if not already in a buffer. +Always return FILE buffer." + (let ((buffer (find-buffer-visiting file))) + (if (buffer-live-p buffer) + buffer + (setq buffer (dired-preview--find-file-no-select file))) + (with-current-buffer buffer + (add-hook 'post-command-hook #'dired-preview--run-mode-hooks nil :local)) + (add-to-list 'dired-preview--buffers buffer) + buffer)) + (defun dired-preview--return-preview-buffer (file) "Return buffer to preview FILE in." (dired-preview--add-to-previews file)) @@ -222,33 +249,6 @@ aforementioned user option." (when (timerp dired-preview--timer) (cancel-timer dired-preview--timer))) -(defun dired-preview--delete-windows () - "Delete preview windows." - (mapc - (lambda (window) - (unless (or (one-window-p) - (eq window (minibuffer-window)) - (eq window (selected-window))) - (delete-window window))) - (dired-preview--get-windows))) - -;; TODO 2023-07-05: We need a garbage collection function so that we -;; do not accummulate too many buffers that exceed a given threshold. -(defun dired-preview--kill-buffers () - "Kill preview buffers." - (mapc - (lambda (buffer) - (let ((window (get-buffer-window buffer))) - (cond - ((and (dired-preview--window-parameter-p window) - (current-buffer)) - (delete-window (get-buffer-window buffer))) - ((dired-preview--window-parameter-p window) - (ignore-errors - (kill-buffer-if-not-modified buffer) - (setq dired-preview--buffers (delq buffer dired-preview--buffers))))))) - (dired-preview--get-buffers))) - (defun dired-preview--close-previews () "Kill preview buffers and delete their windows." (dired-preview--cancel-timer)