* wl.el (wl-other-frame): Removed garbages.
[elisp/wanderlust.git] / wl / wl.el
index a95c20d..cbff2e6 100644 (file)
--- a/wl/wl.el
+++ b/wl/wl.el
@@ -666,9 +666,11 @@ Entering Plugged mode calls the value of `wl-plugged-mode-hook'."
                        (list wl-folder-buffer-name
                              wl-plugged-buf-name)
                        "\\|")))
-    (if (and wl-folder-use-frame
-            (> (length (visible-frame-list)) 1))
-       (delete-frame))
+    (when wl-delete-startup-frame-function
+      (funcall wl-delete-startup-frame-function))
+;;    (if (and wl-folder-use-frame
+;;          (> (length (visible-frame-list)) 1))
+;;     (delete-frame))
     (setq wl-init nil)
     (remove-hook 'kill-emacs-hook 'wl-save-status)
     t)
@@ -703,22 +705,25 @@ Entering Plugged mode calls the value of `wl-plugged-mode-hook'."
 (defun wl-check-environment (no-check-folder)
   (unless wl-from (error "Please set `wl-from'"))
   ;; Message-ID
-  (unless (string-match "[^.]\\.[^.]" (or wl-message-id-domain
-                                         (if wl-local-domain
-                                             (concat (system-name)
-                                                     "." wl-local-domain)
-                                           (system-name))))
-    (error "Please set `wl-local-domain' to get valid FQDN"))
-  (if (string-match "@" (or wl-message-id-domain
-                           (if wl-local-domain
-                               (concat (system-name)
-                                       "." wl-local-domain)
-                             (system-name))))
-      (error "Please remove `@' from `wl-message-id-domain'"))
-  (if (string= wl-local-domain "localdomain")
-      (error "Please set `wl-local-domain'"))
-  (if (string= wl-message-id-domain "localhost.localdomain")
-      (error "Please set `wl-message-id-domain'"))
+  (let (from domain)
+    (if wl-message-id-use-wl-from
+       (if (and (setq from (wl-address-header-extract-address wl-from))
+                (string-match "^\\(.*\\)@\\(.*\\)$" from))
+           (setq domain (match-string 2 from))
+         (error "Please set `wl-from' to get valid Message-ID string."))
+      (setq domain
+           (or wl-message-id-domain
+               (if wl-local-domain
+                   (concat (system-name) "." wl-local-domain)
+                 (system-name)))))
+    (unless (string-match "[^.]\\.[^.]" domain)
+      (error "Please set `wl-local-domain' to get valid FQDN"))
+    (if (string-match "@" domain)
+       (error "Please remove `@' from `wl-message-id-domain'"))
+    (if (string= wl-local-domain "localdomain")
+       (error "Please set `wl-local-domain'"))
+    (if (string= wl-message-id-domain "localhost.localdomain")
+       (error "Please set `wl-message-id-domain'")))
   ;; folders
   (when (not no-check-folder)
     (let ((draft-folder (wl-folder-get-elmo-folder wl-draft-folder))
@@ -758,7 +763,7 @@ Entering Plugged mode calls the value of `wl-plugged-mode-hook'."
            (make-directory wl-temporary-file-directory)
          (error "Temp directory is not created"))))))
 
-(defconst wl-check-type-variables
+(defconst wl-check-variables-alist
   '((numberp . elmo-pop3-default-port)
     (symbolp . elmo-pop3-default-authenticate-type)
     (numberp . elmo-imap4-default-port)
@@ -767,8 +772,9 @@ Entering Plugged mode calls the value of `wl-plugged-mode-hook'."
     (numberp . wl-pop-before-smtp-port)
     (symbolp . wl-pop-before-smtp-authenticate-type)))
 
-(defun wl-check-type ()
-  (let ((type-variables wl-check-type-variables))
+(defun wl-check-variables ()
+  (let ((type-variables wl-check-variables-alist)
+       type)
     (while (setq type (car type-variables))
       (if (and (eval (cdr type))
               (not (funcall (car type)
@@ -779,6 +785,16 @@ Entering Plugged mode calls the value of `wl-plugged-mode-hook'."
                 (eval (cdr type))))
       (setq type-variables (cdr type-variables)))))
 
+(defun wl-check-variables-2 ()
+  (if (< wl-message-buffer-cache-size 1)
+      (error "`wl-message-buffer-cache-size' must be larger than 0."))
+  (when wl-message-buffer-prefetch-depth
+    (if (not (< wl-message-buffer-prefetch-depth
+               wl-message-buffer-cache-size))
+       (error (concat
+               "`wl-message-buffer-prefetch-depth' must be smaller than "
+               "`wl-message-buffer-cache-size' - 1.")))))
+
 ;;;###autoload
 (defun wl (&optional arg)
   "Start Wanderlust -- Yet Another Message Interface On Emacsen.
@@ -801,8 +817,11 @@ If ARG (prefix argument) is specified, folder checkings are skipped."
                    (message "Checking environment...")
                    (wl-check-environment arg)
                    (message "Checking environment...done"))
-               (error)
-               (quit)))
+               ((error quit))))
+         (message "Checking type of variables...")
+         (wl-check-variables)
+         (wl-check-variables-2)
+         (message "Checking type of variables...done")
          (wl-plugged-init (wl-folder arg))
          (unless arg
            (run-hooks 'wl-auto-check-folder-pre-hook)
@@ -812,12 +831,46 @@ If ARG (prefix argument) is specified, folder checkings are skipped."
       (error
        (if (buffer-live-p demo-buf)
           (kill-buffer demo-buf))
+       (setq wl-init nil)
        (signal (car obj)(cdr obj)))
       (quit))
     (if (buffer-live-p demo-buf)
        (kill-buffer demo-buf)))
   (run-hooks 'wl-hook))
 
+(defvar wl-delete-startup-frame-function nil)
+
+;;;###autoload
+(defun wl-other-frame (&optional arg)
+  "Pop up a frame to read messages via Wanderlust."
+  (interactive)
+  (let ((focusing-functions (append '(raise-frame select-frame)
+                                   (if (fboundp 'x-focus-frame)
+                                       '(x-focus-frame)
+                                     '(focus-frame))))
+       (folder (get-buffer wl-folder-buffer-name))
+       window frame wl-folder-use-frame)
+    (if (and folder
+            (setq window (get-buffer-window folder t))
+            (window-live-p window)
+            (setq frame (window-frame window)))
+       (progn
+         (while focusing-functions
+           (funcall (car focusing-functions) frame)
+           (setq focusing-functions (cdr focusing-functions)))
+         (wl arg))
+      (setq frame (make-frame))
+      (while focusing-functions
+       (funcall (car focusing-functions) frame)
+       (setq focusing-functions (cdr focusing-functions)))
+      (setq wl-delete-startup-frame-function
+           `(lambda ()
+              (setq wl-delete-startup-frame-function nil)
+              (let ((frame ,frame))
+                (if (eq (selected-frame) frame)
+                    (delete-frame frame)))))
+      (wl arg))))
+
 ;; Define some autoload functions WL might use.
 (eval-and-compile
   ;; This little mapcar goes through the list below and marks the