(elmo-message-folder): Define.
[elisp/wanderlust.git] / wl / wl-util.el
index 13576d4..b40d735 100644 (file)
@@ -154,7 +154,7 @@ If HACK-ADDRESSES is t, then the strings are considered to be mail addresses,
             (cmd (if (featurep 'xemacs)
                      (event-to-character last-command-event)
                    (string-to-char (format "%s" (this-command-keys))))))
-    (message mes-string)
+    (message "%s" mes-string)
     (setq key (car (setq keve (wl-read-event-char))))
     (if (or (equal key ?\ )
            (and cmd
@@ -164,6 +164,11 @@ If HACK-ADDRESSES is t, then the strings are considered to be mail addresses,
          (funcall func))
       (wl-push (cdr keve) unread-command-events))))
 
+(defun wl-require-update-all-folder-p (name)
+  "Return non-nil if NAME is draft or queue folder."
+  (or (string= name wl-draft-folder)
+      (string= name wl-queue-folder)))
+
 ;(defalias 'wl-make-hash 'elmo-make-hash)
 ;;(make-obsolete 'wl-make-hash 'elmo-make-hash)
 
@@ -260,13 +265,17 @@ even when invalid character is contained."
          value pair)
       (while alist
        (setq pair (car alist))
-       (if (string-match (car pair) folder)
-           (cond ((eq match 'all)
-                  (setq value (append value (list (cdr pair)))))
-                 ((eq match 'all-list)
-                  (setq value (append value (cdr pair))))
-                 ((not match)
-                  (throw 'found (cdr pair)))))
+       (if (and (eq match 'function)
+                (functionp (car pair)))
+           (when (funcall (car pair) folder)
+             (throw 'found (cdr pair)))
+         (if (string-match (car pair) folder)
+             (cond ((eq match 'all)
+                    (setq value (append value (list (cdr pair)))))
+                   ((eq match 'all-list)
+                    (setq value (append value (cdr pair))))
+                   ((or (not match) (eq match 'function))
+                    (throw 'found (cdr pair))))))
        (setq alist (cdr alist)))
       value)))
 
@@ -283,16 +292,20 @@ even when invalid character is contained."
 (put 'wl-as-mime-charset 'lisp-indent-function 1)
 
 (eval-and-compile
-  (if wl-on-mule3
-      (defmacro wl-as-coding-system (coding-system &rest body)
-       (` (let ((coding-system-for-read (, coding-system))
-                (coding-system-for-write (, coding-system)))
-            (,@ body))))
-    (if wl-on-mule
-       (defmacro wl-as-coding-system (coding-system &rest body)
-         (` (let ((file-coding-system-for-read (, coding-system))
-                  (file-coding-system (, coding-system)))
-              (,@ body)))))))
+  (cond
+   (wl-on-mule3
+    (defmacro wl-as-coding-system (coding-system &rest body)
+      (` (let ((coding-system-for-read (, coding-system))
+              (coding-system-for-write (, coding-system)))
+          (,@ body)))))
+   (wl-on-mule
+    (defmacro wl-as-coding-system (coding-system &rest body)
+      (` (let ((file-coding-system-for-read (, coding-system))
+              (file-coding-system (, coding-system)))
+          (,@ body)))))
+   (t
+    (defmacro wl-as-coding-system (coding-system &rest body)
+      (` (progn (,@ body)))))))
 
 (defmacro wl-as-mime-charset (mime-charset &rest body)
   (` (wl-as-coding-system (mime-charset-to-coding-system (, mime-charset))
@@ -301,14 +314,6 @@ even when invalid character is contained."
 (defalias 'wl-string 'elmo-string)
 (make-obsolete 'wl-string 'elmo-string)
 
-;; Check if active region exists or not.
-(if (boundp 'mark-active)
-    (defmacro wl-region-exists-p ()
-      'mark-active)
-  (if (fboundp 'region-exists-p)
-      (defmacro wl-region-exists-p ()
-       (list 'region-exists-p))))
-
 (if (not (fboundp 'overlays-in))
     (defun overlays-in (beg end)
       "Return a list of the overlays that overlap the region BEG ... END.
@@ -527,19 +532,21 @@ that `read' can handle, whenever this is possible."
               folder nil nil nil t)
            (wl-summary-goto-folder-subr
             folder 'update nil nil t)
-           (goto-char (point-min))
-           (re-search-forward (concat "^ *" msg) nil t)
+           (wl-summary-jump-to-msg (string-to-number msg))
            (wl-summary-redisplay)))
       (message "Not a nntp: url."))))
 
 (defmacro wl-concat-list (list separator)
   (` (mapconcat 'identity (delete "" (delq nil (, list))) (, separator))))
 
-(defmacro wl-current-message-buffer ()
-  (` (save-excursion
-       (if (buffer-live-p wl-current-summary-buffer)
-          (set-buffer wl-current-summary-buffer))
-       wl-message-buffer)))
+(defun wl-current-message-buffer ()
+  (when (buffer-live-p wl-current-summary-buffer)
+    (with-current-buffer wl-current-summary-buffer
+      (or wl-message-buffer
+         (and (wl-summary-message-number)
+              (car (wl-message-buffer-display wl-summary-buffer-elmo-folder
+                                              (wl-summary-message-number)
+                                              'mime)))))))
 
 (defmacro wl-kill-buffers (regexp)
   (` (mapcar (function
@@ -565,16 +572,14 @@ that `read' can handle, whenever this is possible."
 
 (defun wl-collect-draft ()
   (let ((draft-regexp (concat
-                      "^" (regexp-quote
-                           (elmo-localdir-folder-directory-internal
-                            (wl-folder-get-elmo-folder wl-draft-folder)))))
+                      "^" (regexp-quote wl-draft-folder)))
        result buf)
     (mapcar
      (function (lambda (x)
-                (if (and
-                     (setq buf (with-current-buffer x
-                                 wl-draft-buffer-file-name))
-                     (string-match draft-regexp buf))
+                (if (with-current-buffer x
+                      (and (eq major-mode 'wl-draft-mode)
+                           (buffer-name)
+                           (string-match draft-regexp (buffer-name))))
                     (setq result (nconc result (list x))))))
      (buffer-list))
     result))
@@ -667,7 +672,7 @@ that `read' can handle, whenever this is possible."
 (defvar wl-load-profile-function 'wl-local-load-profile)
 (defun wl-local-load-profile ()
   "Load `wl-init-file'."
-  (message "Initializing ...")
+  (message "Initializing...")
   (load wl-init-file 'noerror 'nomessage))
 
 (defun wl-load-profile ()
@@ -846,7 +851,7 @@ This function is imported from Emacs 20.7."
 
 (defun wl-biff-check-folder (folder)
   (if (eq (elmo-folder-type-internal folder) 'pop3)
-      (unless (elmo-pop3-get-session folder 'if-exists)
+      (unless (elmo-pop3-get-session folder 'any-exists)
        (wl-folder-check-one-entity (elmo-folder-name-internal folder)
                                    'biff))
     (wl-folder-check-one-entity (elmo-folder-name-internal folder)
@@ -897,38 +902,19 @@ is enclosed by at least one regexp grouping construct."
       (concat open-paren (mapconcat 'regexp-quote strings "\\|")
              close-paren))))
 
-(defun wl-expand-newtext (newtext original)
-  (let ((len (length newtext))
-       (pos 0)
-       c expanded beg N did-expand)
-    (while (< pos len)
-      (setq beg pos)
-      (while (and (< pos len)
-                 (not (= (aref newtext pos) ?\\)))
-       (setq pos (1+ pos)))
-      (unless (= beg pos)
-       (push (substring newtext beg pos) expanded))
-      (when (< pos len)
-       ;; We hit a \; expand it.
-       (setq did-expand t
-             pos (1+ pos)
-             c (aref newtext pos))
-       (if (not (or (= c ?\&)
-                    (and (>= c ?1)
-                         (<= c ?9))))
-           ;; \ followed by some character we don't expand.
-           (push (char-to-string c) expanded)
-         ;; \& or \N
-         (if (= c ?\&)
-             (setq N 0)
-           (setq N (- c ?0)))
-         (when (match-beginning N)
-           (push (substring original (match-beginning N) (match-end N))
-                 expanded))))
-      (setq pos (1+ pos)))
-    (if did-expand
-       (apply (function concat) (nreverse expanded))
-      newtext)))
+(defalias 'wl-expand-newtext 'elmo-expand-newtext)
+(defalias 'wl-regexp-opt 'elmo-regexp-opt)
+
+(defun wl-region-exists-p ()
+  "Return non-nil if a region exists on current buffer."
+  (static-if (featurep 'xemacs)
+      (region-active-p)
+    (and transient-mark-mode mark-active)))
+
+(defun wl-deactivate-region ()
+  "Deactivate region on current buffer"
+  (static-if (not (featurep 'xemacs))
+      (setq mark-active nil)))
 
 (defvar wl-line-string)
 (defun wl-line-parse-format (format spec-alist)
@@ -1005,6 +991,14 @@ is enclosed by at least one regexp grouping construct."
        (when (get-buffer "*Compile-Log-Show*")
         (bury-buffer "*Compile-Log-Show*")))))
 
+(defsubst wl-copy-local-variables (src dst local-variables)
+  "Copy value of LOCAL-VARIABLES from SRC buffer to DST buffer."
+  (with-current-buffer dst
+    (dolist (variable local-variables)
+      (set (make-local-variable variable)
+          (with-current-buffer src
+            (symbol-value variable))))))
+
 (require 'product)
 (product-provide (provide 'wl-util) (require 'wl-version))