(Fread_file_name): Correct handling of dollars in file
[bpt/emacs.git] / lisp / frame.el
index ba9d089..d4947f4 100644 (file)
@@ -32,7 +32,7 @@ function, which should take an alist of parameters as its argument.")
 ;;; The initial value given here for used to ask for a minibuffer.
 ;;; But that's not necessary, because the default is to have one.
 ;;; By not specifying it here, we let an X resource specify it.
-(defvar initial-frame-alist nil
+(defcustom initial-frame-alist nil
   "Alist of frame parameters for creating the initial X window frame.
 You can set this in your `.emacs' file; for example,
  (setq initial-frame-alist '((top . 1) (left . 1) (width . 80) (height . 55)))
@@ -51,7 +51,11 @@ as it appears, you need to use this three-step process:
 * Set `default-frame-alist' to override these options so that they
   don't affect subsequent frames.
 * Set `initial-frame-alist' in a way that matches the X resources,
-  to override what you put in `default-frame-alist'.")
+  to override what you put in `default-frame-alist'."
+  :type '(repeat (cons :format "%v"
+                      (symbol :tag "Parameter")
+                      (sexp :tag "Value")))
+  :group 'frames)
 
 (defvar minibuffer-frame-alist '((width . 80) (height . 2))
   "Alist of frame parameters for initially creating a minibuffer frame.
@@ -414,6 +418,8 @@ These supersede the values given in `default-frame-alist'."
   "Make a frame on display DISPLAY.
 The optional second argument PARAMETERS specifies additional frame parameters."
   (interactive "sMake frame on display: ")
+  (or (string-match "\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'" display)
+      (error "Invalid display, not HOST:SERVER or HOST:SERVER.SCREEN"))
   (make-frame (cons (cons 'display display) parameters)))
 
 (defun make-frame-command ()
@@ -500,7 +506,8 @@ the user during startup."
 (defcustom focus-follows-mouse t
   "*Non-nil if window system changes focus when you move the mouse."
   :type 'boolean
-  :group 'frames)
+  :group 'frames
+  :version "20.3")
 
 (defun other-frame (arg)
   "Select the ARG'th different visible frame, and raise it.
@@ -540,29 +547,30 @@ A negative ARG moves in the opposite order."
     falist))
 
 (defvar frame-name-history nil)
-(defvar frame-names-alist nil)
 (defun select-frame-by-name (name)
   "Select the frame whose name is NAME and raise it.
 If there is no frame by that name, signal an error."
   (interactive
-   (let (input default)
-     (setq frame-names-alist (make-frame-names-alist))
-     (setq default (car (car frame-names-alist)))
-     (setq input
-          (completing-read
-           (format "Select Frame (default %s): " default)
-           frame-names-alist nil t nil 'frame-name-history))
+   (let* ((frame-names-alist (make-frame-names-alist))
+          (default (car (car frame-names-alist)))
+          (input (completing-read
+                  (format "Select Frame (default %s): " default)
+                  frame-names-alist nil t nil 'frame-name-history)))
      (if (= (length input) 0)
         (list default)
        (list input))))
-  (or (interactive-p)
-      (setq frame-names-alist (make-frame-names-alist)))
-  (let ((frame (cdr (assoc name frame-names-alist))))
+  (let* ((frame-names-alist (make-frame-names-alist))
+        (frame (cdr (assoc name frame-names-alist))))
     (or frame
        (error "There is no frame named `%s'" name))
     (make-frame-visible frame)
     (raise-frame frame)
-    (select-frame frame)))
+    (select-frame frame)
+    ;; Ensure, if possible, that frame gets input focus.
+    (if (eq window-system 'w32)
+       (w32-focus-frame frame)
+      (when focus-follows-mouse
+       (set-mouse-position (selected-frame) (1- (frame-width)) 0)))))
 \f
 ;;;; Frame configurations
 
@@ -623,7 +631,7 @@ is given and non-nil, the unwanted frames are iconified instead."
 
 (defun frame-parameter (frame parameter)
   "Return FRAME's value for parameter PARAMETER.
-If FRAME is omitted, describe the currently selected frame."
+If FRAME is nil, describe the currently selected frame."
   (cdr (assq parameter (frame-parameters frame))))
 
 (defun frame-height (&optional frame)