master bdc9348b9ed 03/12: Merge from origin/emacs-31

Eli Zaretskii <[email protected]>
Newsgroups gmane.emacs.diffs
Message-ID <[email protected]>
branch: master
commit bdc9348b9ed6766099c3a3adf53832d7c244d02f
Merge: 3c680886ec0 65eff4fd4f4
Author: Eli Zaretskii <[email protected]>
Commit: Eli Zaretskii <[email protected]>

    Merge from origin/emacs-31
    
    65eff4fd4f4 ; Properly initialize 'package-load-list' for 'package-is...
    effafd92e05 Load all dependencies when isolating a package
    293eaf323a0 Have 'frame-deletable-p' check other frame's terminal (Bu...
---
 lisp/emacs-lisp/package.el | 20 +++++++++++++++++---
 lisp/frame.el              | 16 +++++++++-------
 2 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 26c86fe1526..70b641dda16 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -2652,8 +2652,22 @@ intended for testing Emacs and/or the packages in a clean environment."
              current-prefix-arg)))
   (let* ((name (concat "package-isolate-"
                        (mapconcat #'package-desc-full-name packages ",")))
-         (dependencies (apply #'append (mapcar #'package-desc-reqs packages)))
-         (all-packages (package-compute-transaction packages dependencies))
+         (all-packages
+          (delete-dups
+           (nconc
+            (mapcan
+             (pcase-lambda (`(,name ,vers))
+               (and (not (eq name 'emacs))
+                    (not (cl-find name packages :key #'package-desc-name))
+                    (if-let* ((desc (package-get-descriptor
+                                     name t
+                                     (lambda (desc)
+                                       (version-list-<= vers (package-desc-version desc))))))
+                        (list desc)
+                      (error "Failed to find package: (%s %S)" name vers))))
+             (package--dependencies packages))
+            packages)))
+         (all-packages (seq-remove #'package-built-in-p all-packages))
          (package-alist (copy-tree package-alist t))
          (temp-install-dir nil) initial-scratch-message load-list)
     (when-let* ((missing (seq-remove #'package-installed-p all-packages))
@@ -2694,7 +2708,7 @@ intended for testing Emacs and/or the packages in a clean environment."
                                (append (list package-user-dir)
                                        temp-install-dir
                                        package-directory-list))
-                            (setq package-load-list ',package-load-list)
+                            (setq package-load-list ',load-list)
                             (package--activate-all)))))))
 
 
diff --git a/lisp/frame.el b/lisp/frame.el
index 36c14304ec7..d6cd3dea359 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -198,7 +198,7 @@ FRAME must be a live frame and defaults to the selected frame.
 
 FRAME cannot be safely deleted in the following cases:
 
-- FRAME is the only visible or iconified frame.
+- There is no other visible or iconified frame on FRAME's terminal.
 
 - FRAME hosts the active minibuffer window that does not follow the
   selected frame.
@@ -216,6 +216,7 @@ will be better to wrap the `delete-frame' call in a `condition-case'
 form."
   (setq frame (window-normalize-frame frame))
   (let ((active-minibuffer-window (active-minibuffer-window))
+        (terminal (frame-terminal frame))
 	deletable)
     (catch 'deletable
       (when (and active-minibuffer-window
@@ -228,12 +229,13 @@ form."
 
       (let ((frames (delq frame (frame-list))))
 	(dolist (other frames)
-	  ;; A suitable "other" frame must be either visible or
-	  ;; iconified.  Child frames and frames with a non-nil
-	  ;; 'delete-before' parameter do not qualify as other frame -
-	  ;; either of these will depend on a "suitable" frame found in
-	  ;; this loop.
-	  (unless (or (frame-parent other)
+	  ;; A suitable "other" frame must be on the same terminal as
+          ;; FRAME and must be either visible or iconified.  Child
+          ;; frames and frames with a non-nil 'delete-before' parameter
+          ;; do not qualify as other frame - either of these will depend
+          ;; on a "suitable" frame found in this loop.
+	  (unless (or (not (eq (frame-terminal other) terminal))
+                      (frame-parent other)
 		      (frame-parameter other 'delete-before)
 		      (not (frame-visible-p other)))
 	    (setq deletable t))
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.