[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r113875: lisp/frameset.el: Allow orphaned minibuffer
From: |
Juanma Barranquero |
Subject: |
[Emacs-diffs] trunk r113875: lisp/frameset.el: Allow orphaned minibufferless frames. |
Date: |
Wed, 14 Aug 2013 13:41:08 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 113875
revision-id: address@hidden
parent: address@hidden
committer: Juanma Barranquero <address@hidden>
branch nick: trunk
timestamp: Wed 2013-08-14 15:41:02 +0200
message:
lisp/frameset.el: Allow orphaned minibufferless frames.
(frameset-filter-minibuffer): Deal with the case that the minibuffer
parameter was already set in FILTERED. Doc fix.
(frameset--record-minibuffer-relationships): Allow saving a
minibufferless frame without its corresponding minibuffer frame.
(frameset--reuse-frame): Accept a match from an orphaned minibufferless
frame, if the frame id matches.
(frameset--minibufferless-last-p): Sort non-orphaned minibufferless
frames before orphaned ones.
(frameset-restore): Warn about orphaned windows, instead of error out.
modified:
lisp/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1432
lisp/frameset.el frameset.el-20130802043218-tfwraxv1c2zlibpw-1
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2013-08-14 13:30:13 +0000
+++ b/lisp/ChangeLog 2013-08-14 13:41:02 +0000
@@ -2,6 +2,15 @@
* frameset.el (frameset--prop-setter): New function.
(frameset-prop): Add gv-setter declaration.
+ (frameset-filter-minibuffer): Deal with the case that the minibuffer
+ parameter was already set in FILTERED. Doc fix.
+ (frameset--record-minibuffer-relationships): Allow saving a
+ minibufferless frame without its corresponding minibuffer frame.
+ (frameset--reuse-frame): Accept a match from an orphaned minibufferless
+ frame, if the frame id matches.
+ (frameset--minibufferless-last-p): Sort non-orphaned minibufferless
+ frames before orphaned ones.
+ (frameset-restore): Warn about orphaned windows, instead of error out.
2013-08-14 Martin Rudalics <address@hidden>
=== modified file 'lisp/frameset.el'
--- a/lisp/frameset.el 2013-08-14 13:30:13 +0000
+++ b/lisp/frameset.el 2013-08-14 13:41:02 +0000
@@ -570,15 +570,22 @@
(not (stringp (cdr current)))
(not (string-match-p "^unspecified-[fb]g$" (cdr current)))))
-(defun frameset-filter-minibuffer (current _filtered _parameters saving)
- "When saving, convert (minibuffer . #<window>) to (minibuffer . t).
+(defun frameset-filter-minibuffer (current filtered _parameters saving)
+ "Force the minibuffer parameter to have a sensible value.
+
+When saving, convert (minibuffer . #<window>) to (minibuffer . t).
+When restoring, if there are two copies, keep the one pointing to
+a live window.
For the meaning of CURRENT, FILTERED, PARAMETERS and SAVING,
see `frameset-filter-alist'."
- (or (not saving)
- (if (windowp (cdr current))
- '(minibuffer . t)
- t)))
+ (let ((value (cdr current)) mini)
+ (cond (saving
+ (if (windowp value) '(minibuffer . t) t))
+ ((setq mini (assq 'minibuffer filtered))
+ (when (windowp value) (setcdr mini value))
+ nil)
+ (t t))))
(defun frameset-filter-shelve-param (current _filtered parameters saving
&optional prefix)
@@ -721,16 +728,18 @@
(dolist (frame frame-list)
(unless (frame-parameter frame 'frameset--mini)
(frameset--set-id frame)
- (let* ((mb-frame (window-frame (minibuffer-window frame)))
- (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
- ;; (nil . FRAME-ID), where FRAME-ID is the frameset--id
- ;; of the frame containing its minibuffer window.
- (set-frame-parameter frame
- 'frameset--mini
- (cons nil id)))))))
+ (let ((mb-frame (window-frame (minibuffer-window frame))))
+ ;; For minibufferless frames, frameset--mini is a cons
+ ;; (nil . FRAME-ID), where FRAME-ID is the frameset--id of
+ ;; the frame containing its minibuffer window.
+ ;; FRAME-ID can be set to nil, if FRAME-LIST doesn't contain
+ ;; the minibuffer frame of a minibufferless frame; we allow
+ ;; it without trying to second-guess the user.
+ (set-frame-parameter frame
+ 'frameset--mini
+ (cons nil
+ (and mb-frame
+ (frameset-frame-id mb-frame))))))))
;;;###autoload
(cl-defun frameset-save (frame-list
@@ -909,10 +918,12 @@
(setq frame (frameset--find-frame-if
(lambda (f 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 parameters)) (cdr
mini))))
+ (or (null mini-id) ; minibuffer frame not saved
+ (frameset-frame-id-equal-p
+ (window-frame (minibuffer-window f))
+ mini-id))))
+ display
+ (cdr (assq 'frameset--id parameters)) (cdr mini))))
(t
;; Default to just finding a frame in the same display.
(setq frame (frameset--find-frame-if nil display))))
@@ -1007,7 +1018,7 @@
(cond ((eq id-def1 t) t)
((eq id-def2 t) nil)
((not (eq hasmini1 hasmini2)) (eq hasmini1 t))
- ((eq hasmini1 nil) (string< id-def1 id-def2))
+ ((eq hasmini1 nil) (or id-def1 id-def2))
(t t))))
(defun frameset-keep-original-display-p (force-display)
@@ -1098,7 +1109,7 @@
(condition-case-unless-debug err
(let* ((d-mini (cdr (assq 'frameset--mini frame-cfg)))
(mb-id (cdr d-mini))
- (default (and (booleanp mb-id) mb-id))
+ (default (and (car d-mini) mb-id))
(force-display (if (functionp force-display)
(funcall force-display frame-cfg
window-cfg)
force-display))
@@ -1142,16 +1153,22 @@
(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 (frameset-frame-with-id mb-id)
- (error "Minibuffer frame %S not found"
mb-id)))
- (mb-param (assq 'minibuffer frame-cfg))
- (mb-window (minibuffer-window mb-frame)))
- (unless (and (window-live-p mb-window)
- (window-minibuffer-p mb-window))
- (error "Not a minibuffer window %s" mb-window))
- (if mb-param
- (setcdr mb-param mb-window)
- (push (cons 'minibuffer mb-window) frame-cfg)))))
+ (when mb-id
+ (let ((mb-frame (frameset-frame-with-id mb-id))
+ (mb-window nil))
+ (if (not mb-frame)
+ (delay-warning 'frameset
+ (format "Minibuffer frame %S not
found" mb-id)
+ :warning)
+ (setq mb-window (minibuffer-window mb-frame))
+ (unless (and (window-live-p mb-window)
+ (window-minibuffer-p mb-window))
+ (delay-warning 'frameset
+ (format "Not a minibuffer window %s"
mb-window)
+ :warning)
+ (setq mb-window nil)))
+ (when mb-window
+ (push (cons 'minibuffer mb-window) frame-cfg))))))
;; OK, we're ready at last to create (or reuse) a frame and
;; restore the window config.
(setq frame (frameset--restore-frame frame-cfg window-cfg
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r113875: lisp/frameset.el: Allow orphaned minibufferless frames.,
Juanma Barranquero <=