branch: externals/beframe
commit 7c6f0a824bf27bade6cf8ebb2a0b292a91da9455
Author: Protesilaos Stavrou <i...@protesilaos.com>
Commit: Protesilaos Stavrou <i...@protesilaos.com>

    Make Xref history specific to the current frame
---
 beframe.el | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/beframe.el b/beframe.el
index be7fa18575..b338634986 100644
--- a/beframe.el
+++ b/beframe.el
@@ -728,6 +728,22 @@ Meant to be assigned to a prefix key, like this:
 (define-key beframe-prefix-map (kbd "a s") 
#'beframe-assume-buffers-matching-regexp)
 (define-key beframe-prefix-map (kbd "u s") 
#'beframe-unassume-buffers-matching-regexp)
 
+(defvar xref-history-storage)
+
+(defvar beframe-xref-history-storage xref-history-storage
+  "Store the last known value of `xref-history-storage'.")
+
+(defun beframe-xref-frame-history (&optional new-value)
+  "Return frame-specific Xref history for the current frame.
+Override existing value with NEW-VALUE if NEW-VALUE is set.
+
+This function is based on `xref-window-local-history'."
+  (let ((frame (selected-frame)))
+    (if new-value
+        (set-frame-parameter frame 'xref--history new-value)
+      (or (frame-parameter frame 'xref--history)
+          (set-frame-parameter frame 'xref--history (cons nil nil))))))
+
 ;;;###autoload
 (define-minor-mode beframe-mode
   "Make all buffer prompts limit candidates per frame.
@@ -736,12 +752,14 @@ Also see the variable `beframe-prefix-map'."
   (if beframe-mode
       (progn
         (setq beframe--read-buffer-function read-buffer-function
-              read-buffer-function #'beframe-read-buffer)
+              read-buffer-function #'beframe-read-buffer
+              xref-history-storage #'beframe-xref-frame-history)
         (add-hook 'after-make-frame-functions #'beframe-setup-frame)
         (add-hook 'context-menu-functions #'beframe-context-menu)
         (beframe--functions-in-frames))
     (setq read-buffer-function beframe--read-buffer-function
-          beframe--read-buffer-function nil)
+          beframe--read-buffer-function nil
+          xref-history-storage beframe-xref-history-storage)
     (remove-hook 'after-make-frame-functions #'beframe-setup-frame)
     (remove-hook 'context-menu-functions #'beframe-context-menu)
     (beframe--functions-in-frames :disable)))

Reply via email to