gnus-win.el (gnus-configure-frame): Spelling fix
[gnus] / lisp / gnus-win.el
index 2f0f19a..efe2a31 100644 (file)
@@ -1,7 +1,6 @@
 ;;; gnus-win.el --- window configuration functions for Gnus
 
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2012 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -39,9 +38,6 @@
   :group 'gnus-windows
   :type 'boolean)
 
-(defvar gnus-window-configuration nil
-  "Obsolete variable.  See `gnus-buffer-configuration'.")
-
 (defcustom gnus-window-min-width 2
   "*Minimum width of Gnus buffers."
   :group 'gnus-windows
@@ -58,7 +54,7 @@
   :type 'boolean)
 
 (defcustom gnus-use-frames-on-any-display nil
-  "*If non-nil, frames on all displays will be considered useable by Gnus.
+  "*If non-nil, frames on all displays will be considered usable by Gnus.
 When nil, only frames on the same display as the selected frame will be
 used to display Gnus windows."
   :version "22.1"
@@ -222,12 +218,6 @@ See the Gnus manual for an explanation of the syntax used.")
        (delete-frame (car gnus-created-frames))))
     (pop gnus-created-frames)))
 
-(defun gnus-window-configuration-element (list)
-  (while (and list
-             (not (assq (car list) gnus-window-configuration)))
-    (pop list))
-  (cadr (assq (car list) gnus-window-configuration)))
-
 ;;;###autoload
 (defun gnus-add-configuration (conf)
   "Add the window configuration CONF to `gnus-buffer-configuration'."
@@ -249,10 +239,11 @@ See the Gnus manual for an explanation of the syntax used.")
 
 (defun gnus-configure-frame (split &optional window)
   "Split WINDOW according to SPLIT."
-  (let* ((current-window (or (get-buffer-window (current-buffer)) (selected-window)))
+  (let* ((current-window (or (get-buffer-window (current-buffer))
+                             (selected-window)))
          (window (or window current-window)))
     (select-window window)
-    ;; The SPLIT might be something that is to be evaled to
+    ;; The SPLIT might be something that is to be evalled to
     ;; return a new SPLIT.
     (while (and (not (assq (car split) gnus-window-to-buffer))
                (symbolp (car split)) (fboundp (car split)))
@@ -278,8 +269,22 @@ See the Gnus manual for an explanation of the syntax used.")
            (error "Invalid buffer type: %s" type))
          (let ((buf (gnus-get-buffer-create
                      (gnus-window-to-buffer-helper buffer))))
-           (if (eq buf (window-buffer (selected-window))) (set-buffer buf)
-             (switch-to-buffer buf)))
+           (when (buffer-name buf)
+             (cond
+               ((eq buf (window-buffer (selected-window)))
+                (set-buffer buf))
+               ((eq t (window-dedicated-p))
+                ;; If the window is hard-dedicated, we have a problem because
+                ;; we just can't do what we're asked.  But signaling an error,
+                ;; like `switch-to-buffer' would do, is not an option because
+                ;; it would prevent things like "^" (to jump to the *Servers*)
+                ;; in a dedicated *Group*.
+                ;; FIXME: Maybe a better/additional fix would be to change
+                ;; gnus-configure-windows so that when called
+                ;; from a hard-dedicated frame, it creates (and
+                ;; configures) a new frame, leaving the dedicated frame alone.
+                (pop-to-buffer buf))
+               (t (switch-to-buffer buf)))))
          (when (memq 'frame-focus split)
            (setq gnus-window-frame-focus window))
          ;; We return the window if it has the `point' spec.
@@ -348,9 +353,9 @@ See the Gnus manual for an explanation of the syntax used.")
          ;; fashion.
          (setq comp-subs (nreverse comp-subs))
          (while comp-subs
-           (if (null (cdr comp-subs))
-               (setq new-win window)
-             (setq new-win
+           (setq new-win
+                  (if (null (cdr comp-subs))
+                      window
                    (split-window window (cadar comp-subs)
                                  (eq type 'horizontal))))
            (setq result (or (gnus-configure-frame
@@ -366,8 +371,13 @@ See the Gnus manual for an explanation of the syntax used.")
 (defvar gnus-frame-split-p nil)
 
 (defun gnus-configure-windows (setting &optional force)
-  (if (window-configuration-p setting)
-      (set-window-configuration setting)
+  (cond
+   ((null setting)
+    ;; Do nothing.
+    )
+   ((window-configuration-p setting)
+    (set-window-configuration setting))
+   (t
     (setq gnus-current-window-configuration setting)
     (setq force (or force gnus-always-force-window-configuration))
     (let ((split (if (symbolp setting)
@@ -418,7 +428,7 @@ See the Gnus manual for an explanation of the syntax used.")
           (run-hooks 'gnus-configure-windows-hook)
           (when gnus-window-frame-focus
             (gnus-select-frame-set-input-focus
-             (window-frame gnus-window-frame-focus))))))))
+             (window-frame gnus-window-frame-focus)))))))))
 
 (defun gnus-delete-windows-in-gnusey-frames ()
   "Do a `delete-other-windows' in all frames that have Gnus windows."
@@ -447,14 +457,10 @@ should have point."
        type buffer win buf)
     (while (and (setq split (pop stack))
                all-visible)
-      ;; Be backwards compatible.
-      (when (vectorp split)
-       (setq split (append split nil)))
-      (when (or (consp (car split))
-               (vectorp (car split)))
+      (when (consp (car split))
        (push 1.0 split)
        (push 'vertical split))
-      ;; The SPLIT might be something that is to be evaled to
+      ;; The SPLIT might be something that is to be evalled to
       ;; return a new SPLIT.
       (while (and (not (assq (car split) gnus-window-to-buffer))
                  (symbolp (car split)) (fboundp (car split)))
@@ -471,6 +477,7 @@ should have point."
        (unless buffer
          (error "Invalid buffer type: %s" type))
        (if (and (setq buf (get-buffer (gnus-window-to-buffer-helper buffer)))
+                (buffer-live-p buf)
                 (setq win (gnus-get-buffer-window buf t)))
            (if (memq 'point split)
                (setq all-visible win))
@@ -483,6 +490,7 @@ should have point."
       all-visible)))
 
 (defun gnus-window-top-edge (&optional window)
+  "Return the top coordinate of WINDOW."
   (nth 1 (window-edges window)))
 
 (defun gnus-remove-some-windows ()