branch: elpa/hyperdrive
commit c12e88da4a91c4478705ebbd920f2932b0e7f768
Author: Adam Porter <a...@alphapapa.net>
Commit: Joseph Turner <jos...@ushin.org>

    Add/Change: (hyperdrive-history-find-file-other-window)
---
 hyperdrive-history.el | 27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/hyperdrive-history.el b/hyperdrive-history.el
index 262f0df5bf..6819bddb5e 100644
--- a/hyperdrive-history.el
+++ b/hyperdrive-history.el
@@ -124,6 +124,7 @@ and ENTRY's version are nil."
   :parent  hyperdrive-ewoc-mode-map
   :doc "Local keymap for `hyperdrive-history-mode' buffers."
   "RET" #'hyperdrive-history-find-file
+  "o" #'hyperdrive-history-find-file-other-window
   "v"   #'hyperdrive-history-view-file
   "="   #'hyperdrive-history-diff
   "+"   #'hyperdrive-history-fill-version-ranges
@@ -257,11 +258,13 @@ Interactively, diff range entry at point with previous 
entry."
     :then (lambda ()
             (pop-to-buffer (current-buffer)))))
 
-(defun hyperdrive-history-find-file (range-entry)
+(cl-defun hyperdrive-history-find-file
+    (range-entry &key (then (lambda ()
+                              (pop-to-buffer (current-buffer) 
'(display-buffer-same-window)))))
   "Visit hyperdrive entry in RANGE-ENTRY at point.
-When entry does not exist, does nothing and returns nil.
-When entry is not known to exist, attempts to load entry at
-RANGE-ENTRY's RANGE-END.
+Then call THEN.  When entry does not exist, does nothing and
+returns nil.  When entry is not known to exist, attempts to load
+entry at RANGE-ENTRY's RANGE-END.
 
 Interactively, visit entry at point in `hyperdrive-history'
 buffer."
@@ -270,7 +273,7 @@ buffer."
   (pcase-exhaustive (hyperdrive-range-entry-exists-p range-entry)
     ('t
      ;; Known to exist: open it.
-     (hyperdrive-open (cdr range-entry)))
+     (hyperdrive-open (cdr range-entry) :then then))
     ('nil
      ;; Known to not exist: warn user.
      (hyperdrive-user-error "File does not exist!"))
@@ -278,6 +281,20 @@ buffer."
      ;; Not known to exist: fill version ranges:
      (hyperdrive-history-fill-version-ranges range-entry))))
 
+(defun hyperdrive-history-find-file-other-window (range-entry)
+  "Visit hyperdrive entry in RANGE-ENTRY at point in other window.
+Then call THEN.  When entry does not exist, does nothing and
+returns nil.  When entry is not known to exist, attempts to load
+entry at RANGE-ENTRY's RANGE-END.
+
+Interactively, visit entry at point in `hyperdrive-history'
+buffer."
+  (declare (modes hyperdrive-history-mode))
+  (interactive (list (hyperdrive-history-range-entry-at-point)))
+  (hyperdrive-history-find-file
+   range-entry :then (lambda ()
+                       (pop-to-buffer (current-buffer) 
'(display-buffer-other-window)))))
+
 (declare-function hyperdrive-view-file "hyperdrive")
 (defun hyperdrive-history-view-file (range-entry)
   "Open hyperdrive entry in RANGE-ENTRY at point in `view-mode'.

Reply via email to