branch: externals/beframe
commit cb3eed0e683d54fc31498af8dd9ede1d92f30c8e
Author: Protesilaos Stavrou <[email protected]>
Commit: Protesilaos Stavrou <[email protected]>

    Use an annotation function to set how a frame is marked as "current"
---
 beframe.el | 34 +++++++++++-----------------------
 1 file changed, 11 insertions(+), 23 deletions(-)

diff --git a/beframe.el b/beframe.el
index 926901e089..cb7ec98c4c 100644
--- a/beframe.el
+++ b/beframe.el
@@ -347,43 +347,31 @@ frame name."
      (lambda (buffer)
        (beframe--read-buffer-p buffer buffers)))))
 
-(defun beframe--buffers-with-current ()
-  "Return frame list with current one renamed appropriately."
-  (let ((frames (make-frame-names-alist)))
-    (mapcar
-     (lambda (frame)
-       (let ((name (car frame))
-             (obj (cdr frame))
-             (selected-frame (selected-frame)))
-         (cond
-          ((and (eq selected-frame obj)
-                (string-prefix-p " " name))
-           (setcar frame "Current frame")
-           frame)
-          ((eq selected-frame obj)
-           (setcar frame (format "%s (Current frame)" name))
-           frame)
-          (t
-           frame))))
-     frames)))
-
 (defun beframe--multiple-frames-p ()
   "Return non-nil if `frame-list' is longer than 1."
   (> (length (frame-list)) 1))
 
+(defun beframe-frame-prompt-annotate (frame-name)
+  "Return annotation for FRAME-NAME if it is the current one."
+  (when (string= frame-name (frame-parameter nil 'name))
+    (format " -- CURRENT FRAME")))
+
 (defun beframe--frame-prompt (&optional force)
   "Prompt to select a frame among the list of frames.
 Return user-error if `beframe--multiple-frames-p' is nil.  Skip
 this check if FORCE is non-nil."
   (if (or force (beframe--multiple-frames-p))
-      (let ((frames (beframe--buffers-with-current)))
-        (completing-read "Select Frame: " frames nil t nil 'frame-name-history 
(caar frames)))
+      (let ((frames (make-frame-names-alist)))
+        (completing-read
+         "Select Frame: "
+         (beframe-get-completion-table frames '(category . frame) 
'(annotation-function . beframe-frame-prompt-annotate))
+         nil t nil 'frame-name-history (caar frames)))
     (user-error "Only a single frame is available; aborting")))
 
 (defun beframe--frame-object (frame)
   "Retun frame object of named FRAME.
 FRAME is the human-readable representation of a frame."
-  (let* ((frames (beframe--buffers-with-current))
+  (let* ((frames (make-frame-names-alist))
          (names (mapcar #'car frames)))
     (when (seq-contains-p names frame #'string-match-p)
       (alist-get frame frames nil nil #'string-match-p))))

Reply via email to