aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bard-elisp/bard-media.el28
-rw-r--r--config.org28
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: