Mercurial > emacs
comparison lisp/mh-e/mh-speed.el @ 50702:7dd3d5eae9c7
Upgraded to MH-E version 7.3.
See etc/MH-E-NEWS and lisp/mh-e/ChangeLog for details.
author | Bill Wohler <wohler@newt.com> |
---|---|
date | Fri, 25 Apr 2003 05:52:00 +0000 |
parents | b35587af8747 |
children | 695cf19ef79e |
comparison
equal
deleted
inserted
replaced
50701:cb5f0a5d5b36 | 50702:7dd3d5eae9c7 |
---|---|
1 ;;; mh-speed.el --- Speedbar interface for MH-E. | 1 ;;; mh-speed.el --- Speedbar interface for MH-E. |
2 | 2 |
3 ;; Copyright (C) 2002 Free Software Foundation, Inc. | 3 ;; Copyright (C) 2002, 2003 Free Software Foundation, Inc. |
4 | 4 |
5 ;; Author: Satyaki Das <satyaki@theforce.stanford.edu> | 5 ;; Author: Satyaki Das <satyaki@theforce.stanford.edu> |
6 ;; Maintainer: Bill Wohler <wohler@newt.com> | 6 ;; Maintainer: Bill Wohler <wohler@newt.com> |
7 ;; Keywords: mail | 7 ;; Keywords: mail |
8 ;; See: mh-e.el | 8 ;; See: mh-e.el |
28 ;; Future versions should only use flists. | 28 ;; Future versions should only use flists. |
29 | 29 |
30 ;; Speedbar support for MH-E package. | 30 ;; Speedbar support for MH-E package. |
31 | 31 |
32 ;;; Change Log: | 32 ;;; Change Log: |
33 | |
34 ;; $Id: mh-speed.el,v 1.37 2003/01/31 03:18:18 satyaki Exp $ | |
35 | 33 |
36 ;;; Code: | 34 ;;; Code: |
37 | 35 |
38 ;; Requires | 36 ;; Requires |
39 (require 'cl) | 37 (require 'cl) |
68 (clrhash mh-speed-folder-map) | 66 (clrhash mh-speed-folder-map) |
69 (speedbar-make-tag-line 'bracket ?+ 'mh-speed-toggle nil " " 'ignore nil | 67 (speedbar-make-tag-line 'bracket ?+ 'mh-speed-toggle nil " " 'ignore nil |
70 'mh-speedbar-folder-face 0) | 68 'mh-speedbar-folder-face 0) |
71 (forward-line -1) | 69 (forward-line -1) |
72 (setf (gethash nil mh-speed-folder-map) | 70 (setf (gethash nil mh-speed-folder-map) |
73 (set-marker (make-marker) (1+ (line-beginning-position)))) | 71 (set-marker (or (gethash nil mh-speed-folder-map) (make-marker)) |
72 (1+ (line-beginning-position)))) | |
74 (add-text-properties | 73 (add-text-properties |
75 (line-beginning-position) (1+ (line-beginning-position)) | 74 (line-beginning-position) (1+ (line-beginning-position)) |
76 `(mh-folder nil mh-expanded nil mh-children-p t mh-level 0)) | 75 `(mh-folder nil mh-expanded nil mh-children-p t mh-level 0)) |
77 (mh-speed-stealth-update t) | 76 (mh-speed-stealth-update t) |
78 (when mh-speed-run-flists-flag | 77 (when mh-speed-run-flists-flag |
276 'mh-speedbar-folder-face) | 275 'mh-speedbar-folder-face) |
277 level) | 276 level) |
278 (save-excursion | 277 (save-excursion |
279 (forward-line -1) | 278 (forward-line -1) |
280 (setf (gethash folder-name mh-speed-folder-map) | 279 (setf (gethash folder-name mh-speed-folder-map) |
281 (set-marker (make-marker) (1+ (line-beginning-position)))) | 280 (set-marker (or (gethash folder-name mh-speed-folder-map) |
281 (make-marker)) | |
282 (1+ (line-beginning-position)))) | |
282 (add-text-properties | 283 (add-text-properties |
283 (line-beginning-position) (1+ (line-beginning-position)) | 284 (line-beginning-position) (1+ (line-beginning-position)) |
284 `(mh-folder ,folder-name | 285 `(mh-folder ,folder-name |
285 mh-expanded nil | 286 mh-expanded nil |
286 mh-children-p ,(not (not (cdr f))) | 287 mh-children-p ,(not (not (cdr f))) |
307 (expanded | 308 (expanded |
308 (forward-line) | 309 (forward-line) |
309 (setq start-region (point)) | 310 (setq start-region (point)) |
310 (while (and (get-text-property (point) 'mh-level) | 311 (while (and (get-text-property (point) 'mh-level) |
311 (> (get-text-property (point) 'mh-level) level)) | 312 (> (get-text-property (point) 'mh-level) level)) |
312 (remhash (get-text-property (point) 'mh-folder) | 313 (let ((folder (get-text-property (point) 'mh-folder))) |
313 mh-speed-folder-map) | 314 (when (gethash folder mh-speed-folder-map) |
315 (set-marker (gethash folder mh-speed-folder-map) nil) | |
316 (remhash folder mh-speed-folder-map))) | |
314 (forward-line)) | 317 (forward-line)) |
315 (delete-region start-region (point)) | 318 (delete-region start-region (point)) |
316 (forward-line -1) | 319 (forward-line -1) |
317 (speedbar-change-expand-button-char ?+) | 320 (speedbar-change-expand-button-char ?+) |
318 (add-text-properties | 321 (add-text-properties |
342 (speedbar-with-attached-buffer | 345 (speedbar-with-attached-buffer |
343 (mh-visit-folder folder range) | 346 (mh-visit-folder folder range) |
344 (delete-other-windows))))) | 347 (delete-other-windows))))) |
345 | 348 |
346 (defvar mh-speed-current-folder nil) | 349 (defvar mh-speed-current-folder nil) |
347 | 350 (defvar mh-speed-flists-folder nil) |
348 ;;;###mh-autoload | 351 |
349 (defun mh-speed-flists (force) | 352 ;;;###mh-autoload |
353 (defun mh-speed-flists (force &optional folder) | |
350 "Execute flists -recurse and update message counts. | 354 "Execute flists -recurse and update message counts. |
351 If FORCE is non-nil the timer is reset." | 355 If FORCE is non-nil the timer is reset. If FOLDER is non-nil then flists is run |
356 only for that one folder." | |
352 (interactive (list t)) | 357 (interactive (list t)) |
353 (when force | 358 (when force |
354 (when (timerp mh-speed-flists-timer) | 359 (when mh-speed-flists-timer |
355 (cancel-timer mh-speed-flists-timer)) | 360 (cancel-timer mh-speed-flists-timer) |
356 (setq mh-speed-flists-timer nil) | 361 (setq mh-speed-flists-timer nil)) |
357 (when (and (processp mh-speed-flists-process) | 362 (when (and (processp mh-speed-flists-process) |
358 (not (eq (process-status mh-speed-flists-process) 'exit))) | 363 (not (eq (process-status mh-speed-flists-process) 'exit))) |
364 (set-process-filter mh-speed-flists-process t) | |
359 (kill-process mh-speed-flists-process) | 365 (kill-process mh-speed-flists-process) |
366 (setq mh-speed-partial-line "") | |
360 (setq mh-speed-flists-process nil))) | 367 (setq mh-speed-flists-process nil))) |
368 (setq mh-speed-flists-folder folder) | |
361 (unless mh-speed-flists-timer | 369 (unless mh-speed-flists-timer |
362 (setq mh-speed-flists-timer | 370 (setq mh-speed-flists-timer |
363 (run-at-time | 371 (run-at-time |
364 nil mh-speed-flists-interval | 372 nil (and mh-speed-run-flists-flag mh-speed-flists-interval) |
365 (lambda () | 373 (lambda () |
366 (unless (and (processp mh-speed-flists-process) | 374 (unless (and (processp mh-speed-flists-process) |
367 (not (eq (process-status mh-speed-flists-process) | 375 (not (eq (process-status mh-speed-flists-process) |
368 'exit))) | 376 'exit))) |
369 (setq mh-speed-current-folder | 377 (setq mh-speed-current-folder |
374 (buffer-substring (point-min) (1- (point-max)))) | 382 (buffer-substring (point-min) (1- (point-max)))) |
375 "+")) | 383 "+")) |
376 (setq mh-speed-flists-process | 384 (setq mh-speed-flists-process |
377 (start-process "*flists*" nil | 385 (start-process "*flists*" nil |
378 (expand-file-name "flists" mh-progs) | 386 (expand-file-name "flists" mh-progs) |
379 "-recurse" | 387 (or mh-speed-flists-folder "-recurse") |
388 (if mh-speed-flists-folder "-noall" "-all") | |
380 "-sequence" (symbol-name mh-unseen-seq))) | 389 "-sequence" (symbol-name mh-unseen-seq))) |
390 ;; Run flists on all folders the next time around... | |
391 (setq mh-speed-flists-folder nil) | |
381 (set-process-filter mh-speed-flists-process | 392 (set-process-filter mh-speed-flists-process |
382 'mh-speed-parse-flists-output))))))) | 393 'mh-speed-parse-flists-output))))))) |
383 | 394 |
384 ;; Copied from mh-make-folder-list-filter... | 395 ;; Copied from mh-make-folder-list-filter... |
385 (defun mh-speed-parse-flists-output (process output) | 396 (defun mh-speed-parse-flists-output (process output) |
395 mh-speed-partial-line | 406 mh-speed-partial-line |
396 (substring output position line-end)) | 407 (substring output position line-end)) |
397 mh-speed-partial-line "") | 408 mh-speed-partial-line "") |
398 (multiple-value-setq (folder unseen total) | 409 (multiple-value-setq (folder unseen total) |
399 (mh-parse-flist-output-line line mh-speed-current-folder)) | 410 (mh-parse-flist-output-line line mh-speed-current-folder)) |
400 (when (and folder unseen total) | 411 (when (and folder unseen total |
412 (let ((old-pair (gethash folder mh-speed-flists-cache))) | |
413 (or (not (equal (car old-pair) unseen)) | |
414 (not (equal (cdr old-pair) total))))) | |
401 (setf (gethash folder mh-speed-flists-cache) (cons unseen total)) | 415 (setf (gethash folder mh-speed-flists-cache) (cons unseen total)) |
402 (save-excursion | 416 (save-excursion |
403 (when (buffer-live-p (get-buffer speedbar-buffer)) | 417 (when (buffer-live-p (get-buffer speedbar-buffer)) |
404 (set-buffer speedbar-buffer) | 418 (set-buffer speedbar-buffer) |
405 (speedbar-with-writable | 419 (speedbar-with-writable |
512 (backward-char 2) | 526 (backward-char 2) |
513 (delete-char 1) | 527 (delete-char 1) |
514 (insert-char char 1 t) | 528 (insert-char char 1 t) |
515 (put-text-property (point) (1- (point)) 'invisible nil) | 529 (put-text-property (point) (1- (point)) 'invisible nil) |
516 ;; make sure we fix the image on the text here. | 530 ;; make sure we fix the image on the text here. |
517 (speedbar-insert-image-button-maybe (- (point) 2) 3))))) | 531 (mh-funcall-if-exists |
532 speedbar-insert-image-button-maybe (- (point) 2) 3))))) | |
518 | 533 |
519 (provide 'mh-speed) | 534 (provide 'mh-speed) |
520 | 535 |
521 ;;; Local Variables: | 536 ;;; Local Variables: |
522 ;;; indent-tabs-mode: nil | 537 ;;; indent-tabs-mode: nil |