emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r113702: lisp/frameset.el: New frame-id functions.


From: Juanma Barranquero
Subject: [Emacs-diffs] trunk r113702: lisp/frameset.el: New frame-id functions.
Date: Mon, 05 Aug 2013 13:06:38 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 113702
revision-id: address@hidden
parent: address@hidden
committer: Juanma Barranquero <address@hidden>
branch nick: trunk
timestamp: Mon 2013-08-05 15:06:29 +0200
message:
  lisp/frameset.el: New frame-id functions.
  (frameset--set-id): Doc fix.
  (frameset-frame-id, frameset-frame-id-equal-p)
  (frameset-locate-frame-id): New functions.
  (frameset--process-minibuffer-frames, frameset--reuse-frame)
  (frameset-restore): Use them.
modified:
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/frameset.el               frameset.el-20130802043218-tfwraxv1c2zlibpw-1
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-08-05 10:35:55 +0000
+++ b/lisp/ChangeLog    2013-08-05 13:06:29 +0000
@@ -1,3 +1,11 @@
+2013-08-05  Juanma Barranquero  <address@hidden>
+
+       * frameset.el (frameset--set-id): Doc fix.
+       (frameset-frame-id, frameset-frame-id-equal-p)
+       (frameset-locate-frame-id): New functions.
+       (frameset--process-minibuffer-frames, frameset--reuse-frame)
+       (frameset-restore): Use them.
+
 2013-08-05  Dmitry Antipov  <address@hidden>
 
        Do not call to `selected-frame' where it is assumed by default.

=== modified file 'lisp/frameset.el'
--- a/lisp/frameset.el  2013-08-05 04:45:17 +0000
+++ b/lisp/frameset.el  2013-08-05 13:06:29 +0000
@@ -340,10 +340,10 @@
     filtered))
 
 
-;; Saving framesets
+;; Frame ids
 
 (defun frameset--set-id (frame)
-  "Set FRAME's `frameset--id' if not yet set.
+  "Set FRAME's id if not yet set.
 Internal use only."
   (unless (frame-parameter frame 'frameset--id)
     (set-frame-parameter frame
@@ -351,6 +351,33 @@
                         (mapconcat (lambda (n) (format "%04X" n))
                                    (cl-loop repeat 4 collect (random 65536))
                                    "-"))))
+;;;###autoload
+(defun frameset-frame-id (frame)
+  "Return the frame id of FRAME, if it has one; else, return nil.
+A frame id is a string that uniquely identifies a frame.
+It is persistent across `frameset-save' / `frameset-restore'
+invocations, and once assigned is never changed unless the same
+frame is duplicated (via `frameset-restore'), in which case the
+newest frame keeps the id and the old frame's is set to nil."
+  (frame-parameter frame 'frameset--id))
+
+;;;###autoload
+(defun frameset-frame-id-equal-p (frame id)
+  "Return non-nil if FRAME's id matches ID."
+  (string= (frameset-frame-id frame) id))
+
+;;;###autoload
+(defun frameset-locate-frame-id (id &optional frame-list)
+  "Return the live frame with id ID, if exists; else nil.
+If FRAME-LIST is a list of frames, check these frames only.
+If nil, check all live frames."
+  (cl-find-if (lambda (f)
+               (and (frame-live-p f)
+                    (frameset-frame-id-equal-p f id)))
+             (or frame-list (frame-list))))
+
+
+;; Saving framesets
 
 (defun frameset--process-minibuffer-frames (frame-list)
   "Process FRAME-LIST and record minibuffer relationships.
@@ -370,7 +397,7 @@
     (unless (frame-parameter frame 'frameset--mini)
       (frameset--set-id frame)
       (let* ((mb-frame (window-frame (minibuffer-window frame)))
-            (id (and mb-frame (frame-parameter mb-frame 'frameset--id))))
+            (id (and mb-frame (frameset-frame-id mb-frame))))
        (if (null id)
            (error "Minibuffer frame %S for %S is not being saved" mb-frame 
frame)
          ;; For minibufferless frames, frameset--mini is a cons
@@ -516,7 +543,7 @@
           ;; M-x desktop-read).
           (setq frame (frameset--find-frame
                        (lambda (f id)
-                         (string= (frame-parameter f 'frameset--id) id))
+                         (frameset-frame-id-equal-p f id))
                        display (cdr (assq 'frameset--id frame-cfg))))
           ;; If it has not been loaded, and it is not a minibuffer-only frame,
           ;; let's look for an existing non-minibuffer-only frame to reuse.
@@ -533,10 +560,10 @@
           ;; and that they are linked to the right minibuffer frame.
           (setq frame (frameset--find-frame
                        (lambda (f id mini-id)
-                         (and (string= (frame-parameter f 'frameset--id) id)
-                              (string= (frame-parameter (window-frame 
(minibuffer-window f))
-                                                        'frameset--id)
-                                       mini-id)))
+                         (and (frameset-frame-id-equal-p f id)
+                              (frameset-frame-id-equal-p (window-frame
+                                                          (minibuffer-window 
f))
+                                                         mini-id)))
                        display (cdr (assq 'frameset--id frame-cfg)) (cdr 
mini))))
          (t
           ;; Default to just finding a frame in the same display.
@@ -740,11 +767,8 @@
              ;; frameset--id from the non-reusable frame, which is not useful 
anymore.
              (when (and other-frames
                         (or (eq reuse-frames :keep) (consp reuse-frames)))
-               (let ((dup (cl-find (cdr (assq 'frameset--id frame-cfg))
-                                   other-frames
-                                   :key (lambda (frame)
-                                          (frame-parameter frame 
'frameset--id))
-                                   :test #'string=)))
+               (let ((dup (frameset-locate-frame-id (cdr (assq 'frameset--id 
frame-cfg))
+                                                    other-frames)))
                  (when dup
                    (set-frame-parameter dup 'frameset--id nil))))
              ;; Restore minibuffers.  Some of this stuff could be done in a 
filter
@@ -759,11 +783,7 @@
                  (setq frame-cfg (append '((tool-bar-lines . 0) 
(menu-bar-lines . 0))
                                          frame-cfg))))
               (t ;; Frame depends on other frame's minibuffer window.
-               (let* ((mb-frame (or (cl-find-if
-                                     (lambda (f)
-                                       (string= (frame-parameter f 
'frameset--id)
-                                                mb-id))
-                                     (frame-list))
+               (let* ((mb-frame (or (frameset-locate-frame-id mb-id)
                                     (error "Minibuffer frame %S not found" 
mb-id)))
                       (mb-param (assq 'minibuffer frame-cfg))
                       (mb-window (minibuffer-window mb-frame)))


reply via email to

[Prev in Thread] Current Thread [Next in Thread]