Update copyright header.
[elisp/semi.git] / mime-ui-en.texi
1 \input texinfo.tex
2 @setfilename mime-ui-en.info
3 @settitle{SEMI 1.14 Manual}
4 @titlepage
5 @title SEMI 1.14 Manual
6 @author MORIOKA Tomohiko <morioka@@jaist.ac.jp>
7 @subtitle 1998/07/03
8 @end titlepage
9 @node Top, Introduction, (dir), (dir)
10 @top SEMI 1.14 Manual
11
12 @ifinfo
13
14 This file documents SEMI, a MIME user interface for GNU Emacs.
15 @end ifinfo
16
17 @menu
18 * Introduction::                What is SEMI?
19 * MIME-View::                   MIME message viewing
20 * MIME-Edit::                   MIME message editing
21 * Various::                     Miscellaneous
22 * Concept Index::               
23 * Function Index::              
24 * Variable Index::              
25 @end menu
26
27 @node Introduction, MIME-View, Top, Top
28 @chapter What is SEMI?
29
30 SEMI is a package for GNU Emacs to provide features related with MIME
31 user interface.@refill
32
33 SEMI provides two user interfaces: MIME-View and MIME-Edit.@refill
34
35
36 MIME-View is a kernel of user interface to display or operate MIME
37 messages, STD 11 messages or ``localized RFC 822'' messages.@refill
38
39 MIME-Edit is a user interface to compose MIME messages.@refill
40
41 Each MUA can use powerful MIME features to combine these features.
42
43
44 @node MIME-View, MIME-Edit, Introduction, Top
45 @chapter MIME message viewing
46
47 MIME-View is a MIME viewer for wide use that runs on GNU Emacs.@refill
48
49 MIME-View is the kernel of the user interface for browsing MIME
50 messages. You can start some presentation-method which is a program for
51 creating some representation, or some acting-method which is a program
52 for processing the entity. Then you can deal with a variety of entities.
53
54
55 @menu
56 * Overview of MIME-View::       Basic design
57 * MIME-Preview::                Presentation of mime-preview-buffer
58 * mime-view-mode::              Operation in mime-preview-buffer
59 @end menu
60
61 @node Overview of MIME-View, MIME-Preview, MIME-View, MIME-View
62 @section Basic design
63
64 The representation form of the internet messages in electric letters
65 or in net news is based on STD 11. The STD 11 message body is a plain
66 text which consists of lines as its only structure, and the character
67 code is fixed as us-ascii. Actually, there are ``localized STD 11''
68 messages that use some character code in their linguistic range
69 instead of using us-ascii. Even in that case, the character code in
70 the message is single. Therefore, Message User Agents have considered
71 (byte row) = (us-ascii string), or (byte row) = (string in the
72 character code in the linguistic range).@refill
73
74 Although, the MIME message has the tree structure in entity unit.
75 And one message can contain multiple character codes. The content of
76 an entity can be not only a letter or an image that can be displayed
77 simply, but also can be a voice or an animation that are played for
78 some time interval, a data for some specific application, a source
79 code of some program, or an external reference that consists of
80 the usage of ftp or mail service, or some URL. Therefore the simple
81 extension of STD 11 user interface, which only consider displaying
82 the message, cannot treat all of the MIME functionalities.
83 Then it is not sufficient to decode message along its MIME type, but
84 it is also required to consider a playback processing through some
85 dialogue with the user. The format of MIME messages is designed
86 to easily be passed to automatic processing. But some contents in the
87 MIME message should not be passed to automatic processing for security
88 reasons. So it should be designed to ask user in such cases.
89 After all, in order to deal with MIME message, it is required to
90 distinguish the representation for information exchange which is
91 written in STD 11 or MIME construction, and its result
92 after some interpretation which is a display screen or a playback
93 process. It is also needed to converse with user for playback
94 processing.@refill
95
96 Therefore, MIME-View uses two buffers for one document, one is the
97 mime-raw-buffer that stores the representation for information exchange,
98 and the other is the mime-preview-buffer that stores the representation
99 for displaying.@refill
100
101 MIME-View provides a mode in the mime-preview-buffer for reading MIME
102 message, which is called as mime-view-mode. User can manipulate each
103 entity there.
104
105
106 @node MIME-Preview, mime-view-mode, Overview of MIME-View, MIME-View
107 @section Presentation of mime-preview-buffer
108
109 mime-view-mode displays information about each entity as@refill
110
111 @example
112         [entity-button]
113         (header)
114         
115         (body)
116         (separator)
117 @end example
118
119 @noindent
120 You can change their design or inhibit showing some of them, according
121 to some condition.
122
123 See following example
124
125
126 @example
127 From: morioka@@jaist.ac.jp (MORIOKA Tomohiko)
128 Subject: Re: question?
129 Newsgroups: zxr.message.mime
130 Date: 22 Oct 93 11:02:44
131 Mime-Version: 1.0
132 Organization: Japan Advanced Institute of Science and Technology,
133         Ishikawa, Japan
134
135 [1  (text/plain)]
136   How to compose MIME message in MIME-Edit mode.
137
138   C-c C-x ? shows its help.
139
140 C-c C-x C-t     insert a text message.
141 C-c C-x TAB     insert a (binary) file.
142 C-c C-x C-e     insert a reference to external body.
143 C-c C-x C-v     insert a voice message.
144 C-c C-x C-y     insert a mail or news message.
145 C-c C-x RET     insert a mail message.
146 C-c C-x C-s     insert a signature file at end.
147 C-c C-x t       insert a new MIME tag.
148 C-c C-m C-a     enclose as multipart/alternative.
149 C-c C-m C-p     enclose as multipart/parallel.
150 C-c C-m C-m     enclose as multipart/mixed.
151 C-c C-m C-d     enclose as multipart/digest.
152 C-c C-m C-s     enclose as PGP signed.
153 C-c C-m C-e     enclose as PGP encrypted.
154 C-c C-x C-k     insert PGP public key.
155 C-c C-x p       preview editing MIME message.
156 ...
157
158 therefore, you should type C-c C-x C-i and specify the binary file
159 which you want to insert.
160
161   You should select Base64 as MIME encoding for binary file.
162
163 [2  (image/gif)]
164
165 [3  (text/plain)]
166
167   Like above, you can compose the message with image.
168
169 ==================== Take A Cup Of Russian Tea  ======================
170 =========  ** Not With Jam Nor Marmalade But With Honey **  ==========
171 =========                 MORIOKA TOMOHIKO                  ==========
172 ==============  Internet E-mail: <morioka@@jaist.ac.jp>  ==============
173 @end example
174
175
176
177 @menu
178 * entity-button::               
179 * entity-header::               
180 * entity-body::                 
181 @end menu
182
183 @node entity-button, entity-header, MIME-Preview, MIME-Preview
184 @subsection entity-button
185 @cindex entity-number
186 @cindex entity-button
187
188 @strong{entity-button} is a tag on the top of the entity
189 which shows brief information of the part.@refill
190
191 Normally, it appears as
192
193 @example
194         [1.3 test (text/plain)]
195 @end example
196
197 @noindent
198
199 The number on the head describes the place of the entity in the
200 message (like the section number) and it is called as
201 @strong{entity-number}.@refill
202
203 The string in the next describes its title. This information is
204 taken from
205
206 @enumerate
207 @item
208 Title described in Content-Description field or Subject field
209 @item
210 File name specified by filename parameter in Content-Disposition field
211 @item
212 File name specified by name parameter in Content-Type field
213 @item
214 File name for uuencode'ing
215 @end enumerate
216
217 @noindent
218 If none of them are specified, displays a blank.
219
220 The 3rd item in the parenthesis describes media-type/subtype of
221 the entity. If it is is not MIME entity, it displays @code{nil}.
222 @refill
223
224 This entity-button plays a role like icon that symbolically
225 shows the content of the entity. For example, push @kbd{v} on
226
227 @example
228         [2  (image/gif)]
229 @end example
230
231 @noindent
232 shows up the image contained there.
233
234 If the mouse operation is possible, you can display the image
235 by pushing 2nd button (the middle button for 3 button mouse) too.
236
237
238 @node entity-header, entity-body, entity-button, MIME-Preview
239 @subsection entity-header
240 @cindex entity-header
241
242 @strong{entity-header} is the header of the entity.
243 (Don't blame me as ``You say nothing more than as it is'',
244 It is no more than that.)
245
246 @node entity-body,  , entity-header, MIME-Preview
247 @subsection entity-body
248 @cindex entity-body
249
250 @strong{entity-body} is the content of the part.@refill
251
252 Sophistication does not seem enough here also, but it is really such
253 a thing.@refill
254
255 Though, it actually be twisted a little.@refill
256
257 The text entity is passed to code conversion according to its charset,
258 and the image entity should be converted on XEmacs.@refill
259
260 Details will be described later.
261
262
263 @node mime-view-mode,  , MIME-Preview, MIME-View
264 @section Operation in mime-preview-buffer
265
266 mime-preview-buffer posesses following functionalities.@refill
267
268 @table @kbd
269 @item @key{u}
270 go back to upper part (in the first part of the message,
271 go back to the Summary mode (*1))
272
273 @item @key{p}
274 go to previous part
275
276 @item @key{M-TAB}
277 go to previous part
278
279 @item @key{n}
280 go to next part
281
282 @item @key{TAB}
283 go to next part
284
285 @item @key{SPC}
286 scroll up
287
288 @item @key{M-SPC}
289 scroll down
290
291 @item @key{DEL}
292 scroll down
293
294 @item @key{RET}
295 go to next line
296
297 @item @key{M-RET}
298 go to previous line
299
300 @item @key{v}
301 play current part (*2)
302
303 @item @key{e}
304 extract file from current part (*2)
305
306 @item @key{C-c C-p}
307 print current part (*2)
308
309 @item @key{mouse-button-2}
310 start the mouse button in preview-buffer
311
312 on content-button, play current part (*2)@refill
313
314 on URL-button, start WWW browser@refill
315
316 @end table
317
318 @noindent
319 @strong{[Notice]}
320 @quotation
321
322 (*1) Do not go back to Summary mode unless appropriately
323 configured for mime-view in the MUA.@refill
324
325 (*2) actual behavior depends on the associated method
326 @end quotation
327
328
329
330 @node MIME-Edit, Various, MIME-View, Top
331 @chapter MIME message editing
332 @cindex MIME-Edit
333
334 @strong{MIME-Edit} is a general MIME composer for GNU Emacs.
335
336
337 @menu
338 * mime-edit-mode::              Minor-mode to edit MIME message
339 * single-part tags::            Operations for single-part
340 * enclosure tags::              Operations for enclosure
341 * other MIME-Edit operations::  Other operations
342 * file-type specification::     How to detect tag for inserted file
343 * transfer level::              
344 * message/partial sending::     Splitting
345 @end menu
346
347 @node mime-edit-mode, single-part tags, MIME-Edit, MIME-Edit
348 @section Minor-mode to edit MIME message
349 @cindex enclosure
350 @cindex multi-part ending tag
351 @cindex multi-part beginning tag
352 @cindex tag
353 @cindex mime-edit-mode
354
355 @strong{mime-edit-mode} is a minor mode to compose MIME message.  In
356 this mode, @strong{tag} represents various kinds of data, so you can
357 edit multi part message consists of various kinds of data, such as text,
358 image, audio, etc.@refill
359
360 There are 2 kinds of tags:
361
362 @itemize @bullet
363 @item
364  single-part tag
365 @item
366  multi-part tag
367 @end itemize
368
369 single-part tag represents single part, this form is following:@refill
370
371 @example
372         --[[TYPE/SUBTYPE;PARAMETERS][ENCODING]
373         OPTIONAL-FIELDS]
374 @end example
375
376 TYPE/SUBTYPE and PARAMETERS indicates type/subtype and parameters of
377 Content-Type (@ref{(mime-en)Content-Type}) field.  TYPE/SUBTYPE is
378 required, PARAMETERS is optional.@refill
379
380 ENCODING indicates Content-Transfer-Encoding
381 (@ref{(mime-ja)Content-Transfer-Encoding}) field.  It is optional
382 too.@refill
383
384 OPTIONAL-FIELDS is to represent another fields except Content-Type field
385 and Content-Transfer-Encoding field.@refill
386
387 multi-part tags represent multi part (@ref{(mime-en)multipart}).  They
388 consist of a pair of @strong{multi-part beginning tag} and
389 @strong{multi-part ending tag}.@refill
390
391 multi-part beginning tag's form is following:
392
393 @example
394         --<<TYPE>>-@{
395 @end example
396
397 multi-part ending tag's form is following:
398
399 @example
400         --@}-<<TYPE>>
401 @end example
402
403 A region from multi-part beginning tag to multi-part ending tag is
404 called as @strong{enclosure}.
405
406
407 @node single-part tags, enclosure tags, mime-edit-mode, MIME-Edit
408 @section Operations for single-part
409
410 Operations to make single-part are following:
411
412 @table @kbd
413 @item @key{C-c C-x C-t}
414 Insert single-part tag indicates text part.
415
416 @item @key{C-c C-x C-i}
417 Insert file as a MIME attachment.  If @kbd{C-u} is followed by it, it
418 asks media-type, subtype or encoding even if their default values are
419 specified. (cf. @ref{tag specification for inserted file})
420
421 @item @key{C-c C-x C-e}
422 Insert external part.
423
424 @item @key{C-c C-x C-v}
425 Record audio input until @kbd{C-g} is pressed, and insert as a
426 audio part. (It requires /dev/audio in default.)
427
428 @item @key{C-c C-x C-y}
429 Insert current (mail or news) message. (It is MUA depended.)
430
431 @item @key{C-c C-x C-m}
432 Insert mail message. (It is MUA depended.)
433
434 @item @key{C-c C-x C-w}, @key{C-c C-x C-s}
435 Insert signature.
436
437 @item @key{C-c C-x C-k}
438 Insert PGP (@ref{PGP}) public key. (It requires Mailcrypt package.)
439
440 @item @key{C-c C-x t}
441 Insert any single-part tag.
442
443 @end table
444
445
446
447 @node enclosure tags, other MIME-Edit operations, single-part tags, MIME-Edit
448 @section Operations for enclosure
449
450 Operations to make enclosure are following:
451
452 @table @kbd
453 @item @key{C-c C-m C-a}
454 Enclose specified region as multipart/alternative.
455
456 @item @key{C-c C-m C-p}
457 Enclose specified region as multipart/parallel.
458
459 @item @key{C-c C-m C-m}
460 Enclose specified region as multipart/mixed.
461
462 @item @key{C-c C-m C-d}
463 Enclose specified region as multipart/digest.
464
465 @item @key{C-c C-m C-s}
466 Digital-sign to specified region. (cf. @ref{PGP})
467
468 @item @key{C-c C-m C-e}
469 Encrypt to specified region. (cf. @ref{PGP})
470
471 @item @key{C-c C-m C-q}
472 avoid to encode tags in specified region.  In other words, tags is
473 interpreted as such string.  (In current version, it may be
474 incomplete.  Maybe PGP-signature does not work for this enclosure.)
475
476 @end table
477
478
479
480 @node other MIME-Edit operations, file-type specification, enclosure tags, MIME-Edit
481 @section Other operations
482
483 There are another operations in mime-edit-mode.
484
485 @table @kbd
486 @item @key{C-c C-c}
487 Send current editing message.
488
489 @item @key{C-c C-x p}
490 Preview current editing message. (cf. @ref{MIME-View})
491
492 @item @key{C-c C-x C-z}
493 Exit mime-edit-mode without sending.
494
495 @item @key{C-c C-x /}
496 Set current editing message to enable automatic splitting or not.
497 Form of automatic split messages is message/partial.
498
499 @item @key{C-c C-x 7}
500 Set 7bit (@ref{(mime-en)7bit}) to transfer level (@ref{transfer level}).
501
502 @item @key{C-c C-x 8}
503 Set 8bit (@ref{(mime-en)8bit}) to transfer level (@ref{transfer level}).
504
505 @item @key{C-c C-x v}
506 Set current editing message to digital-sign or not. (cf. @ref{PGP})
507
508 @item @key{C-c C-x h}
509 Set current editing message to encrypt or not. (cf. @ref{PGP})
510
511 @item @key{C-c C-x ?}
512 Display help message.
513
514 @end table
515
516
517
518 @node file-type specification, transfer level, other MIME-Edit operations, MIME-Edit
519 @section How to detect tag for inserted file
520
521 When @kbd{C-c C-x C-i} (@code{mime-edit-insert-file}) is pressed, tag
522 parameters for inserted file, such as media-type or encoding, are
523 detected by variable @code{mime-file-types}.@refill
524
525 When @kbd{C-u} is followed by it or parameter is not found from the
526 variable, it asks from user.  (When @kbd{C-u} is followed by it,
527 detected value is used as default value)@refill
528
529 If you want to change default value for file names, please change
530 variable @code{mime-file-types}.
531
532 @defvar mime-file-types
533
534 Specification of default value of tag for file name of inserted
535 file.@refill
536
537 It is a list of following list:
538
539 @lisp
540         (FILE_PAT TYPE SUBTYPE PARAMS ENCODING
541          DISPOSITION_TYPE DISPOSITION_PARAMS)
542 @end lisp
543
544
545 Each element of the list is following:
546
547 @table @samp
548 @item FILE_PAT
549 regular expression of file name
550
551 @item TYPE
552 primary-type of media-type
553
554 @item SUBTYPE
555 subtype of media-type
556
557 @item PARAMS
558 parameters of Content-Type field
559
560 @item ENCODING
561 Content-Transfer-Encoding
562
563 @item DISPOSITION_TYPE
564 disposition-type
565
566 @item DISPOSITION_PARAMS
567 parameters of Content-Disposition field
568
569 @end table
570
571 @noindent
572 Example: Specify application/rtf as default media type for
573 @file{*.rtf}
574
575 @lisp
576 (eval-after-load
577     "mime-edit"
578   '(set-alist 'mime-file-types
579               "\\.rtf$"
580               '("application" "rtf" nil nil
581                 "attachment" (("filename" . file)))
582               ))
583 @end lisp
584 @end defvar
585
586
587
588 @node transfer level, message/partial sending, file-type specification, MIME-Edit
589 @section transfer level
590 @cindex transfer level
591
592 Each content inserted in a message is represented by 7bit
593 (@ref{(mime-en)7bit}), 8bit (@ref{(mime-en)8bit}) or binary
594 (@ref{(mime-en)binary}).@refill
595
596 If a message is translated by 7bit-through MTA (@ref{(mime-en)MTA}),
597 there is no need to encode 7bit data, but 8bit and binary data must be
598 encoded to 7bit data.@refill
599
600 Similarly, if a message is translated by 8bit-through MTA, there is no
601 need to encode 7bit or 8bit data, but binary data must be encoded to
602 7bit or 8bit data.@refill
603
604 @noindent
605 @strong{[Memo]}
606 @quotation
607 EBCDIC MTA breaks 7bit data, so in this case, 7bit data must be
608 encoded by base64.  But I don't know EBCDIC. (^_^;
609
610 Similarly, I wish ASCII-printable only MTA and code-conversion MTA
611 disappeared. (^_^;@refill
612
613 Maybe there are binary-through MTA, but I think it is not major.
614 @end quotation
615
616 @strong{transfer level} represents how range data are
617 available.  mime-edit has a variable @code{mime-transfer-level}
618 to represent transfer level.
619
620
621 @defvar mime-transfer-level
622
623 transfer level.@refill
624
625 If transfer level of a data is over it, a data is encoded to
626 7bit.@refill
627
628 Currently, 7 or 8 is available.  Default value is 7.@refill
629
630 In extension plan, EBCDIC will be 5, ASCII printable only will be 6,
631 binary will be 9.  But it will not be implemented.
632 @end defvar
633
634
635
636 @noindent
637 @strong{[Memo]}
638 @quotation
639 transfer level is only for body, not for message header (@ref{header}).
640 MIME extends RFC 822 (@ref{(mime-en)RFC 822}) to use 8bit data in body,
641 but it requires to use us-ascii (@ref{(mime-en)us-ascii}) in header.
642 @end quotation
643
644
645
646 @node message/partial sending,  , transfer level, MIME-Edit
647 @section Splitting
648
649 @defvar mime-edit-split-message
650
651 Split large message if it is non-nil.
652 @end defvar
653
654
655 @defvar mime-edit-message-default-max-lines
656
657 Default maximum lines of a message.
658 @end defvar
659
660
661 @defvar mime-edit-message-max-lines-alist
662
663 Alist of major-mode vs maximum lines of a message.@refill
664
665 If it is not specified for a major-mode,
666 @code{mime-edit-message-default-max-lines} is used.
667 @end defvar
668
669
670 @defvar mime-edit-split-blind-field-regexp
671
672 Regular expression to match field-name to be ignored when split sending.
673 @end defvar
674
675
676
677 @node Various, Concept Index, MIME-Edit, Top
678 @chapter Miscellaneous
679
680
681 @menu
682 * PGP::                         Encryption, Sign
683 * Buttons::                     Mouse button
684 * Acting-condition configuration::  Utility for configuration
685 @end menu
686
687 @node PGP, Buttons, Various, Various
688 @section PGP
689 @cindex PGP-kazu
690 @cindex PGP/MIME
691
692 mime-edit provides PGP encryption, signature and inserting public-key
693 features based on @strong{PGP/MIME} (RFC 2015) or @strong{PGP-kazu}
694 (draft-kazu-pgp-mime-00.txt).@refill
695
696 This feature requires your pgp command.
697
698 @defvar pgg-default-scheme
699
700 Version of PGP or GnuPG command to be used for encryption or sign.
701 The value should be a symbol.  Allowed versions are @code{gpg},
702 @code{pgp} or @code{pgp5}.@refill
703 @end defvar
704
705
706 @defvar pgg-scheme
707
708 Version of PGP or GnuPG command to be used for decryption or verification.
709 The value should be a symbol.  Allowed versions are @code{gpg},
710 @code{pgp} or @code{pgp5}.@refill
711 @end defvar
712
713
714 @defvar pgg-insert-url-function
715
716 The function to fetch public key from the keyserver.
717 Use Emacs/W3 by the default setting. To use emacs-w3m
718 instead, set as follows:
719 @lisp
720 (setq pgg-insert-url-function #'w3m-retrieve)
721 @end lisp
722 @end defvar
723
724
725
726 @node Buttons, Acting-condition configuration, PGP, Various
727 @section Mouse button
728
729 @defvar mime-button-face
730
731 Face used for content-button or URL-button of MIME-Preview buffer.
732 @end defvar
733
734
735 @defvar mime-button-mouse-face
736
737 Face used for MIME-preview buffer mouse highlighting.
738 @end defvar
739
740
741 @defvar mime-browse-url-function
742
743 Function to browse URL.
744 @end defvar
745
746
747
748 @node Acting-condition configuration,  , Buttons, Various
749 @section Utility for configuration
750
751 @defun mime-add-condition target-type condition  &optional  mode file
752
753 Add @var{condition} to database specified by @var{target-type}.@refill
754
755 @var{target-type} must be @code{preview} or @code{action}.@refill
756
757 If optional argument @var{mode} is @code{strict} or @code{nil}
758 (omitted), @var{condition} is added strictly.@refill
759
760 If optional argument @var{mode} is @code{with-default}, @var{condition}
761 is added with default rule.@refill
762
763 If optional argument @var{file} is specified, it is loaded when
764 @var{condition} is activate.
765 @end defun
766
767
768
769 @node Concept Index, Function Index, Various, Top
770 @chapter Concept Index
771
772 @printindex cp
773
774 @node Function Index, Variable Index, Concept Index, Top
775 @chapter Function Index
776
777 @printindex fn
778
779 @node Variable Index,  , Function Index, Top
780 @chapter Variable Index
781
782 @printindex vr
783 @bye