gnus-win.el (gnus-configure-frame): Spelling fix
[gnus] / lisp / gnus-win.el
index 4956be9..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 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"
@@ -68,12 +64,10 @@ used to display Gnus windows."
 (defvar gnus-buffer-configuration
   '((group
      (vertical 1.0
-              (group 1.0 point)
-              (if gnus-carpal '(group-carpal 4))))
+              (group 1.0 point)))
     (summary
      (vertical 1.0
-              (summary 1.0 point)
-              (if gnus-carpal '(summary-carpal 4))))
+              (summary 1.0 point)))
     (article
      (cond
       (gnus-use-trees
@@ -84,16 +78,13 @@ used to display Gnus windows."
       (t
        '(vertical 1.0
                  (summary 0.25 point)
-                 (if gnus-carpal '(summary-carpal 4))
                  (article 1.0)))))
     (server
      (vertical 1.0
-              (server 1.0 point)
-              (if gnus-carpal '(server-carpal 2))))
+              (server 1.0 point)))
     (browse
      (vertical 1.0
-              (browse 1.0 point)
-              (if gnus-carpal '(browse-carpal 2))))
+              (browse 1.0 point)))
     (message
      (vertical 1.0
               (message 1.0 point)))
@@ -107,6 +98,9 @@ used to display Gnus windows."
      (vertical 1.0
               (summary 0.25)
               (faq 1.0 point)))
+    (only-article
+     (vertical 1.0
+              (article 1.0 point)))
     (edit-article
      (vertical 1.0
               (article 1.0 point)))
@@ -142,7 +136,6 @@ used to display Gnus windows."
     (pipe
      (vertical 1.0
               (summary 0.25 point)
-              (if gnus-carpal '(summary-carpal 4))
               ("*Shell Command Output*" 1.0)))
     (bug
      (vertical 1.0
@@ -186,10 +179,6 @@ See the Gnus manual for an explanation of the syntax used.")
     (edit-group . gnus-group-edit-buffer)
     (edit-form . gnus-edit-form-buffer)
     (edit-server . gnus-server-edit-buffer)
-    (group-carpal . gnus-carpal-group-buffer)
-    (summary-carpal . gnus-carpal-summary-buffer)
-    (server-carpal . gnus-carpal-server-buffer)
-    (browse-carpal . gnus-carpal-browse-buffer)
     (edit-score . gnus-score-edit-buffer)
     (message . gnus-message-buffer)
     (mail . gnus-message-buffer)
@@ -229,56 +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)))
-
-(defun gnus-windows-old-to-new (setting)
-  ;; First we take care of the really, really old Gnus 3 actions.
-  (when (symbolp setting)
-    (setq setting
-         ;; Take care of ooold GNUS 3.x values.
-         (cond ((eq setting 'SelectArticle) 'article)
-               ((memq setting '(SelectNewsgroup SelectSubject ExpandSubject))
-                'summary)
-               ((memq setting '(ExitNewsgroup)) 'group)
-               (t setting))))
-  (if (or (listp setting)
-         (not (and gnus-window-configuration
-                   (memq setting '(group summary article)))))
-      setting
-    (let* ((elem
-           (cond
-            ((eq setting 'group)
-             (gnus-window-configuration-element
-              '(group newsgroups ExitNewsgroup)))
-            ((eq setting 'summary)
-             (gnus-window-configuration-element
-              '(summary SelectNewsgroup SelectSubject ExpandSubject)))
-            ((eq setting 'article)
-             (gnus-window-configuration-element
-              '(article SelectArticle)))))
-          (total (apply '+ elem))
-          (types '(group summary article))
-          (pbuf (if (eq setting 'newsgroups) 'group 'summary))
-          (i 0)
-          perc out)
-      (while (< i 3)
-       (or (not (numberp (nth i elem)))
-           (zerop (nth i elem))
-           (progn
-             (setq perc (if (= i 2)
-                            1.0
-                          (/ (float (nth i elem)) total)))
-             (push (if (eq pbuf (nth i types))
-                       (list (nth i types) perc 'point)
-                     (list (nth i types) perc))
-                   out)))
-       (incf i))
-      `(vertical 1.0 ,@(nreverse out)))))
-
 ;;;###autoload
 (defun gnus-add-configuration (conf)
   "Add the window configuration CONF to `gnus-buffer-configuration'."
@@ -300,19 +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))))
-    (unless window
-      (setq window current-window))
+  (let* ((current-window (or (get-buffer-window (current-buffer))
+                             (selected-window)))
+         (window (or window current-window)))
     (select-window window)
-    ;; This might be an old-style buffer config.
-    (when (vectorp split)
-      (setq split (append split nil)))
-    (when (or (consp (car split))
-             (vectorp (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)))
@@ -338,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.
@@ -408,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
@@ -426,60 +371,64 @@ 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))
-    (setq setting (gnus-windows-old-to-new setting))
     (let ((split (if (symbolp setting)
-                    (cadr (assq setting gnus-buffer-configuration))
-                  setting))
-         all-visible)
+                     (cadr (assq setting gnus-buffer-configuration))
+                   setting))
+          all-visible)
 
       (setq gnus-frame-split-p nil)
 
       (unless split
-       (error "No such setting in `gnus-buffer-configuration': %s" setting))
+        (error "No such setting in `gnus-buffer-configuration': %s" setting))
 
       (if (and (setq all-visible (gnus-all-windows-visible-p split))
-              (not force))
-         ;; All the windows mentioned are already visible, so we just
-         ;; put point in the assigned buffer, and do not touch the
-         ;; winconf.
-         (select-window all-visible)
-
-       ;; Make sure "the other" buffer, nntp-server-buffer, is live.
-       (unless (gnus-buffer-live-p nntp-server-buffer)
-         (nnheader-init-server-buffer))
-
-       ;; Either remove all windows or just remove all Gnus windows.
-       (let ((frame (selected-frame)))
-         (unwind-protect
-             (if gnus-use-full-window
-                 ;; We want to remove all other windows.
-                 (if (not gnus-frame-split-p)
-                     ;; This is not a `frame' split, so we ignore the
-                     ;; other frames.
-                     (delete-other-windows)
-                 ;; This is a `frame' split, so we delete all windows
-                   ;; on all frames.
-                   (gnus-delete-windows-in-gnusey-frames))
-               ;; Just remove some windows.
-               (gnus-remove-some-windows)
-               (if (featurep 'xemacs)
-                   (switch-to-buffer nntp-server-buffer)
-                 (set-buffer nntp-server-buffer)))
-           (select-frame frame)))
-
-       (let (gnus-window-frame-focus)
-         (if (featurep 'xemacs)
-             (switch-to-buffer nntp-server-buffer)
-           (set-buffer nntp-server-buffer))
-         (gnus-configure-frame split)
-         (run-hooks 'gnus-configure-windows-hook)
-         (when gnus-window-frame-focus
-           (gnus-select-frame-set-input-focus
-            (window-frame gnus-window-frame-focus))))))))
+               (not force))
+          ;; All the windows mentioned are already visible, so we just
+          ;; put point in the assigned buffer, and do not touch the
+          ;; winconf.
+          (select-window all-visible)
+
+        ;; Make sure "the other" buffer, nntp-server-buffer, is live.
+        (unless (gnus-buffer-live-p nntp-server-buffer)
+          (nnheader-init-server-buffer))
+
+        ;; Either remove all windows or just remove all Gnus windows.
+        (let ((frame (selected-frame)))
+          (unwind-protect
+              (if gnus-use-full-window
+                  ;; We want to remove all other windows.
+                  (if (not gnus-frame-split-p)
+                      ;; This is not a `frame' split, so we ignore the
+                      ;; other frames.
+                      (delete-other-windows)
+                    ;; This is a `frame' split, so we delete all windows
+                    ;; on all frames.
+                    (gnus-delete-windows-in-gnusey-frames))
+                ;; Just remove some windows.
+                (gnus-remove-some-windows)
+                (if (featurep 'xemacs)
+                    (switch-to-buffer nntp-server-buffer)
+                  (set-buffer nntp-server-buffer)))
+            (select-frame frame)))
+
+        (let (gnus-window-frame-focus)
+          (if (featurep 'xemacs)
+              (switch-to-buffer nntp-server-buffer)
+            (set-buffer nntp-server-buffer))
+          (gnus-configure-frame split)
+          (run-hooks 'gnus-configure-windows-hook)
+          (when gnus-window-frame-focus
+            (gnus-select-frame-set-input-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."
@@ -508,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)))
@@ -532,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))
@@ -544,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 ()