=== modified file 'lisp/window.el' --- lisp/window.el 2014-02-10 01:34:22 +0000 +++ lisp/window.el 2014-02-18 18:59:17 +0000 @@ -5026,14 +5026,29 @@ "Put window state STATE into WINDOW. STATE should be the state of a window returned by an earlier invocation of `window-state-get'. Optional argument WINDOW must -specify a live window and defaults to the selected one. +specify a valid window and defaults to the selected one. If +WINDOW is not live, delete all child windows of WINDOW before +putting STATE. Optional argument IGNORE non-nil means ignore minimum window sizes and fixed size restrictions. IGNORE equal `safe' means windows can get as small as `window-safe-min-height' and `window-safe-min-width'." (setq window-state-put-stale-windows nil) - (setq window (window-normalize-window window t)) + (setq window (window-normalize-window window)) + + (unless (window-live-p window) + (let ((root (frame-root-window))) + (if (eq window root) + (setq window (frame-first-window root)) + (setq root window) + (setq window (catch 'live + (walk-window-subtree + (lambda (window) + (when (window-live-p window))) + root)))) + (delete-other-windows-internal window root))) + (let* ((frame (window-frame window)) (head (car state)) ;; We check here (1) whether the total sizes of root window of