;;; wl.el -- Wanderlust bootstrap.
-;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+;; Copyright (C) 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+;; Copyright (C) 1998,1999,2000 Masahiro MURATA <muse@ba2.so-net.ne.jp>
;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Masahiro MURATA <muse@ba2.so-net.ne.jp>
;; Keywords: mail, net news
;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
;;
;;; Commentary:
-;;
+;;
;;; Code:
-;;
+;;
+
+(require 'elmo)
+(require 'wl-version) ; reduce recursive-load-depth
-(require 'elmo2)
;; from x-face.el
(unless (and (fboundp 'defgroup)
(fboundp 'defcustom))
(require 'wl-vars)
(require 'wl-util)
-(if wl-on-xemacs
- (require 'wl-xmas)
- (if wl-on-nemacs
- (require 'wl-nemacs)
- (require 'wl-mule)))
+(cond (wl-on-xemacs
+ (require 'wl-xmas))
+ (wl-on-emacs21
+ (require 'wl-e21))
+ (wl-on-nemacs
+ (require 'wl-nemacs))
+ (t
+ (require 'wl-mule)))
-(provide 'wl) ; circular dependency
+(provide 'wl) ; circular dependency
(require 'wl-folder)
(require 'wl-summary)
(require 'wl-thread)
(require 'wl-demo)
(require 'wl-highlight)
-(eval-when-compile
+(eval-when-compile
+ (require 'cl)
(require 'smtp)
(require 'wl-score)
(unless wl-on-nemacs
(when make-alist
(wl-make-plugged-alist))
;; Plug status.
- (setq elmo-plugged (setq wl-plugged (elmo-plugged-p)))
- (setq wl-plug-state-indicator
- (if wl-plugged
- wl-plug-state-indicator-on
- wl-plug-state-indicator-off))
+ (setq elmo-plugged (setq wl-plugged (elmo-plugged-p))
+ wl-modeline-plug-status wl-plugged)
(if wl-plugged
- (wl-toggle-plugged t 'flush))
- (force-mode-line-update t))
+ (wl-toggle-plugged t 'flush)))
(defun wl-toggle-plugged (&optional arg queue-flush-only)
(interactive)
(setq wl-plugged nil))
(t (setq wl-plugged (null wl-plugged))))
(elmo-set-plugged wl-plugged))
- (setq elmo-plugged wl-plugged)
+ (setq elmo-plugged wl-plugged
+ wl-modeline-plug-status wl-plugged)
(save-excursion
- (mapcar
- (function
- (lambda (x)
- (set-buffer x)
- (wl-summary-msgdb-save)
- ;; msgdb is saved, but cache is not saved yet.
- (wl-summary-set-message-modified)))
- (wl-collect-summary)))
+ (let ((summaries (wl-collect-summary)))
+ (while summaries
+ (set-buffer (pop summaries))
+ (elmo-folder-commit wl-summary-buffer-elmo-folder)
+ (wl-summary-set-message-modified))))
+ (setq wl-biff-check-folders-running nil)
(if wl-plugged
(progn
;; flush queue!!
- (setq wl-plug-state-indicator wl-plug-state-indicator-on)
(elmo-dop-queue-flush)
+ (unless queue-flush-only (wl-biff-start))
(if (and wl-draft-enable-queuing
wl-auto-flush-queue)
(wl-draft-queue-flush))
(when (and (eq major-mode 'wl-summary-mode)
- (elmo-folder-plugged-p wl-summary-buffer-folder-name))
- (let* ((msgdb-dir (elmo-msgdb-expand-path
- wl-summary-buffer-folder-name))
+ (elmo-folder-plugged-p wl-summary-buffer-elmo-folder))
+ (let* ((msgdb-dir (elmo-folder-msgdb-path
+ wl-summary-buffer-elmo-folder))
(seen-list (elmo-msgdb-seen-load msgdb-dir)))
(setq seen-list
(wl-summary-flush-pending-append-operations seen-list))
(elmo-msgdb-seen-save msgdb-dir seen-list)))
(run-hooks 'wl-plugged-hook))
- (setq wl-plug-state-indicator wl-plug-state-indicator-off)
+ (wl-biff-stop)
(run-hooks 'wl-unplugged-hook))
(force-mode-line-update t))
;;; wl-plugged-mode
(defvar wl-plugged-port-label-alist
- (list (cons elmo-default-nntp-port "nntp")
- (cons elmo-default-imap4-port "imap4")
- (cons elmo-default-pop3-port "pop3")))
+ (list (cons 119 "nntp")
+ (cons 143 "imap4")
+ (cons 110 "pop3")))
;;(cons elmo-pop-before-smtp-port "pop3")
(defconst wl-plugged-switch-variables
'(("Queuing" . wl-draft-enable-queuing)
("AutoFlushQueue" . wl-auto-flush-queue)
("DisconnectedOperation" . elmo-enable-disconnected-operation)))
-
+
(defvar wl-plugged-buf-name "Plugged")
(defvar wl-plugged-mode-map nil)
(defvar wl-plugged-alist nil)
(defvar wl-plugged-dop-queue-alist nil)
(defvar wl-plugged-alist-modified nil)
-(defvar wl-plugged-glyph nil)
-(defvar wl-unplugged-glyph nil)
-
(defvar wl-plugged-mode-menu-spec
'("Plugged"
["Toggle plugged" wl-plugged-toggle t]
(setq major-mode 'wl-plugged-mode)
(setq mode-name "Plugged")
(easy-menu-add wl-plugged-mode-menu)
- (when wl-show-plug-status-on-modeline
- (setq mode-line-format (wl-make-modeline)))
+ (wl-mode-line-buffer-identification)
(setq wl-plugged-switch wl-plugged)
(setq wl-plugged-alist-modified nil)
(setq buffer-read-only t)
(defun wl-plugged-sending-queue-info ()
;; sending queue status
(let (alist msgs sent-via server port)
- (setq msgs (elmo-list-folder wl-queue-folder))
+ (setq msgs (elmo-folder-list-messages
+ (wl-folder-get-elmo-folder wl-queue-folder)))
(while msgs
(setq sent-via (wl-draft-queue-info-operation (car msgs) 'get-sent-via))
(while sent-via
(if (string= last (caar dop-queue))
(wl-append operation (list ope))
;;(setq count (1+ count))
- (when (and last (setq server-info (elmo-folder-portinfo last)))
+ (when (and last (setq server-info (elmo-net-port-info last)))
(setq alist
(wl-append-assoc-list
(cons (car server-info) (nth 1 server-info)) ;; server port
(wl-plugged-sending-queue-status qinfo))))
(insert line "\n"))
(while alist
- (setq server (caaar alist)
- port (cdaar alist)
+ (setq server (nth 0 (caar alist))
+ port (nth 1 (caar alist))
label (nth 1 (car alist))
plugged (nth 2 (car alist))
time (nth 3 (car alist)))
(wl-plugged-redrawing-switch
wl-plugged-port-indent plugged time)
(setq alist (cdr alist))))
+ (sit-for 0)
(set-buffer-modified-p nil))
(defun wl-plugged-change ()
(name (elmo-match-buffer 3))
(plugged (not (string= switch wl-plugged-plug-on)))
(alist wl-plugged-alist)
- server port)
+ server port stream-type name-1)
(cond
((eq indent wl-plugged-port-indent) ;; toggle port plug
(cond
((string-match "\\([^([]*\\)(\\([^)[]+\\))" name)
- (setq port (string-to-int (elmo-match-string 2 name))))
+ (setq port (string-to-int (elmo-match-string 2 name)))
+ (if (string-match "!" (setq name-1 (elmo-match-string 1 name)))
+ (setq stream-type
+ (intern (substring name-1 (match-end 0))))))
(t
(setq port name)))
(setq server (wl-plugged-get-server))
- (elmo-set-plugged plugged server port nil alist))
+ (elmo-set-plugged plugged server port stream-type nil alist))
((eq indent wl-plugged-server-indent) ;; toggle server plug
- (elmo-set-plugged plugged name nil nil alist))
+ (elmo-set-plugged plugged name nil nil nil alist))
((eq indent 0) ;; toggle all plug
- (elmo-set-plugged plugged nil nil nil alist)))
+ (elmo-set-plugged plugged nil nil nil nil alist)))
;; redraw
(wl-plugged-redrawing wl-plugged-alist)
- ;; change wl-plug-state-indicator
+ ;; show plugged status in modeline
(let ((elmo-plugged wl-plugged-switch))
- (setq wl-plugged-switch (elmo-plugged-p))
- (setq wl-plug-state-indicator
- (if wl-plugged-switch
- wl-plug-state-indicator-on
- wl-plug-state-indicator-off))
+ (setq wl-plugged-switch (elmo-plugged-p)
+ wl-modeline-plug-status wl-plugged-switch)
(force-mode-line-update t))))))
(setq wl-plugged-alist-modified t)
(goto-char cur-point)))
(wl-plugged-redrawing wl-plugged-alist)
(goto-char cur-point)
(setq wl-plugged-alist-modified t)
- ;; change wl-plug-state-indicator
- (setq wl-plug-state-indicator
- (if wl-plugged-switch
- wl-plug-state-indicator-on
- wl-plug-state-indicator-off))
+ ;; show plugged status in modeline
+ (setq wl-modeline-plug-status wl-plugged-switch)
(force-mode-line-update t)))
(defun wl-plugged-exit ()
(defun wl-save ()
"Save summary and folder status."
(interactive)
- (wl-save-status 'keep-summary))
+ (wl-save-status 'keep-summary)
+ (run-hooks 'wl-save-hook))
(defun wl-save-status (&optional keep-summary)
(message "Saving summary and folder status...")
(let (summary-buf)
(save-excursion
(let ((summaries (wl-collect-summary)))
- (mapcar
- (function
- (lambda (x)
- (set-buffer x)
+ (while summaries
+ (with-current-buffer (car summaries)
(unless keep-summary
(wl-summary-cleanup-temp-marks))
- (wl-summary-save-status keep-summary)
+ (wl-summary-save-view keep-summary)
+ (elmo-folder-commit wl-summary-buffer-elmo-folder)
(unless keep-summary
- (kill-buffer x))))
- summaries))))
- (wl-refile-alist-save
- wl-refile-alist-file-name wl-refile-alist)
- (wl-refile-alist-save
- wl-refile-msgid-alist-file-name wl-refile-msgid-alist)
+ (kill-buffer (car summaries))))
+ (setq summaries (cdr summaries))))))
+ (wl-refile-alist-save)
(wl-folder-info-save)
(and (featurep 'wl-fldmgr) (wl-fldmgr-exit))
(wl-crosspost-alist-save)
- (message "Saving summary and folder status...done."))
+ (message "Saving summary and folder status...done"))
(defun wl-exit ()
(interactive)
(when (or (not wl-interactive-exit)
- (y-or-n-p "Quit Wanderlust?"))
+ (y-or-n-p "Quit Wanderlust? "))
(elmo-quit)
+ (wl-biff-stop)
(run-hooks 'wl-exit-hook)
(wl-save-status)
(wl-folder-cleanup-variables)
- (elmo-cleanup-variables)
+ (wl-message-buffer-cache-clean-up)
(wl-kill-buffers
(format "^\\(%s\\)$"
(mapconcat 'identity
- (list (format "%s\\(:.*\\)?"
- (default-value 'wl-message-buf-name))
- wl-original-buf-name
- wl-folder-buffer-name)
+ (list wl-folder-buffer-name
+ wl-plugged-buf-name)
"\\|")))
- (elmo-buffer-cache-clean-up)
- (if (fboundp 'mmelmo-cleanup-entity-buffers)
- (mmelmo-cleanup-entity-buffers))
(setq wl-init nil)
(unless wl-on-nemacs
(remove-hook 'kill-emacs-hook 'wl-save-status))
(setq elmo-use-semi nil))
;; defined above.
(wl-mime-setup)
- (fset 'wl-summary-from-func-internal
+ (fset 'wl-summary-from-func-internal
(symbol-value 'wl-summary-from-func))
- (fset 'wl-summary-subject-func-internal
+ (fset 'wl-summary-subject-func-internal
(symbol-value 'wl-summary-subject-func))
- (fset 'wl-summary-subject-filter-func-internal
+ (fset 'wl-summary-subject-filter-func-internal
(symbol-value 'wl-summary-subject-filter-func))
(setq elmo-no-from wl-summary-no-from-message)
(setq elmo-no-subject wl-summary-no-subject-message)
(progn
(message "Checking environment...")
(wl-check-environment arg)
- (message "Checking environment...done.")))
- (if demo-buf
- (kill-buffer demo-buf))
+ (message "Checking environment...done"))
+ demo-buf)
(if succeed
(setq wl-init t))
+ ;; This hook may contain the functions `wl-plugged-init-icons' and
+ ;; `wl-biff-init-icons' for reasons of system internal to accord
+ ;; facilities for the Emacs variants.
(run-hooks 'wl-init-hook)))))
(defun wl-check-environment (no-check-folder)
(require 'mime-setup))
(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)
+ (concat (system-name)
"." wl-local-domain)
- (system-name))))
+ (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'"))
+ ;; folders
(when (not no-check-folder)
- (if (not (eq (elmo-folder-get-type wl-draft-folder) 'localdir))
- (error "%s is not allowed for draft folder" wl-draft-folder))
- (unless (elmo-folder-exists-p wl-draft-folder)
- (if (y-or-n-p
- (format "Draft Folder %s does not exist, create it?"
- wl-draft-folder))
- (elmo-create-folder wl-draft-folder)
- (error "Draft Folder is not created")))
- (if (and wl-draft-enable-queuing
- (not (elmo-folder-exists-p wl-queue-folder)))
- (if (y-or-n-p
- (format "Queue Folder %s does not exist, create it?"
- wl-queue-folder))
- (elmo-create-folder wl-queue-folder)
- (error "Queue Folder is not created")))
- (unless (elmo-folder-exists-p wl-trash-folder)
- (if (y-or-n-p
- (format "Trash Folder %s does not exist, create it?"
- wl-trash-folder))
- (elmo-create-folder wl-trash-folder)
- (error "Trash Folder is not created")))
- (unless (elmo-folder-exists-p elmo-lost+found-folder)
- (elmo-create-folder elmo-lost+found-folder)))
- (unless (file-exists-p wl-tmp-dir)
- (if (y-or-n-p
- (format "Temp directory (to save multipart) %s does not exist, create it now?"
- wl-tmp-dir))
- (make-directory wl-tmp-dir)
- (error "Temp directory is not created"))))
+ (let ((draft-folder (wl-folder-get-elmo-folder wl-draft-folder))
+ (queue-folder (wl-folder-get-elmo-folder wl-queue-folder))
+ (trash-folder (wl-folder-get-elmo-folder wl-trash-folder))
+ (lost+found-folder (wl-folder-get-elmo-folder
+ elmo-lost+found-folder)))
+ (if (not (elmo-folder-message-file-p draft-folder))
+ (error "%s is not allowed for draft folder" wl-draft-folder))
+ (unless (elmo-folder-exists-p draft-folder)
+ (if (y-or-n-p
+ (format "Draft Folder %s does not exist, create it? "
+ wl-draft-folder))
+ (elmo-folder-create draft-folder)
+ (error "Draft Folder is not created")))
+ (if (and wl-draft-enable-queuing
+ (not (elmo-folder-exists-p queue-folder)))
+ (if (y-or-n-p
+ (format "Queue Folder %s does not exist, create it? "
+ wl-queue-folder))
+ (elmo-folder-create queue-folder)
+ (error "Queue Folder is not created")))
+ (when (not (eq no-check-folder 'wl-draft))
+ (unless (elmo-folder-exists-p trash-folder)
+ (if (y-or-n-p
+ (format "Trash Folder %s does not exist, create it? "
+ wl-trash-folder))
+ (elmo-folder-create trash-folder)
+ (error "Trash Folder is not created")))
+ (unless (elmo-folder-exists-p lost+found-folder)
+ (elmo-folder-create lost+found-folder)))
+ ;; tmp dir
+ (unless (file-exists-p wl-tmp-dir)
+ (if (y-or-n-p
+ (format "Temp directory (to save multipart) %s does not exist, create it now? "
+ wl-tmp-dir))
+ (make-directory wl-tmp-dir)
+ (error "Temp directory is not created"))))))
;;;###autoload
(defun wl (&optional arg)
"Start Wanderlust -- Yet Another Message Interface On Emacsen.
-If prefix argument is specified, folder checkings are skipped."
+If ARG (prefix argument) is specified, folder checkings are skipped."
(interactive "P")
- (unless wl-init
- (wl-load-profile))
- (unwind-protect
- (wl-init arg)
- (let ((make (wl-folder arg)))
- (wl-plugged-init make)))
- (run-hooks 'wl-hook))
+ (or wl-init (wl-load-profile))
+ (let (demo-buf)
+ (unwind-protect
+ (setq demo-buf (wl-init arg))
+ (wl-plugged-init (wl-folder arg)))
+ (unwind-protect
+ (unless arg
+ (run-hooks 'wl-auto-check-folder-pre-hook)
+ (wl-folder-auto-check)
+ (run-hooks 'wl-auto-check-folder-hook))
+ (if (buffer-live-p demo-buf)
+ (kill-buffer demo-buf))
+ (unless arg (wl-biff-start))
+ (run-hooks 'wl-hook))))
;; Define some autoload functions WL might use.
(eval-and-compile
;; for backward compatibility
(defalias 'wl-summary-from-func-petname 'wl-summary-default-from)
-
-(provide 'wl)
+
+(require 'product)
+(product-provide (provide 'wl) (require 'wl-version))
;;; wl.el ends here