diff lisp/mh-e/mh-speed.el @ 49578:b35587af8747

Upgraded to MH-E version 7.2. See etc/MH-E-NEWS and lisp/mh-e/ChangeLog for details.
author Bill Wohler <wohler@newt.com>
date Mon, 03 Feb 2003 20:55:30 +0000
parents 06b77df47802
children 7dd3d5eae9c7 d7ddb3e565de
line wrap: on
line diff
--- a/lisp/mh-e/mh-speed.el	Mon Feb 03 16:39:05 2003 +0000
+++ b/lisp/mh-e/mh-speed.el	Mon Feb 03 20:55:30 2003 +0000
@@ -31,7 +31,7 @@
 
 ;;; Change Log:
 
-;; $Id: mh-speed.el,v 1.2 2003/01/08 23:21:16 wohler Exp $
+;; $Id: mh-speed.el,v 1.37 2003/01/31 03:18:18 satyaki Exp $
 
 ;;; Code:
 
@@ -44,7 +44,6 @@
 (defvar mh-speed-refresh-flag nil)
 (defvar mh-speed-last-selected-folder nil)
 (defvar mh-speed-folder-map (make-hash-table :test #'equal))
-(defvar mh-speed-folders-cache (make-hash-table :test #'equal))
 (defvar mh-speed-flists-cache (make-hash-table :test #'equal))
 (defvar mh-speed-flists-process nil)
 (defvar mh-speed-flists-timer nil)
@@ -256,7 +255,7 @@
 
 (defun mh-speed-add-buttons (folder level)
   "Add speedbar button for FOLDER which is at indented by LEVEL amount."
-  (let ((folder-list (mh-speed-folders folder)))
+  (let ((folder-list (mh-sub-folders folder)))
     (mapc
      (lambda (f)
        (let* ((folder-name (format "%s%s%s" (or folder "+")
@@ -344,58 +343,7 @@
        (mh-visit-folder folder range)
        (delete-other-windows)))))
 
-(defun mh-speed-folders (folder)
-  "Find the subfolders of FOLDER.
-The function avoids running folders unnecessarily by caching the results of
-the actual folders call."
-  (let ((match (gethash folder mh-speed-folders-cache 'no-result)))
-    (cond ((eq match 'no-result)
-           (setf (gethash folder mh-speed-folders-cache)
-                 (mh-speed-folders-actual folder)))
-          (t match))))
-
-(defun mh-speed-folders-actual (folder)
-  "Execute the command folders to return the sub-folders of FOLDER.
-Filters out the folder names that start with \".\" so that directories that
-aren't usually mail folders are hidden."
-  (let* ((folder (cond ((and (stringp folder)
-                             (equal (substring folder 0 1) "+"))
-                        folder)
-                       (t nil)))
-         (arg-list `(,(expand-file-name "folders" mh-progs)
-                     nil (t nil) nil "-noheader" "-norecurse"
-                     ,@(if (stringp folder) (list folder) ())))
-         (results ()))
-    (with-temp-buffer
-      (apply #'call-process arg-list)
-      (goto-char (point-min))
-      (while (not (and (eolp) (bolp)))
-        (goto-char (line-end-position))
-        (let ((has-pos (search-backward " has " (line-beginning-position) t)))
-          (when (integerp has-pos)
-            (while (or (equal (char-after has-pos) ? )
-                       (equal (char-after has-pos) ?+))
-              (decf has-pos))
-            (incf has-pos)
-            (let ((name (buffer-substring (line-beginning-position) has-pos)))
-              (let ((first-char (substring name 0 1)))
-                (unless (or (string-equal first-char ".")
-                            (string-equal first-char "#")
-                            (string-equal first-char ","))
-                  (push
-                   (cons name
-                         (search-forward "(others)" (line-end-position) t))
-                   results)))))
-          (forward-line 1))))
-    (setq results (nreverse results))
-    (when (stringp folder)
-      (setq results (cdr results))
-      (let ((folder-name-len (length (format "%s/" (substring folder 1)))))
-        (setq results (mapcar (lambda (f)
-                                (cons (substring (car f) folder-name-len)
-                                      (cdr f)))
-                              results))))
-    results))
+(defvar mh-speed-current-folder nil)
 
 ;;;###mh-autoload
 (defun mh-speed-flists (force)
@@ -418,9 +366,17 @@
              (unless (and (processp mh-speed-flists-process)
                           (not (eq (process-status mh-speed-flists-process)
                                    'exit)))
+               (setq mh-speed-current-folder
+                     (concat
+                      (with-temp-buffer
+                        (call-process (expand-file-name "folder" mh-progs)
+                                      nil '(t nil) nil "-fast")
+                        (buffer-substring (point-min) (1- (point-max))))
+                      "+"))
                (setq mh-speed-flists-process
-                     (start-process (expand-file-name "flists" mh-progs) nil
-                                    "flists" "-recurse"
+                     (start-process "*flists*" nil
+                                    (expand-file-name "flists" mh-progs)
+                                    "-recurse"
                                     "-sequence" (symbol-name mh-unseen-seq)))
                (set-process-filter mh-speed-flists-process
                                    'mh-speed-parse-flists-output)))))))
@@ -440,7 +396,7 @@
                              (substring output position line-end))
                 mh-speed-partial-line "")
           (multiple-value-setq (folder unseen total)
-            (mh-parse-flist-output-line line))
+            (mh-parse-flist-output-line line mh-speed-current-folder))
           (when (and folder unseen total)
             (setf (gethash folder mh-speed-flists-cache) (cons unseen total))
             (save-excursion
@@ -489,10 +445,8 @@
            (parent (if last-slash (substring folder 0 last-slash) nil))
            (parent-position (gethash parent mh-speed-folder-map))
            (parent-change nil))
-      (remhash parent mh-speed-folders-cache)
-      (remhash folder mh-speed-folders-cache)
       (when parent-position
-        (let ((parent-kids (mh-speed-folders parent)))
+        (let ((parent-kids (mh-sub-folders parent)))
           (cond ((null parent-kids)
                  (setq parent-change ?+))
                 ((and (null (cdr parent-kids))
@@ -517,7 +471,7 @@
           (setq mh-speed-last-selected-folder nil)
           (setq mh-speed-refresh-flag t)))
       (when (equal folder "")
-        (clrhash mh-speed-folders-cache)))))
+        (clrhash mh-sub-folders-cache)))))
 
 ;;;###mh-autoload
 (defun mh-speed-add-folder (folder)
@@ -545,7 +499,6 @@
          `(mh-children-p t)))
       (when (get-text-property (line-beginning-position) 'mh-expanded)
         (mh-speed-toggle))
-      (remhash ancestor mh-speed-folders-cache)
       (setq mh-speed-refresh-flag t))))
 
 ;; Make it slightly more general to allow for [ ] buttons to be changed to