tm 6.70
[elisp/tm.git] / gnus / tm-dgnus.el
index aa79f1f..8fbb8ac 100644 (file)
 ;;; @ version
 ;;;
 (defconst tm-gnus/RCS-ID
-  "$Id: tm-dgnus.el,v 6.9 1995/07/03 07:50:58 morioka Exp $")
+  "$Id: tm-dgnus.el,v 6.14 1995/08/01 17:19:15 morioka Exp $")
 
 (defconst tm-gnus/version
   (concat (get-version-string tm-gnus/RCS-ID) " (ding)"))
 
+(defconst tm-gnus/automatic-MIME-preview-support
+  (if (boundp 'gnus-clean-article-buffer)
+      (progn
+       (defconst gnus-version (concat gnus-version " with tm patch"))
+       t)))
+
+(defvar tm-gnus/preview-buffer
+  (if tm-gnus/automatic-MIME-preview-support
+      (concat "*Preview-" gnus-clean-article-buffer "*"))
+  )
+
 
 ;;; @ autoload
 ;;;
 
 (defvar tm-gnus/original-article-display-hook gnus-article-display-hook)
 
-(defvar tm-gnus/decode-all t)
-
-(defvar tm-gnus/preview-buffer (concat "*Preview-" gnus-article-buffer "*"))
+(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.")
 
 
 ;;; @ command functions
@@ -44,7 +56,7 @@
   (let ((gnus-break-pages nil))
     (gnus-summary-select-article t t)
     )
-  (pop-to-buffer gnus-article-buffer 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)
 (define-key gnus-summary-mode-map "v" (function tm-gnus/view-message))
 (define-key gnus-summary-mode-map
   "\e\r" (function tm-gnus/summary-scroll-down))
-(define-key gnus-summary-mode-map "\et" (function tm-gnus/toggle-mime))
-
-(defmacro gnus-get-article-buffer ()
-  (` (cdr (assq 'article gnus-window-to-buffer))))
-
-;; Set article window start at LINE, where LINE is the number of lines
-;; from the head of the article.
-(defun gnus-article-set-window-start (&optional line)
-  (let ((article-buffer (gnus-get-article-buffer)))
-    (set-window-start
-     (get-buffer-window article-buffer)
-     (save-excursion
-       (set-buffer article-buffer)
-       (goto-char (point-min))
-       (if (not line)
-          (point-min)
-        (gnus-message 6 "Moved to bookmark")
-        (search-forward "\n\n" nil t)
-        (forward-line line)
-        (point))))))
-
-(defun gnus-summary-next-page (lines)
-  "Show next page of selected article.
-If end of article, select next article.
-Argument LINES specifies lines to be scrolled up."
-  (interactive "P")
-  (let ((article (gnus-summary-article-number))
-       (endp nil))
-    (if (or (null gnus-current-article)
-           (/= article gnus-current-article))
-       ;; Selected subject is different from current article's.
-       (gnus-summary-display-article article)
-      (gnus-configure-windows 'article)
-      (pop-to-buffer gnus-summary-buffer)
-      (gnus-eval-in-buffer-window
-       (gnus-get-article-buffer)
-       (setq endp (gnus-article-next-page lines)))
-      (cond ((and endp lines)
-            (message "End of message"))
-           ((and endp (null lines))
-            (gnus-summary-next-unread-article)))
-      )))
-
-(defun gnus-summary-prev-page (lines)
-  "Show previous page of selected article.
-Argument LINES specifies lines to be scrolled down."
-  (interactive "P")
-  (gnus-set-global-variables)
-  (let ((article (gnus-summary-article-number)))
-    (gnus-configure-windows 'article)
-    (if (or (null gnus-current-article)
-           (null gnus-article-current)
-           (/= article (cdr gnus-article-current))
-           (not (equal (car gnus-article-current) gnus-newsgroup-name)))
-       ;; Selected subject is different from current article's.
-       (gnus-summary-display-article article)
-      (gnus-summary-recenter)
-      (gnus-eval-in-buffer-window
-       (gnus-get-article-buffer)
-       (gnus-article-prev-page lines))))
-  (gnus-summary-position-cursor))
-
-(defun gnus-summary-scroll-up (lines)
-  "Scroll up (or down) one line current article.
-Argument LINES specifies lines to be scrolled up (or down if negative)."
-  (interactive "p")
-  (gnus-set-global-variables)
-  (gnus-configure-windows 'article)
-  (or (gnus-summary-select-article nil nil 'pseudo)
-      (gnus-eval-in-buffer-window
-       (gnus-get-article-buffer)
-       (cond ((> lines 0)
-             (if (gnus-article-next-page lines)
-                 (gnus-message 3 "End of message")))
-            ((< lines 0)
-             (gnus-article-prev-page (- lines))))))
-  (gnus-summary-recenter)
-  (gnus-summary-position-cursor))
-
-(defun gnus-summary-toggle-header (arg)
-  "Show the headers if they are hidden, or hide them if they are shown.
-If ARG is a positive number, show the entire header.
-If ARG is a negative number, hide the unwanted header lines."
-  (interactive "P")
-  (gnus-set-global-variables)
-  (save-excursion
-    (set-buffer (gnus-get-article-buffer))
-    (let ((buffer-read-only nil))
-      (if (numberp arg) 
-         (if (> arg 0) (remove-text-properties (point-min) (point-max) 
-                                               gnus-hidden-properties)
-           (if (< arg 0) (run-hooks 'gnus-article-display-hook)))
-       (if (text-property-any (point-min) (point-max) 'invisible t)
-           (if tm-gnus/decode-all
-               (let (mime-viewer/ignored-field-list)
-                 (run-hooks 'gnus-article-display-hook)
-                 )
-             (remove-text-properties (point-min) (point-max)
-                                     gnus-hidden-properties)
-             )
-         (let (gnus-have-all-headers)
-           (run-hooks 'gnus-article-display-hook)
-           ))
-       )
-      (pop-to-buffer gnus-summary-buffer)
-      (set-window-point (get-buffer-window (current-buffer)) (point-min)))))
 
 
 ;;; @ summary filter
@@ -202,6 +108,27 @@ If ARG is a negative number, hide the unwanted header lines."
               (mime/decode-message-header)
               ))))
 
+
+;;; @ automatic MIME preview support
+;;;
+
+(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)
+                  (goto-char (point-min))
+                  (message/get-field-body
+                   (car mime-viewer/ignored-field-list)
+                   ))
+                mime-viewer/ignored-field-list)
+            ))
+       (gnus-summary-select-article t t)
+       )
+    (gnus-summary-toggle-header arg)
+    ))
+
 (defun tm-gnus/set-mime-method (mode)
   (if mode
       (progn
@@ -210,18 +137,16 @@ If ARG is a negative number, hide the unwanted header lines."
              (list (function (lambda ()
                                (mime/viewer-mode)
                                (gnus-set-mode-line 'article)
-                               (set-buffer-modified-p nil)
-                               (pop-to-buffer mime::preview/article-buffer)
                                ))))
        (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-article-buffer)
+    (set-alist 'gnus-window-to-buffer 'article gnus-clean-article-buffer)
+    (setq gnus-article-buffer gnus-clean-article-buffer)
     ))
 
-(tm-gnus/set-mime-method tm-gnus/decode-all)
-
 (defun tm-gnus/toggle-mime (arg)
   "Toggle MIME processing mode.
 With arg, turn MIME processing on if arg is positive."
@@ -235,17 +160,25 @@ With arg, turn MIME processing on if arg is positive."
   (gnus-summary-select-article gnus-show-all-headers 'force)
   )
 
-
-;;; @ etc
-;;;
-
-(add-hook 'gnus-exit-gnus-hook
-         (function
-          (lambda ()
-            (let ((buf (get-buffer tm-gnus/preview-buffer)))
-              (if buf
-                  (kill-buffer buf)
-                )))))
+(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
+               (function
+                (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)
+  )
 
 
 ;;; @ end