985e4edc196804c79b5c3a5e5c6374d34724c0be
[elisp/tm.git] / mh-e / tm-mh-e.el
1 ;;;
2 ;;; A MIME extender for mh-e
3 ;;;
4 ;;; by Morioka Tomohiko, 1993/11/21
5 ;;; modified by YAMAOKA Katsumi <yamaoka@ga.sony.co.jp>
6 ;;;
7
8
9 ;;; @ require modules
10 ;;;
11 (require 'tl-str)
12 (require 'tm-misc)
13 (require 'mh-e)
14 (if (not (boundp 'mh-e-version))
15     (require 'tm-mh-e3)
16   )
17 (autoload 'mime/viewer-mode "tm-view" "View MIME message." t)
18
19
20 ;;; @ version
21 ;;;
22 (defconst tm-mh-e/RCS-ID
23   "$Id: tm-mh-e.el,v 6.1 1995/04/18 16:49:45 morioka Exp $")
24
25 (defconst tm-mh-e/version (get-version-string tm-mh-e/RCS-ID))
26
27
28 ;;; @ MIME header decoding mode
29 ;;;
30 (defun tm-mh-e/toggle-header-decoding-mode (arg)
31   "Toggle MIME header processing.
32 With arg, turn MIME processing on if arg is positive."
33   (interactive "P")
34   (setq mime/header-decoding-mode
35         (if (null arg)
36             (not mime/header-decoding-mode)
37           arg))
38   (mh-invalidate-show-buffer)
39   (mh-show-msg (mh-get-msg-num t))
40   )
41
42
43 ;;; @ MIME body players
44 ;;;
45 (defun tm-mh-e/view-message (arg)
46   "MIME decode and play this message."
47   (interactive "P")
48   (mh-invalidate-show-buffer)
49   (mh-show-msg (mh-get-msg-num t))
50   (pop-to-buffer mh-show-buffer t)
51   ;; patch for mh-narrow.el
52   ;; by YAMAOKA Katsumi <yamaoka@ga.sony.co.jp>
53   (if (featurep 'mh-narrow)
54       (widen)
55     )
56   ;; end of patch
57   (mime/viewer-mode)
58   )
59
60
61 ;;; @ for tm-comp
62 ;;;
63 (defun tm-mh-e::make-message (folder number)
64   (vector folder number)
65   )
66
67 (defun tm-mh-e::message/folder (message)
68   (elt message 0)
69   )
70
71 (defun tm-mh-e::message/number (message)
72   (elt message 1)
73   )
74
75 (defun tm-mh-e::message/file-name (message)
76   (expand-file-name
77    (tm-mh-e::message/number message)
78    (mh-expand-file-name (tm-mh-e::message/folder message))
79    ))
80   
81 (defun tm-mh-e::prompt-for-message (prompt folder &optional default)
82   (let ((files
83          (directory-files (mh-expand-file-name folder) nil "^[0-9]+$")
84          ))
85     (completing-read prompt
86                      (let ((i 0))
87                        (mapcar (function
88                                 (lambda (file)
89                                   (setq i (+ i 1))
90                                   (list file i)
91                                   ))
92                                files)
93                        ))
94     ))
95                                   
96 (defun tm-mh-e::query-message ()
97   (let* ((folder (mh-prompt-for-folder "Visit" "+inbox" nil))
98          (number (tm-mh-e::prompt-for-message "Number?" folder))
99          )
100     (tm-mh-e::make-message folder number)
101     ))
102
103 (defun tm-mh-e::insert-message (&optional message)
104   (if (null message)
105       (setq message (tm-mh-e::query-message))
106     )
107   (insert-file (tm-mh-e::message/file-name message))
108   )
109
110 (if (featurep 'tm-comp)
111     (set-alist 'tm-comp/message-inserter-alist
112                'mh-letter-mode (function tm-mh-e::insert-message))
113   (add-hook 'tm-comp-load-hook
114             (function
115              (lambda ()
116                (set-alist
117                 'tm-comp/message-inserter-alist
118                 'mh-letter-mode (function tm-mh-e::insert-message))
119                )))
120   )
121
122
123 ;;; @ set up
124 ;;;
125
126 (defun tm-mh-e/decode-message-header ()
127   (make-local-variable 'minor-mode-alist)
128   (mime/add-header-decoding-mode-to-mode-line)
129   (let ((buffer-read-only nil))
130     (mime/decode-message-header-if-you-need)
131     (set-buffer-modified-p nil)
132     ))
133 (add-hook 'mh-show-mode-hook
134           (function tm-mh-e/decode-message-header))
135
136 (define-key mh-folder-mode-map "\et" 'tm-mh-e/toggle-header-decoding-mode)
137 (define-key mh-folder-mode-map "v" 'tm-mh-e/view-message)
138 (define-key mh-folder-mode-map "\r"
139   (function (lambda ()
140               (interactive)
141               (scroll-other-window 1)
142               )))
143 (define-key mh-folder-mode-map "\e\r"
144   (function (lambda ()
145               (interactive)
146               (scroll-other-window -1)
147               )))
148
149
150 (provide 'tm-mh-e)