1 \input texinfo.tex @c -*- texinfo -*-
7 @dircategory Emacs/MIME
9 * EMY: (emy). User guide for EMY.
12 @settitle EMY @value{VERSION}
15 This file describes how to use EMY, MIME user interface which
18 Copyright (C) 1993, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
20 Permission is granted to make and distribute verbatim copies of
21 this manual provided the copyright notice and this permission notice
22 are preserved on all copies.
25 Permission is granted to process this file through TeX and print the
26 results, provided the printed document carries copying permission
27 notice identical to this one except for the removal of this paragraph
28 (this paragraph not being relevant to the printed manual).
31 Permission is granted to copy and distribute modified versions of this
32 manual under the conditions for verbatim copying, provided that the entire
33 resulting derived work is distributed under the terms of a permission
34 notice identical to this one.
36 Permission is granted to copy and distribute translations of this manual
37 into another language, under the above conditions for modified versions,
38 except that this permission notice may be stated in a translation approved
39 by the Free Software Foundation.
44 @subtitle MIME User Interface implements SEMI API
45 @author Yoshiki Hayashi
47 @vskip 0pt plus 1filll
48 Copyright @copyright{} 1993, 94, 95, 96, 97, 98, 99 Free Software
51 Permission is granted to make and distribute verbatim copies of
52 this manual provided the copyright notice and this permission notice
53 are preserved on all copies.
55 Permission is granted to copy and distribute modified versions of this
56 manual under the conditions for verbatim copying, provided that the entire
57 resulting derived work is distributed under the terms of a permission
58 notice identical to this one.
60 Permission is granted to copy and distribute translations of this manual
61 into another language, under the above conditions for modified versions,
62 except that this permission notice may be stated in a translation approved
63 by the Free Software Foundation.
68 @top EMY: An Introduction
70 EMY is a MIME interface for Emacs. EMY provides SEMI API, which
71 is specified in a separate document.
72 @c @xref{(semi-api)Top}.
74 This manual corresponds to EMY version @value{VERSION}.
78 * MIME:: Overview of MIME.
79 * Overview:: What EMY does and doesn't.
80 * MIME-View:: How to View MIME messages.
81 * MIME-Edit:: How to compose MIME messages.
85 @chapter Overview of MIME
87 MIME stands for Multipurpose Internet Mail Extensions.
89 MIME is built on top of STD11. MIME enhances semantics of STD11 so that
90 you can send messages other than text/plain and US-ASCII. MIME does not
91 prohibit use of local conventions. However, its use is discouraged.
92 It would be nice if all MUA uses MIME to specify character set etc.
93 Then you don't have to be aware of all local conventions in the world.
95 Don't assume every MUA can handle MIME correctly. They might even don't
96 understand MIME. EMY takes interoperability the first priority. You
97 must be carefull to choose format that is easy to understand for
98 everyone. But you don't have to be afraid. MIME is written in such a
99 way that it can be viewed with non-MIME MUA if its well written.
101 EMY is here to make your life easier. It provides some way to ignore
102 standards to cooperate with broken world. However, it doesn't allow
103 you to send broken MIME messages. If you want to same brokenness like
104 them, EMY is not a candidate. If you really thinks it's needed, you can
105 try persuading me. Warning: `It's de facto standard' is not enough.
108 * Text:: What you normally do.
109 * Content-Types:: You can create messages other than text/plain.
113 @section Writing text
115 (I'll write this sections later).
118 @section Types of message you can use
121 * Content-Type:: Details of interpreting Content-Type.
125 @subsection How things are interpreted with each types
128 @chapter Some basic things about EMY
133 * Customize:: How to customize EMY.
137 @section What you should care about
140 @chapter Viewing MIME messages
142 Right now, only differences between SEMI and EMY are documented.
145 * Manipulating an Entity:: Changing representation of a part.
146 * Changing Entity Buttons:: Where to add button indicating that entity.
147 * Adding Buttons:: Where you want to see buttons.
148 * How to deal with broken MUA:: Some MUA sends totally broken messages.
151 @node Manipulating an Entity
152 @section Playing with an entity
154 You can change the representation of given part in the preview buffer.
155 Following commands are available in preview buffer.
160 @kindex c (MIME-View)
161 @findex mime-preview-text
162 Display the part as text/plain with automatic MIME charset
163 detection. You can specify coding-system if you give a numerical
164 prefix (@code{mime-preview-text}).
167 @kindex i (MIME-View)
168 @findex mime-preview-inline
169 Show the contents of the part without code-conversion. @code{C-u c
170 binary RET} does the same thing (@code{mime-preview-inline}).
173 @kindex t (MIME-View)
174 @findex mime-preview-type
175 Represent the part using the method specified by
176 @code{mime-preview-condition}. When there's no presentation method for
177 given part, nothing is performed (@code{mime-preview-type}).
180 @kindex e (MIME-View)
181 @findex mime-preview-extract-current-entity
182 Save content of the part to a file. It will prompt for you to enter
183 file name (@code{mime-preview-extract-current-entity}).
186 @kindex v (MIME-View)
187 @findex mime-preview-play-current-entity
188 Pass the entity to an external program specified by mailcap file
189 (@code{mime-preview-play-current-entity}).
190 @c Need more documentation about mailcap.
193 @kindex b (MIME-View)
194 @findex mime-preview-buttonize
195 Buttonize article (@code{mime-preview-buttonize}).
198 @kindex B (MIME-View)
199 @findex mime-preview-unbuttonize
200 Unbuttonize article (@code{mime-preview-unbuttonize}).
207 @kindex C-c C-t C-h (MIME-View)
208 @findex mime-preview-toggle-header
210 Toggle display of entity header.
213 @kindex C-c C-t C-c (MIME-View)
214 @findex mime-preview-toggle-content
216 Toggle display of entity body.
220 @node Changing Entity Buttons
221 @section How buttons look like
223 @vindex mime-use-widget
224 Before EMY 1.13.6, you need W- variants of SEMI to show wigdet buttons
225 From now on, you only need to set @code{mime-use-widget}
228 A button is a place where information about a given part is displayed.
229 Its contents is already defined.
231 [You should be able to customize button with format string.
232 This might be implemented in later versions. If you
236 @section Add button before, after or around an entity
238 @vindex mime-view-button-place-alist
239 You can customize where to add buttons and where to not with
240 @code{mime-view-button-place-alist}. Unfortunately, there's no variable
241 to change content of the button. It must be an alist of type or
242 type/subtype vs. keywords.
244 Three valid keywords are:
248 Add button before given types.
251 Add button when another part follows that type.
254 Do both @code{before} and @code{after}.
258 Notice when deciding whether inserting button or not, an entity of same
259 level is consulted as a previous entity. Let's say a message has
260 following structure and nothing is specified for text/xml.
270 When MIME-View decides text/xml part should have button or not, it
271 checks multipart/mixed has @code{after} or @code{around}, not
272 image/jpeg. This behaviour may be confusing. In the future version, the
273 very last part's value will be used as well.
279 (application . before)
280 (multipart/alternative . around))
283 This means you will have buttons around message/* and
284 multipart/alternative, and before application/*.
286 @node How to deal with broken MUA
287 @section Invalid MIME messages
289 Some MUAs send totally broken MIME messages. According to the standard,
290 it's perfectly fine for EMY not to grok those message. However, EMY
291 tries to extract as much information as possible. Here's some functions
294 Some MUAs localized to Japanese sends these strings as a filename
295 parameter of Content-Disposition.
298 =?ISO-2022-JP?B?GyRCRnxLXDhsGyhC?=
301 It looks like encoded-words. This usage is strictly prohibited by RFC
302 2047. Instead, you should use mechanism described in RFC 2231.
303 If you really want to ``decode'' it when saving it to file, you can use
310 (method . mime-save-content-for-broken-message)))
313 Unfortunately, there's no easy way to customize looking of buttons.
314 It's on EMY's TODO list.
316 If you are desperate, you can redefine
317 @code{mime-view-insert-entity-button}.
320 (defun mime-view-insert-entity-button (entity &optional body-is-invisible)
321 "Insert entity-button of ENTITY."
322 (let ((entity-node-id (mime-entity-node-id entity))
323 (params (mime-entity-parameters entity))
324 (subject (eword-decode-string (mime-view-entity-title entity))))
327 (let ((access-type (assoc "access-type" params))
328 (num (or (cdr (assoc "x-part-number" params))
329 (if (consp entity-node-id)
332 (format "%s" (1+ num))))
333 (reverse entity-node-id) ".")
336 (let ((server (assoc "server" params)))
337 (setq access-type (cdr access-type))
339 (format "%s %s ([%s] %s)"
340 num subject access-type (cdr server))
341 (let ((site (cdr (assoc "site" params)))
342 (dir (cdr (assoc "directory" params)))
343 (url (cdr (assoc "url" params))))
345 (format "%s %s ([%s] %s)"
346 num subject access-type url)
347 (format "%s %s ([%s] %s:%s)"
348 num subject access-type site dir))))))
350 (let ((media-type (mime-entity-media-type entity))
351 (media-subtype (mime-entity-media-subtype entity))
352 (charset (cdr (assoc "charset" params)))
353 (encoding (mime-entity-encoding entity)))
357 (format " <%s/%s%s%s>"
358 media-type media-subtype
360 (concat "; " charset)
363 (concat " (" encoding ")")
365 (if (>= (+ (current-column)(length rest))(window-width))
368 (if body-is-invisible
371 (function mime-preview-play-current-entity))))
374 @strong{Note:} These settings are unsupported until better way is
378 @chapter Composing MIME messages
380 @vindex mime-edit-attach-at-end-type (MIME-Edit)
381 When you are editing MIME message, you might want to insert some part at
382 the end of your message. Some MUA are known to have some problems when
383 last part is not an attachment.
385 If you want to do this, @code{mime-edit-attach-at-end-type} is your
386 friend. This variable is list of MIME types or type/subtypes inserted
387 at the last part. When only type is specified, it will affect all
388 subtypes of that type.
390 If you want insert application/* and message/rfc822 at the end,
391 you can do like this:
394 (setq mime-edit-attach-at-end-types
395 '(application message/rfc822))