[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r113242: lisp/desktop.el: More fixes to frame restor
From: |
Juanma Barranquero |
Subject: |
[Emacs-diffs] trunk r113242: lisp/desktop.el: More fixes to frame restoration. |
Date: |
Mon, 01 Jul 2013 03:29:55 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 113242
revision-id: address@hidden
parent: address@hidden
committer: Juanma Barranquero <address@hidden>
branch nick: trunk
timestamp: Mon 2013-07-01 05:29:46 +0200
message:
lisp/desktop.el: More fixes to frame restoration.
(desktop-restore-frames): Rename from desktop-save-windows.
(desktop-restore-in-current-display): New customization option.
(desktop--excluded-frame-parameters): Add `font'.
(desktop--save-frames): Rename from desktop--save-windows.
(desktop--restore-in-this-display-p): New function.
(desktop--make-full-frame): Remove unwanted width/height from
full(width|height) frames.
(desktop--restore-frames): Rename from desktop--restore-windows.
Obey desktop-restore-current-display. Do not delete old frames or
select a new frame unless we were able to restore at least one frame.
modified:
etc/NEWS news-20100311060928-aoit31wvzf25yr1z-1
lisp/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1432
lisp/desktop.el desktop.el-20091113204419-o5vbwnq5f7feedwu-591
=== modified file 'etc/NEWS'
--- a/etc/NEWS 2013-06-30 22:29:23 +0000
+++ b/etc/NEWS 2013-07-01 03:29:46 +0000
@@ -252,7 +252,7 @@
*** `desktop-auto-save-timeout' defines the number of seconds between
auto-saves of the desktop.
-*** `desktop-save-windows' enables saving and restoring the window/frame
+*** `desktop-restore-frames enables saving and restoring the window/frame
configuration.
** Dired
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2013-07-01 00:19:15 +0000
+++ b/lisp/ChangeLog 2013-07-01 03:29:46 +0000
@@ -1,3 +1,16 @@
+2013-07-01 Juanma Barranquero <address@hidden>
+
+ * desktop.el (desktop-restore-frames): Rename from desktop-save-windows.
+ (desktop-restore-in-current-display): New customization option.
+ (desktop--excluded-frame-parameters): Add `font'.
+ (desktop--save-frames): Rename from desktop--save-windows.
+ (desktop--restore-in-this-display-p): New function.
+ (desktop--make-full-frame): Remove unwanted width/height from
+ full(width|height) frames.
+ (desktop--restore-frames): Rename from desktop--restore-windows.
+ Obey desktop-restore-current-display. Do not delete old frames or
+ select a new frame unless we were able to restore at least one frame.
+
2013-06-30 Michal Nazarewicz <address@hidden>
* files.el (find-file-noselect): Simplify conditional expression.
=== modified file 'lisp/desktop.el'
--- a/lisp/desktop.el 2013-06-30 05:08:23 +0000
+++ b/lisp/desktop.el 2013-07-01 03:29:46 +0000
@@ -371,12 +371,19 @@
:type '(repeat symbol)
:group 'desktop)
-(defcustom desktop-save-windows nil
+(defcustom desktop-restore-frames nil
"When non-nil, save window/frame configuration to desktop file."
:type 'boolean
:group 'desktop
:version "24.4")
+(defcustom desktop-restore-in-current-display nil
+ "When non-nil, frames are restored in the current display.
+Otherwise they are restored, if possible, in their original displays."
+ :type 'boolean
+ :group 'desktop
+ :version "24.4")
+
(defcustom desktop-file-name-format 'absolute
"Format in which desktop file names should be saved.
Possible values are:
@@ -872,6 +879,7 @@
buffer-predicate
buried-buffer-list
explicit-name
+ font
font-backend
minibuffer
name
@@ -891,12 +899,12 @@
(push param params)))
params))
-(defun desktop--save-windows ()
+(defun desktop--save-frames ()
"Save window/frame state, as a global variable.
Intended to be called from `desktop-save'.
Internal use only."
(setq desktop--saved-states
- (and desktop-save-windows
+ (and desktop-restore-frames
(mapcar (lambda (frame)
(cons (desktop--filter-frame-parms frame)
(window-state-get (frame-root-window frame) t)))
@@ -944,7 +952,7 @@
(insert "\n;; Global section:\n")
;; Called here because we save the window/frame state as a global
;; variable for compatibility with previous Emacsen.
- (desktop--save-windows)
+ (desktop--save-frames)
(mapc (function desktop-outvar) desktop-globals-to-save)
(when (memq 'kill-ring desktop-globals-to-save)
(insert
@@ -1003,6 +1011,10 @@
(defvar desktop-lazy-timer nil)
;; ----------------------------------------------------------------------------
+(defun desktop--restore-in-this-display-p ()
+ (or desktop-restore-in-current-display
+ (and (eq system-type 'windows-nt) (not (display-graphic-p)))))
+
(defun desktop--find-frame-in-display (frames display)
(let (result)
(while (and frames (not result))
@@ -1017,47 +1029,53 @@
(params '((visibility)))
frame)
(when width
- (setq params (append `((user-size . t) (width . ,width)) params)))
+ (setq params (append `((user-size . t) (width . ,width)) params)
+ config (assq-delete-all 'height config)))
(when height
- (setq params (append `((user-size . t) (height . ,height)) params)))
+ (setq params (append `((user-size . t) (height . ,height)) params)
+ config (assq-delete-all 'width config)))
(setq frame (make-frame-on-display display params))
(modify-frame-parameters frame config)
frame))
-(defun desktop--restore-windows ()
+(defun desktop--restore-frames ()
"Restore window/frame configuration.
Internal use only."
- (when (and desktop-save-windows desktop--saved-states)
+ (when (and desktop-restore-frames desktop--saved-states)
(let ((frames (frame-list))
+ (current (frame-parameter nil 'display))
(selected nil))
(dolist (state desktop--saved-states)
(condition-case err
- (let* ((fconfig (car state))
- (display (cdr (assq 'display fconfig)))
- (full (cdr (assq 'fullscreen fconfig)))
+ (let* ((config (car state))
+ (display (if (desktop--restore-in-this-display-p)
+ (setcdr (assq 'display config) current)
+ (cdr (assq 'display config))))
+ (full (cdr (assq 'fullscreen config)))
(frame (and (not full)
(desktop--find-frame-in-display frames
display))))
(cond (full
;; treat fullscreen/maximized frames specially
- (setq frame (desktop--make-full-frame full display
fconfig)))
+ (setq frame (desktop--make-full-frame full display
config)))
(frame
;; found a frame in the right display -- reuse
(setq frames (delq frame frames))
- (modify-frame-parameters frame fconfig))
+ (modify-frame-parameters frame config))
(t
;; no frames in the display -- make a new one
- (setq frame (make-frame-on-display display fconfig))))
+ (setq frame (make-frame-on-display display config))))
;; restore windows
(window-state-put (cdr state) (frame-root-window frame) 'safe)
(unless selected (setq selected frame)))
(error
(message "Error restoring frame: %S" (error-message-string err)))))
- ;; make sure the original selected frame is visible and selected
- (unless (or (frame-parameter selected 'visibility) (daemonp))
- (modify-frame-parameters selected '((visibility . t))))
- (select-frame-set-input-focus selected)
- ;; delete any remaining frames
- (mapc #'delete-frame frames))))
+ (when selected
+ ;; make sure the original selected frame is visible and selected
+ (unless (or (frame-parameter selected 'visibility) (daemonp))
+ (modify-frame-parameters selected '((visibility . t))))
+ (select-frame-set-input-focus selected)
+ ;; delete any remaining frames
+ (mapc #'delete-frame frames)))))
;;;###autoload
(defun desktop-read (&optional dirname)
@@ -1127,7 +1145,7 @@
(switch-to-buffer (car (buffer-list)))
(run-hooks 'desktop-delay-hook)
(setq desktop-delay-hook nil)
- (desktop--restore-windows)
+ (desktop--restore-frames)
(run-hooks 'desktop-after-read-hook)
(message "Desktop: %d buffer%s restored%s%s."
desktop-buffer-ok-count
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r113242: lisp/desktop.el: More fixes to frame restoration.,
Juanma Barranquero <=