]> git.eshelyaron.com Git - emacs.git/commitdiff
(frame-inherited-parameters): New var.
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 10 Oct 2007 20:18:45 +0000 (20:18 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 10 Oct 2007 20:18:45 +0000 (20:18 +0000)
(make-frame): Use it.

etc/NEWS
lisp/ChangeLog
lisp/frame.el

index 0a1c5263d95ef6a4bcb325426531504c680c0ce7..74ed0d9ab978d82b786dfde68df88c70599b31d9 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -262,6 +262,8 @@ supported on other platforms, but not on Windows due to using the winsock
 \f
 * Lisp Changes in Emacs 23.1
 
+** `frame-inherited-parameters' lets new frames inherit parameters from
+the selected frame.
 ** New keymap `input-decode-map' overrides like key-translation-map, but
 applies before function-key-map.  Also it is terminal-local contrary to
 key-translation-map.  Terminal-specific key-sequences are generally added to
index 0cf312e3871e67760292fb4b1389278e2f6cb789..11c8b15107fbfb607b1046062c324c53f5f8248b 100644 (file)
@@ -1,5 +1,8 @@
 2007-10-10  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * frame.el (frame-inherited-parameters): New var.
+       (make-frame): Use it.
+
        * font-lock.el (lisp-font-lock-keywords-2): Remove let-environment.
 
        * env.el (let-environment): Remove.  Unused.
index d968880426681fd5a0c8aba698d6ed4dc87f8ddf..656a462e7c963e20e04d85f48564f8c7d6cfebd0 100644 (file)
@@ -673,6 +673,10 @@ The functions are run with one arg, the newly created frame.")
 ;; Alias, kept temporarily.
 (define-obsolete-function-alias 'new-frame 'make-frame "22.1")
 
+(defvar frame-inherited-parameters '(environment client)
+  ;; FIXME: Shouldn't we add `font' here as well?
+  "Parameters `make-frame' copies from the `selected-frame' to the new frame.")
+
 (defun make-frame (&optional parameters)
   "Return a newly created frame displaying the current buffer.
 Optional argument PARAMETERS is an alist of parameters for the new frame.
@@ -723,15 +727,11 @@ setup is for focus to follow the pointer."
     (run-hooks 'before-make-frame-hook)
     (setq frame (funcall frame-creation-function (append parameters (cdr (assq w window-system-default-frame-alist)))))
     (normal-erase-is-backspace-setup-frame frame)
-    ;; Inherit the 'environment and 'client parameters.
-    (let ((env (frame-parameter oldframe 'environment))
-         (client (frame-parameter oldframe 'client)))
-      (if (not (framep env))
-         (setq env oldframe))
-      (if (and env (not (assq 'environment parameters)))
-         (set-frame-parameter frame 'environment env))
-      (if (and client (not (assq 'client parameters)))
-         (set-frame-parameter frame 'client client)))
+    ;; Inherit the original frame's parameters.
+    (dolist (param frame-inherited-parameters)
+      (unless (assq param parameters)   ;Overridden by explicit parameters.
+        (let ((val (frame-parameter oldframe param)))
+          (when val (set-frame-parameter frame param val)))))
     (run-hook-with-args 'after-make-frame-functions frame)
     frame))