tm 7.22.
[elisp/tm.git] / gnus / tm-gnus5.el
index b4cc192..2065e8b 100644 (file)
 (require 'tl-misc)
 (require 'tl-822)
 (require 'gnus)
-
-(autoload 'mime/viewer-mode "tm-view" "View MIME message." t)
-(autoload 'mime/decode-message-header
-  "tm-ew-d" "Decode MIME encoded-words in message header." t)
-(autoload 'mime-eword/decode-string
-  "tm-ew-d" "Decode MIME encoded-words in string." t)
+(require 'tm-view)
 
 
 ;;; @ version
 ;;;
 
 (defconst tm-gnus/RCS-ID
-  "$Id: tm-gnus5.el,v 7.4 1995/10/22 12:13:50 morioka Exp $")
+  "$Id: tm-gnus5.el,v 7.7 1995/10/31 15:24:49 morioka Exp $")
 
 (defconst tm-gnus/version
-  (concat (get-version-string tm-gnus/RCS-ID) " for GNUS 5"))
-
-(defconst tm-gnus/automatic-MIME-preview-support
-  (cond ((boundp 'gnus-clean-article-buffer)
-        (defconst gnus-version (concat gnus-version " with tm patch"))
-        t)
-       (t
-        (defvar gnus-clean-article-buffer gnus-article-buffer)
-        nil)
-       ))
-
-(defvar tm-gnus/preview-buffer
-  (if tm-gnus/automatic-MIME-preview-support
-      (concat "*Preview-" gnus-clean-article-buffer "*"))
-  )
+  (concat (get-version-string tm-gnus/RCS-ID) " for GNUS 5.0.x"))
 
 
 ;;; @ variables
 ;;;
 
-(defvar tm-gnus/original-article-display-hook gnus-article-display-hook)
+(defvar tm-gnus/original-article-buffer " *Original Article*")
 
-(defvar tm-gnus/decode-all tm-gnus/automatic-MIME-preview-support
-  "If it is non-nil and
-tm-gnus/automatic-MIME-preview-support is non-nil,
-article is automatic MIME decoded.")
+(defvar tm-gnus/automatic-mime-preview t
+  "*If non-nil, show MIME processed article.
+This variable is set to `gnus-show-mime'.")
+
+(setq gnus-show-mime tm-gnus/automatic-mime-preview)
 
 
 ;;; @ command functions
@@ -64,16 +46,25 @@ article is automatic MIME decoded.")
 (defun tm-gnus/view-message (arg)
   "MIME decode and play this message."
   (interactive "P")
-  (let ((gnus-break-pages nil))
-    (gnus-summary-select-article t t)
-    )
-  (pop-to-buffer gnus-clean-article-buffer t)
-  (let (buffer-read-only)
-    (if (text-property-any (point-min) (point-max) 'invisible t)
-       (remove-text-properties (point-min) (point-max)
-                               gnus-hidden-properties)
+  (if (save-excursion
+       (set-buffer gnus-article-buffer)
+       (eq major-mode 'mime/viewer-mode)
+       )
+      (pop-to-buffer gnus-article-buffer t)
+    (let ((gnus-break-pages nil))
+      (gnus-summary-select-article t t)
+      )
+    (pop-to-buffer gnus-article-buffer t)
+    (let (buffer-read-only)
+      (remove-text-properties (point-min) (point-max) '(face nil))
+      (if (get-buffer tm-gnus/original-article-buffer)
+           (kill-buffer tm-gnus/original-article-buffer)
+         )
+      (rename-buffer tm-gnus/original-article-buffer)
+      (mime/viewer-mode nil nil nil
+                       tm-gnus/original-article-buffer
+                       gnus-article-buffer)
       ))
-  (mime/viewer-mode)
   )
 
 (defun tm-gnus/summary-scroll-down ()
@@ -82,7 +73,25 @@ article is automatic MIME decoded.")
   (gnus-summary-scroll-up -1)
   )
 
+(defun tm-gnus/summary-toggle-header (&optional arg)
+  (interactive "P")
+  (if gnus-show-mime
+      (let ((mime-viewer/ignored-field-list
+            (if (save-excursion
+                  (set-buffer gnus-article-buffer)
+                  (some-element
+                   (lambda (field)
+                     (rfc822/get-field-body field)
+                     )
+                   mime-viewer/ignored-field-list))
+                mime-viewer/ignored-field-list)))
+       (gnus-summary-select-article t t)
+       )
+    (gnus-summary-toggle-header arg)
+    ))
+
 (define-key gnus-summary-mode-map "v" (function tm-gnus/view-message))
+(define-key gnus-summary-mode-map "t" (function tm-gnus/summary-toggle-header))
 (define-key gnus-summary-mode-map
   "\e\r" (function tm-gnus/summary-scroll-down))
 
@@ -132,145 +141,102 @@ article is automatic MIME decoded.")
 ;;; @ summary filter
 ;;;
 
-(defun tm-gnus/decode-summary-from-and-subjects ()
-  (mapcar (lambda (header)
-           (let ((from (mail-header-from header))
-                 (subj (mail-header-subject header))
-                 )
-             (mail-header-set-from
-              header
-              (if from
-                  (mime-eword/decode-string from)
-                ""))
-             (mail-header-set-subject
-              header
-              (if subj
-                  (mime-eword/decode-string subj)
-                ""))
-             ))
-         gnus-newsgroup-headers)
-  )
-
-(add-hook 'gnus-select-group-hook
-         (function tm-gnus/decode-summary-from-and-subjects))
+(cond ((not (boundp 'nnheader-encoded-words-decoding))
+       (defun tm-gnus/decode-summary-from-and-subjects ()
+        (mapcar (lambda (header)
+                  (let ((from (mail-header-from header))
+                        (subj (mail-header-subject header))
+                        )
+                    (mail-header-set-from
+                     header
+                     (if from
+                         (mime-eword/decode-string from)
+                       ""))
+                    (mail-header-set-subject
+                     header
+                     (if subj
+                         (mime-eword/decode-string subj)
+                       ""))
+                    ))
+                gnus-newsgroup-headers)
+        )
+       (add-hook 'gnus-select-group-hook
+                (function tm-gnus/decode-summary-from-and-subjects))
+       ))
 
 
 ;;; @ article filter
 ;;;
 
-(setq gnus-show-mime-method (function mime/decode-message-header))
-
+(defun tm-gnus/preview-article ()
+  (if (get-buffer tm-gnus/original-article-buffer)
+      (kill-buffer tm-gnus/original-article-buffer)
+    )
+  (rename-buffer tm-gnus/original-article-buffer)
+  (set-buffer (get-buffer-create gnus-article-buffer))
+  (make-local-variable 'tm:mother-button-dispatcher)
+  (setq tm:mother-button-dispatcher
+       (function gnus-article-push-button))
+  (mime/viewer-mode
+   nil nil nil tm-gnus/original-article-buffer gnus-article-buffer)
+  (run-hooks 'tm-gnus/article-prepare-hook)
+  )
 
-;;; @ automatic MIME preview support
-;;;
+(setq gnus-show-mime-method (function tm-gnus/preview-article))
 
-(defun tm-gnus/summary-toggle-header (&optional arg)
-  (interactive "P")
-  (if tm-gnus/decode-all
-      (let ((mime-viewer/ignored-field-list
-            (if (save-window-excursion
-                  (switch-to-buffer tm-gnus/preview-buffer)
-                  (some-element
-                   (lambda (field)
-                     (rfc822/get-field-body field)
-                     )
-                   mime-viewer/ignored-field-list))
-                mime-viewer/ignored-field-list)))
-       (gnus-summary-select-article t t)
-       )
-    (gnus-summary-toggle-header arg)
-    ))
+(or (fboundp 'tm::gnus-article-hide-headers-if-wanted)
+    (fset 'tm::gnus-article-hide-headers-if-wanted
+         (symbol-function 'gnus-article-hide-headers-if-wanted))
+    )
 
-(defun tm-gnus/set-mime-method (mode)
-  (if mode
-      (progn
-       (setq gnus-show-mime nil)
-       (setq gnus-article-display-hook
-             (list (function (lambda ()
-                               (mime/viewer-mode)
-                               (gnus-set-mode-line 'article)
-                               ))))
-       (set-alist 'gnus-window-to-buffer 'article tm-gnus/preview-buffer)
-       (setq gnus-article-buffer tm-gnus/preview-buffer)
-       )
-    (setq gnus-show-mime t)
-    (setq gnus-article-display-hook tm-gnus/original-article-display-hook)
-    (set-alist 'gnus-window-to-buffer 'article gnus-clean-article-buffer)
-    (setq gnus-article-buffer gnus-clean-article-buffer)
+(defun gnus-article-hide-headers-if-wanted ()
+  (if (not gnus-show-mime)
+      (tm::gnus-article-hide-headers-if-wanted)
     ))
 
-(defun tm-gnus/toggle-mime (arg)
-  "Toggle MIME processing mode.
-With arg, turn MIME processing on if arg is positive."
-  (interactive "P")
-  (setq tm-gnus/decode-all
-       (if (null arg)
-           (not tm-gnus/decode-all)
-         arg))
-  (gnus-set-global-variables)
-  (tm-gnus/set-mime-method tm-gnus/decode-all)
-  (gnus-summary-select-article gnus-show-all-headers 'force)
-  )
 
-(if tm-gnus/automatic-MIME-preview-support
-    (progn
-      (define-key gnus-summary-mode-map
-       "t" (function tm-gnus/summary-toggle-header))
-      (define-key gnus-summary-mode-map "\et" (function tm-gnus/toggle-mime))
-      
-      (tm-gnus/set-mime-method tm-gnus/decode-all)
-      
-      (add-hook 'gnus-exit-gnus-hook
-               (lambda ()
-                 (let ((buf (get-buffer tm-gnus/preview-buffer)))
-                   (if buf
-                       (kill-buffer buf)
-                     ))))
-      )
-  (setq gnus-article-display-hook tm-gnus/original-article-display-hook)
-  (setq gnus-show-mime t)
-  )
-
-
-;;; @ for tm-comp
+;;; @ for mh-e
 ;;;
 
 (call-after-loaded
- 'tm-comp
+ 'tm-mh-e
  (function
   (lambda ()
-    (set-alist 'mime/message-sender-alist
-              'news-reply-mode
-              (function gnus-inews-news))
-    )))
-
-
-;;; @ for mime.el
-;;;
 
 ;;; by OKABE Yasuo <okabe@kudpc.kyoto-u.ac.jp>
 ;;;
-;;; Please use following setting:
-;;;    (setq gnus-mail-forward-method
-;;;          (function gnus-mail-forward-using-mhe-mime))
-
+;; Please use following setting:
+;;
+;;     (autoload 'gnus-mail-forward-using-mhe-mime "tm-mh-e"
+;;               "Forward using mh-e with tm-edit." t)
+;;     (setq gnus-mail-forward-method
+;;           (function gnus-mail-forward-using-mhe-mime))
+;;
 (defun gnus-mail-forward-using-mhe-mime (&optional buffer)
   "Forward the current message to another user using mh-e with mime-mode."
   ;; First of all, prepare mhe mail buffer.
+  (require 'mh-comp)
+  (require 'tm-edit)
   (let* ((to (read-string "To: "))
         (cc (read-string "Cc: "))
-        (buffer (or buffer gnus-clean-article-buffer))
-        (config (current-window-configuration));; need to add this - erik
+        (buffer (save-excursion
+                  (set-buffer gnus-article-buffer)
+                  (if (eq major-mode 'mime/viewer-mode)
+                      mime::preview/article-buffer
+                    (current-buffer)
+                    )))
+        (config (current-window-configuration)) ; need to add this - erik
         (subject (gnus-forward-make-subject buffer)))
     (setq mh-show-buffer buffer)
     (mh-find-path)
-    (mh-send-sub to (or cc "") (or subject "(None)") config);; Erik Selberg 1/23/94
+    (mh-send-sub to (or cc "")
+                (or subject "(None)") config) ; Erik Selberg 1/23/94
     (let ((draft (current-buffer))
          (gnus-mail-buffer (current-buffer))
          mail-buf)
       (gnus-configure-windows 'reply-yank)
       (setq mail-buf (eval (cdr (assq 'mail gnus-window-to-buffer))))
-      (pop-to-buffer mail-buf);; always in the display, so won't have window probs
+      (pop-to-buffer mail-buf) ; always in the display, so won't have window probs
       (switch-to-buffer draft)
       )
     (save-excursion
@@ -283,6 +249,23 @@ With arg, turn MIME processing on if arg is positive."
       (run-hooks 'gnus-mail-hook)
       )))
 
+)))
+
+
+;;; @ for BBDB
+;;;
+
+(defun tm-gnus/bbdb-setup ()
+  (if (memq 'bbdb/gnus-update-record gnus-article-prepare-hook)
+      (progn
+       (remove-hook 'gnus-article-prepare-hook 'bbdb/gnus-update-record)
+       (add-hook 'tm-gnus/article-prepare-hook 'bbdb/gnus-update-record)
+       )))
+
+(add-hook 'gnus-startup-hook 'tm-gnus/bbdb-setup t)
+
+(tm-gnus/bbdb-setup)
+
 
 ;;; @ end
 ;;;