branch: externals/dape
commit 8b2707bf8bb3ae8a2c840e3deb6fe683714f5182
Author: Daniel Pettersson <dan...@dpettersson.net>
Commit: Daniel Pettersson <dan...@dpettersson.net>

    Add history support for dape-info's buffer displaying
---
 dape.el | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/dape.el b/dape.el
index 6aefdecb48..bc5b7de1da 100644
--- a/dape.el
+++ b/dape.el
@@ -3468,6 +3468,8 @@ Buffer is displayed with 
`dape-display-source-buffer-action'."
 
 (defvar dape--info-buffers nil "List containing `dape-info' buffers.")
 
+(defvar dape--info-buffer-display-history nil "History list in (MODE INDEX).")
+
 (defun dape--info-buffer-list ()
   "Return all live `dape-info-parent-mode'."
   (setq dape--info-buffers
@@ -3502,6 +3504,7 @@ REVERSED selects previous."
                                                    (not (dape--info-buffer-p 
mode index))))
                                  (cadr))
                     (car dape--info-buffer-related))))
+    (push `(,mode ,index) dape--info-buffer-display-history)
     (gdb-set-window-buffer (dape--info-get-buffer-create mode index) t)))
 
 (defvar dape-info-parent-mode-map
@@ -3555,6 +3558,7 @@ with HELP-ECHO string, MOUSE-FACE and FACE."
              (let ((buffer
                     (dape--info-get-buffer-create mode index)))
                (with-current-buffer buffer (revert-buffer))
+               (push `(,mode ,index) dape--info-buffer-display-history)
                (gdb-set-window-buffer buffer t)))))
         (map (make-sparse-keymap)))
     (define-key map (vector 'header-line 'mouse-1) command)
@@ -3644,7 +3648,19 @@ buffers get displayed and how they are grouped."
              (setq buffer-displayed-p t)
              (dape--display-buffer
               (apply #'dape--info-get-buffer-create
-                     (ensure-list (car group)))))
+                     (or
+                      ;; Try to re-create the last window setup
+                      (cl-find-if
+                       (pcase-lambda (`(,hist-mode ,hist-index))
+                         (cl-some
+                          (pcase-lambda (`(,spec-mode ,spec-index))
+                            (and (eq hist-mode spec-mode)
+                                 (eq hist-index spec-index)))
+                          group
+                          :key #'ensure-list))
+                       dape--info-buffer-display-history)
+                      ;; ...or fallback to car if no history
+                      (ensure-list (car group))))))
     (when (and maybe-kill (not buffer-displayed-p))
       (cl-loop for buffer in (dape--info-buffer-list)
                do (kill-buffer buffer)))

Reply via email to