From 5bd1310456d6bee510c431882a625c27fba5db2e Mon Sep 17 00:00:00 2001 From: BardofSprites <89086143+BardofSprites@users.noreply.github.com> Date: Fri, 30 Jan 2026 07:48:00 -0500 Subject: optionally browse marked nsxiv files in dired --- bard-elisp/bard-media.el | 28 ++++++++++++++++++++++++---- config.org | 28 ++++++++++++++++++++++++---- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/bard-elisp/bard-media.el b/bard-elisp/bard-media.el index b7ebacd..d28e78d 100644 --- a/bard-elisp/bard-media.el +++ b/bard-elisp/bard-media.el @@ -87,11 +87,31 @@ Asks the user whether to enable recursive mode and whether to output marked file (message "No valid files to show in Dired."))) (defun bard/image-browser-marked () - "Open nsxiv on the marked files in Dired. -Assumes that files have already been validated." - (let ((files (dired-get-marked-files))) + "Open nsxiv on the marked files in Dired." + (let* ((files (dired-get-marked-files)) + (stdout (if (y-or-n-p "Output marked files to buffer? ") "-o" ""))) (message "Opening marked files: %s" (string-join files ", ")) - (apply #'start-process "nsxiv" "*nsxiv*" "nsxiv" "-t" files))) + (when (string= stdout "-o") + (with-current-buffer (get-buffer-create "*nsxiv*") + (read-only-mode 0) + (erase-buffer))) + ;; Corrected apply call: + (let ((process (apply #'start-process + "nsxiv" + "*nsxiv*" + (append (list "nsxiv" "-t" stdout) files)))) + (when (string= stdout "-o") + (set-process-sentinel + process + (lambda (proc event) + (when (string= event "finished\n") + (with-current-buffer "*nsxiv*" + (read-only-mode nil) + (goto-char (point-min))) + (let ((files (with-current-buffer "*nsxiv*" + (split-string (buffer-string) "\n" t)))) + (bard/open-marked-in-dired files))))) + (pop-to-buffer "*nsxiv*"))))) (defun bard/image-browser () "Open nsxiv in a context-sensitive way: diff --git a/config.org b/config.org index e6ba70c..1d9a357 100644 --- a/config.org +++ b/config.org @@ -3094,11 +3094,31 @@ I made a video about this workflow [[https://www.youtube.com/watch?v=fEUQEK_uXk0 (message "No valid files to show in Dired."))) (defun bard/image-browser-marked () - "Open nsxiv on the marked files in Dired. - Assumes that files have already been validated." - (let ((files (dired-get-marked-files))) + "Open nsxiv on the marked files in Dired." + (let* ((files (dired-get-marked-files)) + (stdout (if (y-or-n-p "Output marked files to buffer? ") "-o" ""))) (message "Opening marked files: %s" (string-join files ", ")) - (apply #'start-process "nsxiv" "*nsxiv*" "nsxiv" "-t" files))) + (when (string= stdout "-o") + (with-current-buffer (get-buffer-create "*nsxiv*") + (read-only-mode 0) + (erase-buffer))) + ;; Corrected apply call: + (let ((process (apply #'start-process + "nsxiv" + "*nsxiv*" + (append (list "nsxiv" "-t" stdout) files)))) + (when (string= stdout "-o") + (set-process-sentinel + process + (lambda (proc event) + (when (string= event "finished\n") + (with-current-buffer "*nsxiv*" + (read-only-mode nil) + (goto-char (point-min))) + (let ((files (with-current-buffer "*nsxiv*" + (split-string (buffer-string) "\n" t)))) + (bard/open-marked-in-dired files))))) + (pop-to-buffer "*nsxiv*"))))) (defun bard/image-browser () "Open nsxiv in a context-sensitive way: -- cgit v1.2.3