File semi-1.14.6+239+gb1c245b81715.obscpio of Package emacs-semi
07070100000000000081A4000003E80000006400000001627140E500041933000000000000000000000000000000000000002A00000000semi-1.14.6+239+gb1c245b81715/ChangeLog.12020-08-19 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Change non-ASCII text files's coding-system to UTF-8
* ChangeLog: Likewise.
* README.ja: Likewise.
* VERSION: Likewise.
* semi-def.el: Remove coding cookie. This file is actually
encoded in US-ASCII.
* mime-edit.el: Likewise.
* mime-ui-ja.texi: Assume LuaTeX for typesetting.
2020-08-10 Jan Seeger <jan.seeger@thenybble.de>
New variable `mime-edit-insert-file-confirm' is introduced
When nil, don't confirm MIME parameters when inserting files.
* mime-edit.el (mime-edit-insert-file-confirm): New variable.
(mime-edit-insert-file, mime-edit-insert-file-as-text): Refer to
it.
2020-08-05 Naoya Yamashita <conao3@gmail.com>
Fix closing parens position (cosmetic change only).
Cf. https://github.com/wanderlust/semi/pull/21
2020-06-29 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-insert-file-parameters): Fix typo.
2020-06-14 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Minor refactorings.
* mime-edit.el (mime-edit-insert-file-parameters): Reduce use of
concat functions.
(mime-make-tag): Remove redundant codes.
(replace-space-with-underline)
(mime-edit-decode-single-part-in-buffer): Minor refactorings.
2020-06-12 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-display-text/plain): Revert the last
change. Fix the case content length is 0.
2020-06-05 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el: Require invisible.el explicitly.
2020-06-05 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* SEMI-MK: Assume Emacs 24 or later.
2020-06-03 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Use following-char and preceding-char instead of char-after and
char-before for the current point.
* mime-signature.el (mime-edit-signature-insert-plain)
(mime-edit-insert-signature): Likewise.
* mime-vcard.el (mime-display-text/vcard): Likewise.
* mime-view.el (mime-display-text/plain-flowed)
(mime-display-text/plain, mime-display-entity): Likewise.
2020-06-02 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Use invisibility feature directly.
* mime-edit.el: Don't require invisible.el.
(turn-on-mime-edit): Don't call enable-invisible function.
2020-06-02 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Strip use of function wrapping lambda.
* mail-mime-setup.el (mime-edit-split-message-sender-alist): Likewise.
* mime-edit.el (mime-edit-decode-single-part-in-buffer)
(mime-edit-split-and-send, replace-space-with-underline)
(mime-prompt-for-parameter): Likewise.
* mime-play.el (mime-echo-window-height, mime-play-entity): Likewise.
2020-06-01 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-display-header-hook): Define explicitly.
2020-05-30 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-vcard.el: Suppress byte compiler warning.
2020-05-30 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-bbdb.el: Removed.
* SEMI-ELS: Likewise.
* signature.el: Likewise.
2020-05-23 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Use lexical binding.
* mail-mime-setup.el: Likewise.
* mime-bbdb.el: Likewise.
* mime-edit.el: Likewise.
* mime-image.el: Likewise.
* mime-mac.el: Likewise.
* mime-partial.el: Likewise.
* mime-pgp.el: Likewise.
* mime-play.el: Likewise.
* mime-setup.el: Likewise.
* mime-shr.el: Likewise.
* mime-signature.el: Likewise.
* mime-vcard.el: Likewise.
* mime-view.el: Likewise.
* mime-w3.el: Likewise.
* semi-def.el: Likewise.
* semi-setup.el: Likewise.
* signature.el: Likewise.
2020-05-23 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* semi-setup.el (mime-setup-enable-epg): Default value is always
t.
2020-05-23 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Suppress byte-compiler's warnings.
* semi-setup.el (insert-signature): Move autoload cookie to top
level.
2020-05-23 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Drop old platforms support, dependency on cl.el. Now supported
Emacsen are version 24 and later.
* SEMI-ELS (semi-modules-to-compile): Remove postpet.el.
* mime-edit.el: Assuse Emacs 24 or later.
(mime-edit-help): Use help-print-return-message instead of
print-help-return-message
(mime-edit-insert-file-as-text, mime-edit-insert-file): Use
called-interactively-p instead of interactive-p.
(mime-edit-encrypt-pgp-recipients-keys): Now arguments are CONTEXT
and RECIPIENTS.
(mime-edit-encrypt-pgp-mime): Caller adjusted.
* mime-image.el: Assume Emacs 24 or later. Don't require cl.el,
static.el
* mime-pgp.el (mime-edit-make-boundary): Add autoload cookie.
* mime-view.el: Assume Emacs 24 or later.
(mime-view-mode): Don't use mime-message-structure
variable, which is obsolete.
(richtext-decode): Add autoload cookie.
* mime-w3.el: Assume Emacs 24 or later.
* postpet.el: Removed.
* semi-def.el: Remove dependency on cl.el. Assume Emacs 24 or
later.
* semi-setup.el (mime-setup-enable-inline-html)
(mime-html-previewer-alist): Add obsolete date.
(mime-setup-enable-inline-image): Assume Emacs 24 or later.
2020-04-28 Tatsuya Kinoshita <tats@debian.org>
* mime-edit.el (mime-edit-user-agent-value): Check for
emacs-build-number existence to handle emacs-version correctly.
2020-04-13 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-image.el (mime-image-max-width, mime-image-max-height):
Accept floating-point value which indicates ratio to frame pixel
width and height, respectively.
(mime-image-create): calculate max-width and max-height as above.
2020-04-12 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-image.el (mime-image-create): Check native image scaling
more strictly. Fix typo.
2019-07-07 Tatsuya Kinoshita <tats@debian.org>
* mime-view.el (mime-display-multipart/multilingual-prefered-languages):
Check for `get-language-info' existence.
2019-06-26 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-image.el (mime-image-create): Update native image scaling
checker.
2019-06-26 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Support previewing unencrypted pkcs7-mime part.
* mime-pgp.el (mime-pgp-maybe-remove-cr): New funcion.
(mime-pgp-decrypt-string): Use it.
(mime-pgp-entity-string): New function.
(mime-verify-application/*-signature-internal): Use it.
(mime-pgp-verify-result-to-string)
(mime-pgp-pkcs7-decrypt-enveloped-data)
(mime-pgp-pkcs7-verify-signed-data)
(mime-pgp-smime-type-from-situation)
(mime-pgp-register-decrypted-buffer): New functions.
(mime-preview-application/pgp-encrypted): Refactored.
(mime-view-application/pkcs7-mime)
(mime-preview-application/pkcs7-mime): Support unencrypted part.
2019-05-18 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-pgp-encrypt-to-self): Change default
value to t.
2019-05-18 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-view-multipart/related-show-all-children)
(mime-view-multipart/alternative-show-all-children): Change
default value to t.
2019-05-17 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-image.el (mime-image-normalize-xbm-buffer)
(mime-image-read-xbm-buffer): Do not receive arguemnt nor change
current buffer. All callers call it with current buffer.
(mime-image-create): Caller adjusted.
2019-05-17 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
New customizable variable mime-image-normalize-xbm is introduced.
When it is nil, xbm image is not normalized but scalable.
* mime-image.el (mime-image-normalize-xbm): New customizable
variable.
(mime-image-max-height, mime-image-max-width): Update docstring to
refer to mime-image-normalize-xbm.
(mime-image-create): Do not normalize xbm image when
mime-image-normalize-xbm is nil.
2019-05-16 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Native image scaling support.
* mime-image.el (mime-image-max-height, mime-image-max-width):
Update docstring.
(mime-image-create): Use image scaling if available.
2019-04-04 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-tnef.el (mime-tnef-parse): Fix the case input STRING is too
short.
2019-03-07 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-tnef.el (mime-tnef-decode-string)
(mime-tnef-decode-unicode-string): Minor refactoring.
2019-03-07 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Fix the case winmail.dat contains text file.
mime-edit-insert-file-parameters requires a existing file to
decide charset value. By this fix, caller decides charset.
* mime-tnef.el (mime-tnef-insert-file-parameters): New function.
(mime-tnef-insert-file): Use it.
2018-08-25 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Displaying resized image is supported. Emacs 24.4 or later with
built-in imagemagick is required.
* mime-image.el (mime-image-max-height, mime-image-max-width): New
variables.
(mime-image-create): Use them.
2018-02-11 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-view-multipart-descendant-button)
(mime-display-multipart/alternative): pass situation as
DEFAULT-SITUATION to mime-display-entity function.
2018-02-10 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Show entity's button after header when content type is message and
child entity is not text nor multipart.
* mime-view.el (mime-view-entity-title): prefer filename to
Subject field.
(mime-display-entity): If situation parameter `button-position' is
`after', display button after header.
(mime-display-message): Display child entitiy's button after
header when needed.
(mime-display-message/rfc822): New function. Used for
message/rfc822 and message/news entity.
2018-02-11 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Support for multipart/multilingual entity (RFC 8255).
* mime-edit.el (mime-edit-decode-single-part-in-buffer): Keep
Content-Language and Content-Translation-Type fields.
* mime-view.el (mime-view-insert-entity-button): Show language
information in button if Content-Language: header is available.
(mime-display-multipart/multilingual-prefered-languages)
(mime-display-multipart/multilingual-unknown-translation-type)
(mime-display-multipart/multilingual-translation-type-score)
(mime-display-multipart/multilingual-interactive): New varaibles.
(mime-display-multipart/multilingual-select-interactively)
(mime-display-multipart/multilingual-select-automatically)
(mime-display-multipart/multilingual): New functions.
2018-02-11 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-display-multipart/related): Use
mime-view-multipart-descendant-button for multipart children when
mime-view-multipart/related-show-all-children is non-nil.
2018-02-05 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Workaround for Apple Mail, which may attach attachment as part of
multipart/alternative entity. It is hard to find the attachment
for MIME-View mode user. When
mime-view-multipart/alternative-show-all-children is non-nil, such
hidden attachment's button would appear.
* mime-view.el
(mime-view-multipart/alternative-show-all-children): New variable.
(mime-view-multipart-descendant-button): New function.
(mime-display-multipart/alternative): As above.
2016-08-14 Erik Hetzner <egh@e6h.org>
* mime-ui-en.texi: Add dir entry
* mime-ui-ja.texi: Likewise
2016-07-01 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-tnef.el (mime-tnef-files): Fix corrupt result.
2016-03-01 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-insert-file-charset): Use default
parameter for completing-read. Show default value into the
prompt.
(mime-prompt-for-type): Simplify result checking routine.
(mime-prompt-for-subtype): Refactored.
(mime-prompt-for-parameter): Use default parameter for
completing-read.
(mime-prompt-for-encoding): Show default value into the prompt.
2016-02-24 Erik Hetzner <egh@e6h.org>
* mime-edit.el (mime-prompt-for-type, mime-prompt-for-type)
(mime-prompt-for-encoding): Use default parameter to set default
answer.
(mime-prompt-for-encoding): Make default optional.
(mime-edit-insert-voice): Use `mime-prompt-for-encoding' to prompt
user for encoding.
2016-02-04 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
User is now prompted whether proceed PGP/MIME encryption when
recipient key is not available.
* mime-edit.el (mime-edit-encrypt-pgp-ignore-missing-keys): New
variable.
(mime-edit-encrypt-pgp-recipients-keys): New function.
(mime-edit-encrypt-pgp-mime): Use them.
2016-01-17 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-encrypt-pgp-mime): Do not let-bind
variable for mime-edit-make-encrypt-recipient-header here.
(mime-edit-make-encrypt-recipient-header): Let-bind internal
variable here.
2015-05-25 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-shr.el (mime-shr-preview-text/html): Workaround for
shr-insert-document.
Cf. https://github.com/wanderlust/semi/issues/11
2015-05-25 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-tnef.el (mime-tnef-insert-file): Fix for non-ASCII filename.
(mime-display-application/ms-tnef): Adjusted.
2015-05-16 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Experimental support of application/ms-tnef entity.
* mime-edit.el (mime-content-types): Add entries for ms-tnef
subtype.
(mime-file-types): Add entry for winmail.dat.
* mime-tnef.el: New file.
* semi-setup.el: Define preview condition for application/ms-ntef
entity.
* SEMI-ELS (semi-modules-to-compile): Add mime-tnef.el.
2015-05-07 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-pgp-get-signers): Search epg-key from
From: field's mail address with exact match.
2015-05-07 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-make-encrypt-recipient-header): Car of
return vale is now expanded list of mail addresses and key-id.
Enclose mail addresses with '<' and '>'.
Cf. https://github.com/wanderlust/semi/issues/9
(mime-edit-encrypt-pgp-mime): Adjusted.
2015-05-03 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-make-encrypt-recipient-header): Handle
multiple same name fields.
2015-05-03 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Fix for CCL unusable environments.
* mime-edit.el (mime-edit-normalize-eol-crlf): Define for only CCL
usable environment.
(mime-edit-sign-pgp-mime): Use elisp routine for CCL unusable
environments.
2015-02-04 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-make-encrypt-recipient-header): Returns
cons of recipients list and header string. Pick recipients more
strictly.
(mime-edit-encrypt-pgp-mime, mime-edit-encrypt-smime): Adjusted.
2014-11-09 Erik Hetzner <egh@e6h.org>
* semi-pkg.el: New file.
2014-11-09 Erik Hetzner <egh@e6h.org>
* mime-ui-en.texi: Fix headers and missing cross-references.
* mime-ui-ja.texi: Likewise.
* mime-ui-en.sgml: Removed.
* mime-ui-ja.sgml: Removed.
2014-10-26 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el (mime-verify-application/*-signature): Set
epa-info-buffer's buffer to the current buffer when the buffer is
displyed.
(mime-decrypt-application/pgp-encrypted): Remove unused code.
2014-10-25 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el (mime-add-application/pgp-keys): Prompt before
import. Show result.
* mime-edit.el (mime-edit-insert-key): Really insert keys.
2014-09-13 Erik Hetzner <egh@e6h.org>
* mime-play.el (mime-activate-mailcap-method): Bind
process-connection-type to nil while starting external process.
Cf. https://github.com/wanderlust/semi/pull/5
2014-09-01 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el (mime-pgp-decrypt-string)
(mime-verify-application/*-signature-internal): Bind
inhibit-eol-conversion to nil while eol conversion.
2014-09-01 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el (mime-parse): Require mime-parse.el.
2014-08-31 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-translate-single-part-tag): Fix the last
change.
2014-08-31 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-split-and-send): Do not use
`insert-buffer' and `goto-line'.
2014-08-31 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-pgp-get-signers): Fix `mapcar' called
for effect.
2014-08-31 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-image.el (mime-image-normalize-xbm-buffer): Add comment for
using save-excursion+set-buffer.
* mime-partial.el
(mime-combine-message/partial-pieces-automatically): Likewise.
* mime-view.el (mime-view-buffer)
(mime-preview-follow-current-entity): Likewise.
* semi-def.el (mime-button-dispatcher): Likewise.
2014-08-31 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-split-and-send): Use
`with-current-buffer' rather than save-excursion+set-buffer.
* mime-play.el (mime-store-message/partial-piece): Likewise.
* mime-view.el (mime-preview-original-major-mode)
(mime-maybe-hide-echo-buffer)
(mime-preview-follow-current-entity): Likewise.
2014-08-30 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-process-multipart-1)
(mime-edit-translate-single-part-tag)
(mime-edit-decode-single-part-in-buffer): Remove concat from
insert and concat combination.
* mime-view.el (mime-preview-follow-current-entity): Likewise.
* semi-def.el (mime-insert-button): Likewise.
2014-08-30 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-convert-lbt-string): Refactored.
2014-08-29 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-pgp-get-signers): Prefer
mime-edit-pgp-signers's key to the first found key for the same
user ID.
(mime-edit-pgp-signers): Update docstring.
2014-05-30 Juliusz Chroboczek <jch@pps.univ-paris-diderot.fr>
* mime-view.el (mime-display-multipart/alternative): Pick and
display the latter part when there are multiple parts which have
the highest score.
Cf. https://github.com/wanderlust/wanderlust/issues/60
2014-04-17 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-display-text/plain): Check parameter's value
case insensitively.
2014-04-17 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-preview-fill-flowed-text)
(mime-preview-fill-flowed-text-delsp): Abolished. Internal
decoder is always available.
(mime-display-text/plain-flowed-fill-column): New variable.
(mime-display-text/plain-flowed-parse-line)
(mime-display-text/plain-flowed): New functions.
(mime-display-text/plain): Use them.
2014-04-17 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* SEMI-MK (compile-semi): Set mime-situation-examples-file to nil.
* mime-view.el: Do not modify mime-situation-examples-file's value.
2014-04-17 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-view-define-keymap): Use mapc instead of
mapcar for side effect.
2014-03-15 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* semi-setup.el: Set up for previewing
application/x-pkcs7-signature part.
2014-02-21 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-normalize-eol-crlf): New CCL program.
(mime-edit-sign-pgp-mime): Use it to improve speed.
* mime-pgp.el (mime-pgp-decrypt-string)
(mime-verify-application/*-signature-internal): Refactored.
2014-02-15 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-display-entity): Add comment.
2014-02-12 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* semi-setup.el: Remove preview setting for multipart/signed part.
Use mime-pgp-verify-when-preview and mime-pgp-decrypt-when-preview
to define visibility conditions.
* mime-view.el (mime-display-entity): insert LF when inserted
content does not end with LF.
* mime-pgp.el (mime-display-multipart/signed): Removed.
(mime-display-multipart/pgp-encrypted): Adapt to recent change.
2014-02-11 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* semi-setup.el: Set up for previewing application/pkcs7-mime
part.
* mime-view.el (mime-pgp-verify-when-preview)
(mime-pgp-decrypt-when-preview): Moved from mime-pgp.el.
(mime-display-entity-visible-p): New function.
(mime-display-entity): function, variable, t, and nil are
acceptable for situation of entity-button, header and body.
Function will receive one argument SITUATION and return visible,
invisible, t or nil.
* mime-pgp.el (mime-pgp-verify-when-preview)
(mime-pgp-decrypt-when-preview): Moved to mime-view.el.
(mime-preview-application/pkcs7-mime): New function.
2014-02-08 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el (mime-preview-application/pgp-encrypted): Handle
errors in decryption.
2014-02-06 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el (mime-pgp-decrypt-string): New function.
(mime-decrypt-application/pgp-encrypted)
(mime-preview-application/pgp-encrypted)
(mime-view-application/pkcs7-mime): Use it. Remove CRs at EOL
from result when there is CR at the first EOL.
2014-01-31 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* semi-setup.el: S/MIME signed entity respects
mime-pgp-verify-when-preview's value.
* mime-pgp.el (mime-display-multipart/signed): Renamed from
mime-display-multipart/pgp-signed. Support S/MIME signed entity.
2014-01-30 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el (mime-pgp-verify-when-preview): Set default to t.
2014-01-30 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el (mime-pgp-verify-when-preview): New customizable
variable.
(mime-display-multipart/pgp-signed): New function.
* semi-setup.el: Add setting for pgp-signed entity.
2014-01-27 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* semi-setup.el: Add setting for previewing
application/pkcs7-signature entity.
* mime-pgp.el (mime-preview-application/*-signature): Handle errors.
2014-01-19 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-preview-message): Switch to the original
buffer when translation fails. Moreover, kill temporary buffer
if mime-edit-debug is nil.
2014-01-18 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-debug): New variable.
(mime-edit-translate-buffer): Do not undo if above variable is
non-nil.
2014-01-17 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-translate-buffer): Undo buffer when
translation fails and buffer is modified. Do not catch
mime-edit-error tag, because no one throws in SEMI-EPG.
(mime-edit-sign-pgp-mime, mime-edit-encrypt-pgp-mime)
(mime-edit-sign-smime, mime-edit-encrypt-smime): Remove
condition-case.
2014-01-12 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* semi-setup.el: Prevent mime-w3m-insinuate function from
modifying mime-preview-condition and
mime-view-type-subtype-score-alist. Make mime-w3m-insinuate
function to mofidy mime-view-text/html-previewer's value.
2014-01-12 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
More customizable text/html entity handling. Now you can switch
text/html entity previewer and score by modifying
mime-view-text/html-previewer and mime-view-text/html-score
real-time.
* mime-view.el (mime-view-text/html-score)
(mime-view-text/html-previewer-alist)
(mime-view-text/html-previewer): New variables.
(mime-preview-condition): Set up for text/html entity.
(mime-display-text/html-previewer-params)
(mime-display-text/html): New functions.
(mime-view-text/html-entity-score): New function.
(mime-view-type-subtype-score-alist): Update for text/html entity.
* semi-setup.el (mime-html-previewer-alist)
(mime-setup-enable-inline-html): Obsolete. Use
mime-view-text/html-previewer-alist and
mime-view-text/html-previewer respectively.
2014-01-12 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-view-type-subtype-score-alist): Accept
variable as an alternate of score and function. Remove
entry for default score.
(mime-view-entity-score): Likewise.
2014-01-12 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-view-entity-lowest-score): New variable.
(mime-view-entity-score): Use it.
2014-01-10 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-image.el: Check image feature's availability statically.
2013-12-25 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-play.el: Use NOERROR option of require funciton instead of
condition-case.
* mime-shr.el: Likewise.
* mime-w3.el: Likewise.
2013-12-20 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el (mime-display-multipart/pgp-encrypted): Adapt for
the last change of mime-view.el.
* mime-signature.el (mime-edit-default-signature): Check
mail-signature contains separator.
2013-10-06 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-view-multipart/related-show-all-children):
Renamed from mime-view-multipart-show-all-children.
(mime-display-multipart/related): Likewise.
2013-10-06 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-content-types): Add entry for text/vcard.
(mime-file-types): Add entry for .vcf file.
* semi-setup.el: Define previewer for text/vcard part as well as
text/x-vcard.
* mime-vcard.el (mime-display-text/vcard-hook): Renamed from
mime-display-text/x-vcard-hook. Define explicitly.
(mime-display-text/vcard): Renamed from mime-display-text/x-vcard.
2013-07-20 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el (mime-verify-application/*-signature)
(mime-decrypt-application/pgp-encrypted): pass string to
epa-display-info function. This is the fix for the change of
2012-10-06.
2013-06-09 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el (mime-verify-application/*-signature-internal)
(mime-verify-application/*-signature)
(mime-preview-application/*-signature): Avoid signaling error when
protocol parameter of Contetn-Type header is incorrect or missing.
2013-02-11 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* SEMI-ELS (semi-modules-to-compile): Add mime-signature.el.
* mime-edit.el: Do not require signature.el
(mime-edit-insert-signature): Moved to mime-signature.el and
define atuload for it.
* mime-signature.el: New file.
* semi-setup.el (mime-setup-use-signature): Now nil is default.
2012-12-30 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el (mime-pgp-decrypted-buffers): New variable.
(mime-pgp-kill-decrypted-buffers): New function.
(mime-preview-application/pgp-encrypted): Keep decrypted content
until the preview buffer is killed.
* mime-view.el (mime-display-entity): Do not propertize with
mime-view-* properties on already propertized region.
2012-12-23 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* semi-def.el (mime-add-condition): Define autoload for method and
body-presentation-method's parameter.
* semi-setup.el: Use mime-add-condtion for preview functions that
require autoload.
2012-12-22 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* semi-setup.el: Remove settings for mime-view-application/pgp
function. SEMI-EPG does not have this funciton.
2012-12-22 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el: Require mmgeneric.el in compiling.
(mime-preview-application/pgp-encrypted): New function. Imported
and modified from Wanderlust.
* semi-setup.el: Add setting for
mime-preview-application/pgp-encrypted.
2012-12-21 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-shr.el (mime-shr-blocked-images): Change its customization
gorup to mime-view.
2012-12-19 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-view-multipart-show-all-children): New
customizable variable.
(mime-display-multipart/related): Refer to it.
* mime-pgp.el (mime-display-multipart/pgp-encrypted): Likewise.
2012-12-18 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el (mime-pgp-decrypt-when-preview): New customizable
variable.
(mime-display-multipart/pgp-encrypted): New function.
* semi-setup.el: Define autoload and mime-preview-codition's
settings for mime-display-multipart/pgp-encrypted.
2012-12-18 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-encrypt-pgp-nonmime): New function.
2012-10-07 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el: Use mapc instead of mapcar for side effect.
Assume emacs-major-version is greater than 18.
2012-10-06 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-pgp.el (mime-verify-application/*-signature)
(mime-decrypt-application/pgp-encrypted): Use epa-display-info
instead of epa-display-verify-result
* mime-image.el (mime-image-normalize-xbm-buffer): Use
string-to-number instead of string-to-int.
* mime-shr.el: Load shr.el at compile time.
2012-10-05 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-epg.el: Renamed to mime-pgp.el.
* mime-pgp.el: Renamed from mime-epg.el.
* SEMI-ELS: Likewise.
* semi-setup.el: Likewise.
2012-10-04 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-view-entity-score): New function. The
default score (-1) is hard-coded.
(mime-display-multipart/alternative): Use it.
(mime-view-multipart-entity-score): New function.
(mime-view-type-subtype-score-alist): Add entry for multipart
entity.
2012-09-09 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-insert-file)
(mime-edit-insert-file-as-text): Minor refactoring.
2012-09-08 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-insert-text-file)
(mime-edit-insert-file-as-text): New functions.
(mime-edit-mode-entity-map, mime-edit-menu-list, mime-edit-mode):
Add entry for mime-edit-insert-file-as-text.
2012-09-07 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-insert-file-filename)
(mime-edit-insert-file-charset)
(mime-edit-insert-file-parameters): New functions.
(mime-edit-insert-file): Use them. Capable to define charset
while inserting.
(mime-file-types): Define charset parameter for text files.
2012-09-07 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-normalize-body): Define charset more
exactly for encoded text entity.
2012-08-25 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-display-text/plain): Minor refactoring.
(mime-display-text/richtext, mime-display-text/enriched): Do not
use `let'.
2012-08-25 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-display-insert-text-content): New function.
(mime-display-text/plain, mime-display-text/richtext)
(mime-display-text/enriched): Use it.
2012-04-30 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* semi-setup.el: Fix the case of that
mime-setup-enable-inline-html is nil.
* mime-shr.el (mime-shr-preview-text/html): Delete garbage
overlay.
2012-04-28 MORIOKA Tomohiko <tomo.git@chise.org>
* README.en: Add coding cookie to specify UTF-8.
2012-04-28 MORIOKA Tomohiko <tomo@zinbun.kyoto-u.ac.jp>
* README.ja, README.en: Remove descriptions about CVS and add
description about the new Git repository.
2012-04-28 MORIOKA Tomohiko <tomo@zinbun.kyoto-u.ac.jp>
* README.ja, README.en (Required environment): Modify for the new
URLs of APEL and FLIM.
(Mailing lists): Modify for the new Emacs-MIME mailing lists.
2010-11-12 MORIOKA Tomohiko <tomo@zinbun.kyoto-u.ac.jp>
* semi-setup.el: Add setting for mime-mac.el if running with Mac
OS X.
2010-11-11 MORIOKA Tomohiko <tomo@zinbun.kyoto-u.ac.jp>
* SEMI-ELS (semi-modules-to-compile): Add `mime-mac' if running
with Mac OS X.
* mime-mac.el: New file.
* mime-play.el (mime-save-content): Return filename.
2005-12-25 MORIOKA Tomohiko <tomo@zinbun.kyoto-u.ac.jp>
* semi-def.el (mime-user-interface-product): Update to 1.14.7.
2012-04-27 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
Experimental support of shr (Simple HTML Renderer) for html
entity.
* mime-shr.el: New file.
* semi-setup.el (mime-html-previewer-alist): Likewise.
* SEMI-ELS (top): Likewise.
2012-04-21 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-view-mailcap-files): Reverse the order of
files. Do not care of mime-mailcap-file's value.
(mime-view-read-mailcap-files): The file indicated by
mime-mailcap-file has the most priority.
2012-03-07 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-pgp-filtered-validities): New variable.
(mime-edit-pgp-keys-valid-key): New function.
(mime-edit-pgp-get-signers, mime-edit-encrypt-pgp-mime): Use them.
Do not return invalid keys.
Cf. https://github.com/ikazuhiro/semi-epg/pull/1
2011-07-16 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-make-encrypt-recipient-header): When
mime-edit-pgp-encrypt-to-self is non-nil, add From field value to
recipients.
(mime-edit-encrypt-recipient-fields-list): Add "From".
* mime-epg.el (mime-preview-application/*-signature): Result
string always terminates with LF.
2011-06-24 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-sign-pgp-nonmime): Renamed from
`mime-edit-sign-pgp-nomime'.
2011-06-23 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-epg.el (mime-verify-application/*-signature-internal): New
function.
(mime-verify-application/*-signature): Use it.
(mime-preview-application/*-signature): New function.
* semi-setup.el (Top): Setup mime-preview-application/*-signature
for previewing signature entity.
2011-06-19 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el: Specify file mode and coding.
2011-06-18 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-transfer-level): Fix wrong docstring.
(mime-file-types): Set 'name' parameter of Content-Type field and
'filename' parameter of Content-Disposition field.
2011-06-08 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-insert-file): Encode a filename when
FLIM does not support non-ASCII filename.
(mime-edit-decode-single-part-in-buffer): Keep 'name' parameter of
Content-Type field. Unfold and decode it and 'filename' parameter
of Content-Disposition field.
2010-12-18 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-display-message): Do not hide button when
first entity is neither text nor multipart.
2010-12-10 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-decode-single-part-in-buffer): Keep
Content-Id field.
2010-12-09 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-preview-fill-flowed-text-delsp): New
variable.
(mime-display-text/plain): Handle "delsp=yes" if
mime-preview-fill-flowed-text-delsp's value is non-nil.
2010-12-04 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-pgp-get-signers): Widen before calling
std11-field-body(). Check return value from std11-field-body().
2010-12-04 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-pgp-get-signers): New function.
(mime-edit-sign-pgp-mime, mime-edit-sign-pgp-nomime): Use it.
2010-12-02 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el (mime-edit-sign-pgp-mime): Fix "From:" header
string is ignored when non-verbose mode and
mime-edit-pgp-signers's value is nil. Refined.
(mime-edit-sign-pgp-nomime): Respect "From:" header string.
Respect mime-edit-pgp-verbose's value. Require epa.el.
2010-12-01 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* semi-def.el (mime-user-interface-product): Rename product name
from SEMI to SEMI-EPG.
* mime-edit.el (mime-edit-pgp-user-id): Removed.
(mime-edit-text-coding, mime-edit-sign-pgp-nomime): New functions.
2010-11-29 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* SEMI-MK (install-execs): Removed.
* SEMI-CFG (METHOD_SRC_DIR, METHODS): Removed.
2010-11-28 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-edit.el: EasyPG support is merged from
emiko-1.14.1-for-epg-0.0.13. All PGG supports are abolished.
(smime-output-buffer, smime-errors-buffer): Abolished.
(mime-edit-pgp-verbose, mime-edit-pgp-signers)
(mime-edit-pgp-encrypt-to-self): New variables.
(mime-edit-user-agent-value): Include EasyPG version.
(mime-edit-mode-enclosure-map): Map keys for
mime-edit-mode-enclosure-map and
mime-edit-enclose-smime-encrypted-region.
(mime-edit-sign-pgp-mime, mime-edit-encrypt-pgp-mime)
(mime-edit-convert-lbt-string, mime-edit-sign-smime)
(mime-edit-encrypt-smime, mime-edit-insert-key)
(mime-edit-decode-multipart-in-buffer): Merged or ported from
emiko-emiko-1.14.1-for-epg-0.0.13.
(mime-edit-sign-pgp-kazu, mime-edit-encrypt-pgp-kazu)
(mime-edit-enclose-kazu-signed-region)
(mime-edit-enclose-kazu-encrypted-region): Abolished.
2010-11-28 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-vcard.el (mime-vcard-standard-filters): Abolished.
(mime-vcard-filter-quoted-printable): Abolished.
(mime-display-text/x-vcard): Likewise. Use vcard-pretty-print().
2010-11-27 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-epg.el: New module. Merged and renamed from mime-pgp.el of
emiko-1.14.1-for-epg-0.0.13.
* SEMI-ELS (semi-modules-to-compile): Add mime-epg. Remove
mime-pgp. PGG supports for verifing and decrypting are abolished.
* mime-pgp.el: Removed.
* semi-setup.el: Set up to use it.
(mime-setup-enable-pgp): Abolished.
(mime-setup-enable-epg): New variable.
2000-08-22 Daiki Ueno <ueno@unixuser.org>
* SEMI-ELS: Compile `mime-vcard' only when vcard.el is available.
2000-08-21 Daiki Ueno <ueno@unixuser.org>
* mime-vcard.el: New module.
* semi-setup.el: Set up for "text/x-vcard".
(mime-setup-enable-vcard): New variable.
* mime-view.el: Add setting for 'vcard-parse-string',
`vcard-format-string' and `vcard-filter-html' to autoload "vcard".
Set up for "text/x-vcard".
Add setting for `fill-flowed' to autoload "flow-fill".
(mime-display-text/plain): Handle "format=flowed".
(mime-preview-fill-flowed-text): New variable.
2010-11-18 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* semi-setup.el: Support emacs-w3m.
(mime-html-previewer-alist): New variable.
(mime-setup-enable-inline-html): Refer to it. Support other html
renderers.
2010-11-10 Kazuhiro Ito <kzhr@d1.dion.ne.jp>
* mime-view.el (mime-view-type-subtype-score-alist): Accept
function as an alternate of score.
(mime-view-type-subtype-score-alist): Likewise.
2010-10-24 Vitaly Mayatskikh <v.mayatskih@gmail.com>
* mime-view.el (mime-save-situation-examples): Don't fail when
mime-situation-examples-file is nil.
2010-06-21 Katsumi Yamaoka <yamaoka@jpl.org>
* SEMI-CFG: Add emu subdirectory to load-path when LISPDIR is
specified. Suggested by Kazuhiro NISHIYAMA <zn@mbf.nifty.com>.
2010-06-04 David Maus <dmaus@ictsoc.de>
* pgg-parse.el: Add reference to RFC4880.
(pgg-parse-symmetric-key-algorithm-alist)
(pgg-parse-hash-algorithm-alist)
(pgg-parse-compression-algorithm-alist)
(pgg-parse-signature-type-alist): Update lists to RFC4880.
2010-02-19 Heinz Diehl <htd@fancy-poultry.org>
* mime-edit.el (mime-edit-set-encrypt): Fix typo.
2010-02-07 David Maus <maus.david@gmail.com>
* mime-edit.el (mime-edit-encrypt-pgp-mime): Added Version tag for
pgp-encrypted messages to comply with RFC3156.
* mime-edit.el (mime-edit-pgp-enclose-buffer): Sign and encrypt
pgp message in conformance to RFC3156.
2010-01-25 Harald Judt <h.judt@gmx.at>
* mime-edit.el (mime-content-types): Added more MIME types.
2010-01-25 Vitaly Mayatskikh <v.mayatskih@gmail.com>
* mime-edit.el (mime-edit-insert-file): Ask user for MIME type and
subtype during interactive file insertion, not only encoding.
* mime-pgp.el (toplevel): New function:
`mime-display-multipart/pgp-encrypted'.
* pgg-def.el (toplevel): New custom: `pgg-decrypt-automatically'.
* semi-setup.el (toplevel): New mime-preview condtion for MIME
type "application/pgp-encrypted".
2010-01-19 Vitaly Mayatskikh <v.mayatskih@gmail.com>
* mime-view.el (toplevel): New defcustom: mime-view-buttons-visible
* mime-view.el (mime-display-entity): Use mime-view-buttons-visible
to control visibility of MIME buttons.
2007-06-18 Daiki Ueno <ueno@unixuser.org>
* mime-edit.el (turn-on-mime-edit): Remove redundant comments and
newlines to make the amount of diff-lines minimal to the original.
2007-06-08 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-edit.el (turn-on-mime-edit): Don't use the default values
of paragraph-start and paragraph-separate. Suggested by Ron
Isaacson <Ron.Isaacson@morganstanley.com>. cf.
http://article.gmane.org/gmane.mail.wanderlust.general.japanese/5721
2007-04-24 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-edit.el (turn-on-mime-edit): Make paragraph-start and
paragraph-separate buffer-local.
2006-12-20 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* README.ja, README.en (Required environment): Update required
version of APEL to 10.7 or later.
* SEMI-CFG (PACKAGEDIR): Use
`install-get-default-package-directory'.
2006-12-13 Katsumi Yamaoka <yamaoka@jpl.org>
* SEMI-CFG (PACKAGEDIR): Avoid an error with Emacs.
2006-12-12 Katsumi Yamaoka <yamaoka@jpl.org>
* SEMI-MK (compile-semi-package): Use
batch-update-directory-autoloads if it is available instead of
batch-update-directory.
2006-12-11 Katsumi Yamaoka <yamaoka@jpl.org>
* SEMI-CFG (PACKAGEDIR): Check for
(early|late|last)-package-hierarchies and configure-package-path
as well as (early|late|last)-packages.
2006-12-02 Hiroya Murata <lapis-lazuli@pop06.odn.ne.jp>
* mime-edit.el (mime-edit-process-multipart-1): Don't insert a
text tag if a multipart end tag is followed.
2006-06-23 Hiroya Murata <lapis-lazuli@pop06.odn.ne.jp>
* mime-view.el (mime-calist::field-match-method-ignore-case):
New function; set up for `field-match-method' of calist.
2006-03-28 Daiki Ueno <ueno@unixuser.org>
* mime-edit.el (mime-edit-sign-pgp-mime): Set pgg-text-mode.
(mime-edit-encrypt-pgp-mime): Ditto.
2006-02-18 TAKAHASHI Kaoru <kaoru@kaisei.org>
* mime-edit.el (mime-edit-delete-trailing-whitespace): New
Function for RFC3156.
(mime-edit-sign-pgp-mime): Use it.
2005-06-14 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-view.el (mime-display-text/richtext): Withdraw the last
change.
(mime-display-text/enriched): Ditto.
2005-06-09 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-view.el (mime-display-text/richtext): Turn off
adaptive-fill-mode while executing richtext-decode.
(mime-display-text/enriched): Turn off adaptive-fill-mode while
executing enriched-decode.
2005-03-29 Nakagawa, Makoto <Makoto.Nakagawa@hp.com>
* pgg-pgp.el (pgg-scheme-sign-region): Manually convert line
endings to CRLF before signing.
2001-09-24 Daiki Ueno <ueno@unixuser.org>
* mime-view.el (mime-preview-toggle-display): When both "type" and
"*type" conditions are not specified, the entity should be regarded
as invisible.
2004-09-27 Yoichi NAKAYAMA <yoichi@geiin.org>
* mime-edit.el (mime-edit-temp-message-buffer): Define.
* mime-play.el (mime-view-temp-message-buffer): Ditto.
(mime-preview-quitting-method-for-mime-show-message-mode): Change
accordingly.
2004-09-27 Katsumi Yamaoka <yamaoka@jpl.org>
* README.en, README.ja (CVS based development): Mention anonymous
CVS access; remove the description about developers' pserver access.
2003-11-15 Simon Josefsson <jas@extundo.com>
* pgg-gpg.el (pgg-scheme-lookup-key): Use regexp match instead of
split-string (split-string is different between emacs 21.2 and
21.4). Reported by ultrasoul@ultrasoul.com (David D. Smith).
2004-09-15 Yoichi NAKAYAMA <yoichi@geiin.org>
* mime-view.el (mime-preview-follow-current-entity): Avoid error
on null entity.
(mime-preview-find-boundary-info): Ditto.
Avoid error at the beginning of buffer.
2004-08-28 Yoichi NAKAYAMA <yoichi@geiin.org>
* pgg-pgp5.el (pgg-scheme-verify-region): `let*' -> `let'.
* pgg-pgp.el (pgg-scheme-verify-region): Ditto.
* mime-edit.el (mime-edit-split-and-send): Ditto.
* mime-play.el (mime-store-message/partial-piece): Ditto.
2004-08-03 Yoichi NAKAYAMA <yoichi@geiin.org>
* mime-edit.el (mime-edit-mime-version-field-for-message/partial):
Fix usage of mime-encode-field-body.
2004-07-24 Yoichi NAKAYAMA <yoichi@geiin.org>
* mime-view.el (mime-display-multipart/related): Do nothing when
the part is not found.
2004-04-18 TAKAHASHI Kaoru <kaoru@kaisei.org>
* mime-edit.el (mime-file-types): Add application/pdf. Use base64
for application/postscript.
(mime-content-types): Add application/pdf.
2004-04-04 Yoichi NAKAYAMA <yoichi@geiin.org>
* mime-edit.el (mime-file-types): Add application/vnd.ms-excel.
(mime-content-types): Add application/vnd.ms-excel and
application/msword.
2004-02-12 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-image.el (mime-display-image): Ignore errors about image
decoding.
2004-02-06 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-image.el (mime-image-normalize-xbm-buffer): Add missing
format specifiers.
* mime-view.el (mime-view-insert-entity-button): Fix misplaced let
form.
2004-01-15 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-edit.el (mime-edit-normalize-body): Fix a comment that the
problem related to `replace-match' has been fixed at 2004-01-15,
thanks to Handa-san.
2003-12-24 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* SEMI: Version 1.14.6 (Maruoka) released.
2003-12-18 Daiki Ueno <ueno@unixuser.org>
* pgg-gpg.el (pgg-gpg-process-region): Set environment variable
LANGUAGE as well. GNU gettext gives precedence to LANGUAGE over
LC_ALL, when different language code is specified. Thanks to
Tatsuya Kinoshita <tats@vega.ocn.ne.jp>.
[cf. <emacs-mime-ja:1599>]
2003-12-17 Daiki Ueno <ueno@unixuser.org>
* pgg-gpg.el (pgg-gpg-messages-locale): New user option.
(pgg-gpg-process-region): Set environment variable LC_ALL when
pgg-gpg-messages-locale is specified.
* pgg-def.el (pgg-messages-locale): New user option.
* mime-pgp.el (mime-verify-application/pgp-signature): Copy
messages from pgg-errors-buffer.
(mime-add-application/pgp-keys): Ditto.
2003-12-16 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-edit.el (mime-edit-normalize-body): Don't use the
`(replace-match "\\1\r\n")' form since it may convert the unibyte
string into multibyte in Emacs 21.4.
2003-12-14 Yoichi NAKAYAMA <yoichi@geiin.org>
* mime-play.el (mime-mailcap-method-sentinel): Restore deleting
directory routine and protection of 1st arg of `message' dropped
in the last change.
(mime-mailcap-delete-played-files): Ditto.
2003-12-12 ARISAWA Akihiro <ari@mbf.sphere.ne.jp>
* mime-play.el (mime-play-delete-file-immediately): New user option.
(mime-mailcap-method-sentinel): Use it.
(mime-mailcap-delete-played-files): New function; set up for
`kill-emacs-hook'.
2002-05-18 ARISAWA Akihiro <ari@mbf.sphere.ne.jp>
* mime-play.el (mime-activate-mailcap-method): Don't use
`binary-to-text-funcall'. (Thanks to TANAKA Shingo)
2003-12-14 Tatsuya Kinoshita <tats@vega.ocn.ne.jp>
* mime-edit.el (mime-charset-type-list): Add entry for iso-8859-1[45].
2003-12-12 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-edit.el (mime-edit-user-agent-value): Add a setting for
XEmacs CHISE.
2003-12-07 Yuuichi Teranishi <teranisi@gohome.org>
* mime-play.el (mime-require-safe-directory): Check the owner of the
directory if it already exists.
2003-12-06 Yuuichi Teranishi <teranisi@gohome.org>
* mime-play.el (mime-require-safe-directory): New function.
(mime-store-message/partial-piece): Use it.
2003-12-05 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-play.el (mime-store-message/partial-piece): Fix
mis-designed parenthesis in the `let' form.
2001-11-27 Daiki Ueno <ueno@unixuser.org>
* mime-w3.el: Don't use `url-register-protocol' if it is not
fboundp; announce `url-cid' feature instead.
[cf. <Wanderlust:8566>]
(url-cid): Change return value for the current URL package.
2003-06-09 Yuuichi Teranishi <teranisi@gohome.org>
* pgg-gpg.el (pgg-gpg-process-region): Undo the last change;
Add --yes option to overwrite existing output file;
Remove needless set-default-file-modes.
2003-05-29 Yuuichi Teranishi <teranisi@gohome.org>
* pgg-gpg.el (pgg-gpg-process-region): Undo the last change.
2003-05-15 Yuuichi Teranishi <teranisi@gohome.org>
* pgg-gpg.el (pgg-gpg-process-region): Use `make-temp-file' instead of
`make-temp-name'.
* pgg-pgp5.el (pgg-pgp5-process-region): Ditto.
(pgg-scheme-verify-region): Ditto.
(pgg-scheme-snarf-keys-region): Ditto.
* pgg-pgp.el (pgg-pgp-process-region): Ditto.
(pgg-scheme-verify-region): Ditto.
(pgg-scheme-snarf-keys-region): Ditto.
* smime.el (smime-process-region): Ditto.
(smime-verify-region): Ditto.
* mime-pgp.el (mime-verify-application/pgp-signature): Ditto.
(mime-verify-application/pkcs7-signature): Ditto.
* mime-play.el (mime-activate-mailcap-method): Make a temporary
directory of a temporary file for the mailcap application.
(mime-mailcap-method-sentinel): Follow the change above.
(mime-store-message/partial-piece): Set `default-file-modes' for
`make-directory'.
* mime-edit.el (mime-edit-split-and-send): Remove local variable
`mime-edit-draft-file-name'.
2003-05-12 Yoichi NAKAYAMA <yoichi@geiin.org>
* mime-edit.el (turn-on-mime-edit): Protect 1st arg of `message'.
* mime-view.el (mime-preview-follow-current-entity): Ditto.
2003-05-11 Yoichi NAKAYAMA <yoichi@geiin.org>
* mime-w3.el (mime-preview-text/html): Protect 1st arg of `message'.
* mime-play.el (mime-mailcap-method-sentinel): Ditto.
(mime-view-message/external-anon-ftp): Ditto.
(mime-view-message/external-url): Ditto.
2003-04-05 Yoichi NAKAYAMA <yoichi@geiin.org>
* mime-view.el (mime-preview-toggle-display): Use boundary with
children.
2003-02-08 Yoichi NAKAYAMA <yoichi@eken.phys.nagoya-u.ac.jp>
* semi-def.el (mime-should-use-popup-menu): New function.
(mime-select-menu-alist): Renamed from select-menu-alist, change
its behavior according to mime-should-use-popup-menu.
* mime-play.el (mime-play-entity): Change accordingly.
2003-02-08 Yoichi NAKAYAMA <yoichi@eken.phys.nagoya-u.ac.jp>
* mime-view.el (mime-save-situation-examples): Bind print-length
and print-level.
2003-01-10 NAKAJI Hiroyuki <nakaji@tutrp.tut.ac.jp>
* README.ja: new file, Japanese translation of README.en.
Spaces between ascii and Japanese characters are added.
2002-11-15 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* SEMI: Version 1.14.5 (Awara-Onsen) released.
2002-11-05 Yoichi NAKAYAMA <yoichi@eken.phys.nagoya-u.ac.jp>
* mime-view.el (mime-preview-find-boundary-info): Change the name of
the argument from get-mother to with-children along its effect.
2002-11-03 Yoichi NAKAYAMA <yoichi@eken.phys.nagoya-u.ac.jp>
* mime-edit.el (mime-edit-decode-single-part-in-buffer): Decode text
part only.
2002-04-16 Daiki Ueno <ueno@unixuser.org>
* mime-edit.el (mime-file-types): Add setting of *.jpeg for image/jpeg.
2002-10-26 Yoichi NAKAYAMA <yoichi@eken.phys.nagoya-u.ac.jp>
* mime-view.el (mime-preview-find-boundary-info): Fix logic. Do not
refer next to next part before examining the next part.
2002-08-28 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-edit.el (mime-edit-user-agent-value): Add
`xemacs-extra-name'.
2002-07-08 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* SEMI: Version 1.14.4 (Hosorogi) released.
* Makefile (ARC_DIR_PREFIX): New variable.
(ARC_DIR): Use `ARC_DIR_PREFIX'.
2001-08-10 Kenichi OKADA <okada@opaopa.org>
* semi-def.el (mime-browse-url-regexp): Allow nntps and ftps.
2001-06-12 Yuuichi Teranishi <teranisi@gohome.org>
* mime-view.el (mime-display-multipart/related): When "start"
parameter specifies part, treat the part as root.
2001-06-12 Akihiro Arisawa <ari@mbf.sphere.ne.jp>
* mime-view.el (mime-display-multipart/related): New function; set up
for `mime-preview-condition'.
2001-04-19 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-bbdb.el: Load "bbdb-hooks" when the symbol function
`bbdb-extract-field-value' is not bound or it is set up as an
autoloaded function. [cf. <emacs-mime-ja:799,842,843,844,845,846>]
2001-04-17 YAMASHITA Junji <ysjj@unixuser.org>
* semi-def.el (mime-browse-url-regexp): Allow https.
2001-03-06 Hiroya Murata <lapis-lazuli@pop06.odn.ne.jp>
* mime-edit.el (mime-edit-set-parameter): Get rid of the duplicated
optional fields.
2000-12-28 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-view.el: Revert to use `static'.
2000-12-28 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* SEMI: Version 1.14.3 (Ushinoya) released.
* mime-view.el (mime-view-read-situation-examples-file): Don't try
to read situation-examples-file is it is nil.
(mime-situation-examples-file): Avoid to read
situation-examples-file at compile time.
2000-12-28 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-view.el (mime-view-read-situation-examples-file): Display
warning. [cf. <emacs-mime-ja:680>]
2000-12-27 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-view.el (mime-view-mailcap-files): New user option.
(mime-view-read-mailcap-files): Renamed from
`mime-view-read-mailcap'; read `mime-view-mailcap-files'.
* mime-view.el (mime-view-read-situation-examples-file): New
function; don't occur error.
(mime-view-read-mailcap): New function.
2000-12-27 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-play.el (mime-play-messages-coding-system): Renamed from
`mime-mailcap-method-messages-coding-system'.
* pgg-def.el (pgg-messages-coding-system): Change default value to
nil.
2000-12-27 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-play.el (mime-activate-mailcap-method): Fix typo.
2000-12-26 Daiki Ueno <ueno@unixuser.org>
* mime-play.el (mime-mailcap-method-messages-coding-system): New
variable.
(mime-activate-mailcap-method): Use it.
2000-12-26 Daiki Ueno <ueno@unixuser.org>
* pgg-def.el (pgg-messages-coding-system): Use `defvar' to define.
* pgg-pgp.el (pgg-pgp-messages-coding-system): Abolish.
(pgg-pgp-process-region): Use `binary-funcall' instead of
`binary-to-text-funcall'.
* pgg-pgp5.el (pgg-pgp5-messages-coding-system): Abolish.
(pgg-pgp5-process-region): Use `binary-funcall' instead of
`binary-to-text-funcall'.
2000-12-25 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* SEMI: Version 1.14.2 (DaishÅji) released.
* README.en (Required environment): Update to FLIM 1.14.2.
* mail-mime-setup.el (mail-setup-hook): Don't add
`eword-decode-header'.
2000-12-23 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-view.el (mime-view-define-keymap): Return
`mime-view-mode-map' instead of set up as local keymap; don't call
`mime-view-define-keymap-hook'.
(mime-display-message): Add new optional argument `keymap'.
* mime-play.el (mime-store-message/partial-piece): Use
`binary-insert-encoded-file' and `binary-write-decoded-region'
instead of `binary-insert-file-contents' and
`binary-write-region'.
2000-12-23 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* smime.el (smime-process-region): Use `binary-funcall' instead of
`binary-start-process-shell-command'.
(smime-verify-region): Use `binary-write-decoded-region' and
`binary-insert-encoded-file' instead of `binary-write-region' and
`binary-insert-file-contents'.
* pgg-pgp5.el (pgg-pgp5-messages-coding-system): New variable.
(pgg-pgp5-process-region): Use `binary-to-text-funcall' instead of
`binary-start-process-shell-command'.
(pgg-scheme-verify-region): Use `binary-write-decoded-region'
instead of `binary-write-region'.
* pgg-pgp.el (pgg-pgp-messages-coding-system): New variable.
(pgg-pgp-process-region): Use `binary-to-text-funcall' instead of
`binary-start-process-shell-command'.
(pgg-scheme-verify-region): Use `binary-write-decoded-region'
instead of `binary-write-region'.
* pgg-gpg.el (pgg-gpg-process-region): Use
`binary-to-text-funcall' instead of `binary-start-process'.
2000-12-22 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* SEMI: Version 1.14.1 (Kaga-Onsen) released.
* README.en (Required environment): Require FLIM 1.14.1 or later;
update required emacsen.
2000-12-22 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* pgg-gpg.el (pgg-gpg-process-region): Use
`pgg-gpg-messages-coding-system'.
2000-12-21 Tadashi Watanabe <watanabe@sigmaitec.co.jp>
* pgg-gpg.el (pgg-scheme-verify-region): Use a "-" as the name for
the file with the signed material.
2000-12-21 Daiki Ueno <ueno@unixuser.org>
* pgg-def.el (pgg-messages-coding-system): New user option.
2000-12-20 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-view.el: Don't use `static-cond'.
2000-12-20 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* SEMI: Version 1.14.0 (Iburihashi) released.
2000-12-19 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-edit.el (mime-edit-mime-version-field-for-message/partial):
Use `mime-encode-field-body' instead of `eword-encode-field-body'.
2000-12-19 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-edit.el (mime-edit-translate-header): Use
`mime-encode-header-in-buffer' instead of `eword-encode-header'.
(mime-edit-encrypt-pgp-mime): Likewise.
(mime-edit-translate-single-part-tag): Likewise.
2000-12-17 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* postpet.el: Require `mime'.
* pgg-parse.el (pgg-format-key-identifier): Don't use
`string-to-int-list'.
(pgg-read-bytes): Likewise.
(pgg-read-body): Likewise.
2000-12-16 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* smime.el: Require `raw-io'.
(smime-process-region): Use `binary-start-process-shell-command'.
* pgg-pgp5.el (pgg-pgp5-process-region): Use
`binary-start-process-shell-command'.
* pgg-pgp.el (pgg-pgp-process-region): Use
`binary-start-process-shell-command'.
* pgg-gpg.el (pgg-gpg-process-region): Use `binary-start-process'.
2000-12-15 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* pgg-def.el: Require `custom' instead of `pcustom'.
2000-12-15 TAKAHASHI Kaoru <kaoru@kaisei.org>
* Makefile (tar): Use `cvs tag -R' instead of `cvs tag -RF'.
2000-12-15 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* smime.el (smime-process-region): Don't use `as-binary-process'.
(smime-verify-region): Use `binary-write-region' instead of
`write-region-as-binary'; use `binary-insert-file-contents'
instead of `insert-file-contents-as-binary'.
* semi-def.el: Don't require `poe'.
* pgg-pgp5.el (pgg-pgp5-process-region): Don't use
`as-binary-process'.
(pgg-scheme-verify-region): Use `binary-write-region' instead of
`write-region-as-binary'.
(pgg-scheme-snarf-keys-region): Don't use
`write-region-as-raw-text-CRLF'.
* pgg-pgp.el (pgg-pgp-process-region): Don't use
`as-binary-process'.
(pgg-scheme-verify-region): Use `binary-write-region' instead of
`write-region-as-binary'.
(pgg-scheme-snarf-keys-region): Don't use
`write-region-as-raw-text-CRLF'.
* pgg-parse.el: Don't require `poem'; require `custom' instead of
`pcustom'.
* pgg-gpg.el (pgg-gpg-process-region): Don't use
`as-binary-output-file' and
`insert-file-contents-as-raw-text-CRLF'.
* mime-view.el: Don't require `emu'.
(mouse-button-3): New variable.
* mime-play.el (mime-store-message/partial-piece): Use
`binary-insert-file-contents' instead of
`insert-file-contents-as-binary'; don't use
`as-binary-input-file'; use `binary-write-region' instead of
`write-region-as-binary'.
2000-12-07 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-w3.el: Avoid error even if `w3' is not found.
2000-11-26 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-view.el: Use `mime-conf' instead of `mailcap'.
* mime-play.el (mime-activate-mailcap-method): Use
`mime-format-mailcap-command' instead of `mailcap-format-command'.
2000-10-19 Takanori Saneto <sanewo@ba2.so-net.ne.jp>
* pgg-pgp.el (pgg-pgp-process-region): bind process-environment
locally so that setenv's effect won't last forever.
pgg-pgp5.el (pgg-pgp5-process-region): Ditto.
2000-09-29 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-edit.el (mime-file-types): Fix to use application/msword
instead of application/winword.
2000-08-11 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-display-text/plain): Display warning message
when `mime-insert-text-content' fails.
2000-08-04 Daiki Ueno <ueno@unixuser.org>
* pgg-gpg.el (pgg-gpg-process-region): Don't bind
coding-system-for-read.
2000-07-04 Yuuichi Teranishi <teranisi@gohome.org>
* mime-image.el (mime-image-insert) [XEmacs]:
Insert `string' only if it is non-nil.
2000-06-27 Daiki Ueno <ueno@unixuser.org>
* mime-image.el (mime-image-insert): Synch with the latest image.el.
(mime-display-image): Don't pass underlying string "x".
2000-06-09 Daiki Ueno <ueno@unixuser.org>
* mime-edit.el (mime-edit-insert-key): Insert a text tag when
the buffer has any trailing text.
2000-06-05 Shugo Maeda <shugo@ruby-lang.org>
* pgg-gpg.el (pgg-scheme-insert-key): Don't quote user id.
2000-05-21 Daiki Ueno <ueno@unixuser.org>
* pgg-gpg.el (pgg-gpg-process-region): Abolish redundant nconc.
2000-05-16 Daiki Ueno <ueno@unixuser.org>
* mime-image.el (mime-image-create) [XEmacs]: Don't call
`make-image-instance' directly.
2000-05-02 Daiki Ueno <ueno@unixuser.org>
* pgg-gpg.el (pgg-scheme-encrypt-region): Don't quote recipient;
concatenate all arguments destructively.
2000-04-13 Daiki Ueno <ueno@unixuser.org>
* pgg-gpg.el: Fix author's mailing address.
(pgg-gpg-process-region): Add --output option; set status fd to 2.
(pgg-gpg-possibly-cache-passphrase): New function.
(pgg-gpg-shell-file-name): Abolish.
(pgg-gpg-shell-command-switch): Abolish.
(pgg-scheme-lookup-key): Work on temp buffer.
2000-03-01 Yoshiki Hayashi <yoshiki@xemacs.org>
* mime-image.el (mime-display-image): Don't wait for redisplay.
2000-07-12 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* REMI: Version 1.14.2 (Hokuhoku-Åshima) released.
* README.en (Required environment): Modify for FLIM-Chao 1.14.1.
2000-07-11 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-pgp.el (mime-view-application/pgp): Setup local variable
`mime-view-temp-message-buffer' of preview-buffer.
(mime-view-application/pkcs7-mime): Likewise.
* mime-play.el
(mime-preview-quitting-method-for-mime-show-message-mode): Don't
use `mime-entity-buffer'; refer `mime-view-temp-message-buffer'.
(mime-store-message/partial-piece): Use
`insert-file-contents-as-binary' instead of
`(as-binary-input-file (insert-file-contents ...))'; use
`write-region-as-binary' instead of
`(as-binary-output-file (write-region ...)); setup local variable
`mime-view-temp-message-buffer' of preview-buffer.
2000-06-23 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-edit.el (mime-edit-preview-message): Set up local variable
`mime-edit-temp-message-buffer'.
(mime-edit-quitting-method): Refer `mime-edit-temp-message-buffer'
to avoid to use `mime-entity-buffer'.
2000-06-21 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-view.el (mime-view-mode): Use
`mime-entity-set-content-type' and `mime-entity-set-encoding'
instead of `mime-entity-set-content-type-internal' and
`mime-entity-set-encoding-internal'.
* mime-w3.el (mime-preview-text/html): Use
`mime-find-root-entity'.
2000-05-25 Tanaka Akira <akr@m17n.org>
* README.en: Update for CVS via SSH.
2000-04-28 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
* mime-edit.el (mime-charset-type-list): Add `iso-2022-jp-3'.
2000-03-01 MORIOKA Tomohiko <tomo@m17n.org>
* REMI: Version 1.14.1 (MushigawaÅsugi) released.
2000-03-01 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-view-define-keymap): Add new binding
`mime-preview-show-header' for C-c C-v C-f and C-c C-v h; add new
binding `mime-preview-show-content' for C-c C-v C-c; add new
binding `mime-preview-hide-header' for C-c C-d C-f and C-c C-d h;
add new binding `mime-preview-hide-content' for C-c C-d C-c.
(mime-preview-toggle-display): New function.
(mime-preview-toggle-header): Add new optional argument
`force-visible'; use `mime-preview-toggle-display'.
(mime-preview-toggle-content): Likewise.
(mime-preview-show-header): New function.
(mime-preview-show-content): New function.
(mime-preview-hide-header): New function.
(mime-preview-hide-content): New function.
2000-02-25 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-situation-examples-file-coding-system): New
variable.
(mime-save-situation-examples): Use `with-temp-buffer'; try to
save as `mime-situation-examples-file-coding-system'.
- Use with-temp-buffer to load `mime-situation-examples-file';
setup `mime-situation-examples-file-coding-system' when
mime-situation-examples-file is loaded;
2000-02-25 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-view-define-keymap): Change keybind for
`mime-preview-toggle-header' to C-c C-t h and C-c C-t C-f.
2000-02-24 Mito <mit@nines.nec.co.jp>
* mime-edit.el (mime-edit-normalize-body): Fix number of arguments
against enriched-encode.
2000-02-23 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* mime-image.el (mime-image-normalize-xbm-buffer): New inline
function.
(mime-image-create) [XEmacs || Emacs21]: Use it for XBM data.
(mime-display-image): Don't create temporary file.
2000-02-22 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-delq-null-situation): Accept multiple ignored
values.
(mime-unify-situations): t is also regarded as an ignored-value.
(mime-preview-follow-current-entity): Eliminate unused local
variable `str'.
2000-02-22 MORIOKA Tomohiko <tomo@m17n.org>
* mime-play.el (mime-play-find-every-situations): Renamed from
`mime-view-find-every-situations'.
* mime-view.el (mime-view-find-every-situations): Moved to
mime-play.el.
2000-02-22 MORIOKA Tomohiko <tomo@m17n.org>
* mime-play.el (mime-play-entity): Specify
`mime-view-find-every-situations' as an optional argument
`every-situations'.
* mime-view.el (mime-unify-situations): Add new optional argument
`every-situations'; use it instead of
`mime-view-find-every-situations'.
(mime-display-multipart/alternative): Modify `body' property
instead of `body-presentation-method' property of
preview-situation.
* semi-setup.el: Use `eval-after-load' for text/html related
setting.
2000-02-21 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* semi-def.el (mime-user-interface-product): Bump up to
EMIKO 1.13.12.
* pgg.el (pgg-temp-buffer-show-function): Use
`shrink-window-if-larger-than-buffer'.
* pgg-gpg.el (pgg-gpg-process-region): Fix cleanup form.
* pgg-pgp.el (pgg-pgp-process-region): Ditto.
* pgg-pgp5.el (pgg-pgp5-process-region): Ditto.
* semi-setup.el (mime-setup-enable-inline-image): Remove checking
of bitmap-mule; use `eval-after-load' instead of
`call-after-loaded' to require `mime-image'.
* mime-image.el (mime-display-image): Set default umask to 077.
(mime-image-create): Use `nothing-image-instance-p'.
* mime-pgp.el: When it is compiled, define `smime-output-buffer'
and `smime-errors-buffer' to avoid compiler warning.
* mime-edit.el: Ditto.
* mime-pgp.el
(mime-view-application/pkcs7-mime): Regard smime-type as
"enveloped-data" unless it is specified.
* smime.el (smime-directory-files): Abolish.
(smime-verify-region): Abolish local variable `args'.
2000-02-20 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* mime-image.el: Remove X-Face setting; require cl when compiling.
(mime-image-format-alist): Remove image/x-mag and image/x-pic.
(mime-image-type-available-p): New function.
(mime-image-create): New function.
(mime-image-insert): New function.
(mime-display-image): Rewrite.
* mime-edit.el
(mime-edit-define-charset): Handle 'mime-charset-comment.
2000-02-18 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-view-define-keymap): Change binding of
`mime-preview-toggle-content' from C-c C-t C-b to C-c C-t C-c.
(mime-preview-toggle-content): Renamed from
`mime-preview-toggle-body'.
2000-02-17 MORIOKA Tomohiko <tomo@m17n.org>
* REMI: Version 1.14.0 (Uragawara) released.
2000-02-17 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-view-define-keymap): Add new binding
`mime-preview-toggle-body' for C-c C-t C-b.
(mime-preview-toggle-body): New command.
* semi-def.el (mime-add-button): Don't use overlay.
2000-02-17 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-preview-condition): Add default setting of
multipart; declare body of message/partial, message/rfc822 and
message/news are visible.
(mime-display-entity): Check `*body' or `body' property of
situation.
2000-02-17 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-display-entity): Find
`header-presentation-method' only if `header-is-visible'.
2000-02-10 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-display-entity): Don't use
`mime-goto-header-start-point'.
2000-02-10 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-display-message): Use `major-mode' of
current-buffer as default value of `original-major-mode'; don't
use `mime-entity-header-buffer'.
(mime-preview-follow-current-entity): Use `mime-insert-header' to
insert header; don't use `mime-entity-header-buffer',
`mime-entity-header-start-point' and
`mime-entity-header-end-point'.
2000-02-10 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-preview-follow-current-entity): Use
`mime-view-entity-body' to find body.
2000-02-10 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-preview-find-boundary-info): Fix problem when
entity is in boundary of mother entity.
(mime-preview-follow-current-entity): Check header information of
`mime-view-situation' property.
2000-02-09 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-preview-find-boundary-info): Use <last point>
- 1 instead of <last point> to get `mime-view-entity' property.
* mime-view.el (mime-preview-follow-current-entity): Fix problem
in multipart entity.
2000-02-07 Yoshiki Hayashi <yoshiki@xemacs.org>
* mime-pgp.el: Fix doc string.
* pgg-def.el: Ditto.
* pgg-gpg.el: Ditto.
* pgg-parse.el: Ditto.
* pgg-pgp.el: Ditto.
* pgg-pgp5.el: Ditto.
* pgg.el: Ditto.
2000-02-02 Nakagawa, Makoto <Makoto.Nakagawa@jp.compaq.com>
* pgg-pgp5.el (pgg-scheme-verify-region): Copy the contents of
`pgg-errors-buffer' to `pgg-output-buffer'.
2000-02-02 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg.el (pgg-temp-buffer-show-function): Don't check if the
selected window is the only window.
2000-02-01 MORIOKA Tomohiko <tomo@m17n.org>
* semi-setup.el (mime-setup-enable-inline-image): Use "(fboundp
'create-image)" to detect Emacs 21.
Use `eval-after-load' instead of `call-after-loaded' to require
`mime-image'.
2000-02-01 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-view-define-keymap): Change keybind for
`mime-preview-toggle-header' to "\C-c\C-t\C-h".
2000-02-01 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* mime-image.el: Add checking for `x-face-mule'.
* pgg.el,pgp-gpg.el,pgg-pgp.el,pgg-pgp5.el
(pgg-scheme-lookup-key): Rename from
`pgg-scheme-lookup-key-string'.
(pgg-scheme-decrypt-region): Use `pgg-scheme-lookup-key'.
(pgg-scheme-sign-region): Ditto.
* pgg-gpg.el (pgg-scheme-lookup-key): Generate *PGG-output* buffer
if it does not exist.
2000-01-24 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* semi-def.el (mime-user-interface-product): Bump up to
EMIKO 1.13.10.
* mime-image.el [Emacs21]: Require `image' when compiling.
(image-normalize): Use `create-image' with 3rd arg `data-p'.
(create-image): Advice it to accept 3rd arg `data-p'.
* pgg-pgp.el. pgg-pgp5.el
(pgg-scheme-verify-region): Don't send buffer contents.
* mime-pgp.el (mime-view-application/pkcs7-mime): Rename from
`mime-decrypt-application/pkcs7-mime'; handle `smime-type'
parameter; abolish local variable `representation-type'.
* semi-setup.el: Rename `mime-decrypt-application/pkcs7-mime' to
`mime-view-application/pkcs7-mime'.
2000-01-18 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg.el,pgp-gpg.el,pgg-pgp.el,pgg-pgp5.el
(pgg-scheme-lookup-key-string,pgg-scheme-encrypt-region,
pgg-scheme-decrypt-region,pgg-scheme-sign-region,
pgg-scheme-verify-region,pgg-scheme-insert-key,
pgg-scheme-snarf-keys-region): Prepend `pgg-scheme' to each symbol.
* pgg.el
(pgg-encrypt-region,pgg-decrypt-region,pgg-sign-region,
pgg-verify-region,pgg-insert-key,pgg-snarf-keys-region,
pgg-lookup-key-string): Don't use `luna-send'.
2000-01-17 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-view-entity-button-visible-p): Comment out.
(mime-display-entity): Don't use
`mime-view-entity-button-visible-p'.
2000-01-17 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-find-entity-preview-situation): New function.
(mime-display-multipart/alternative): Use
`mime-find-entity-preview-situation'.
(mime-display-entity): Likewise; prefer`*entity-button' and
`*header'.
(mime-preview-toggle-header): Modify `*header' instead of
`header'; update `mime-preview-situation-example-list'.
2000-01-17 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-unify-situations): Fixed.
(mime-view-define-keymap): Add new binding
`mime-preview-toggle-header' for C-c h.
(mime-preview-find-boundary-info): New function.
(mime-preview-follow-current-entity): Use
`mime-preview-find-boundary-info'.
(mime-preview-toggle-header): New command.
2000-01-16 MORIOKA Tomohiko <tomo@m17n.org>
* mime-play.el (mime-play-entity): Modify for
`mime-unify-situations'.
* mime-view.el (mime-unify-situations): Add new optional argument
`required-name'; use it instead of `method'.
(mime-display-multipart/alternative): Use `mime-unify-situations'.
(mime-display-entity): Likewise.
2000-01-16 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-reduce-situation-examples): New function;
delete `mime-reduce-acting-situation-examples'.
2000-01-16 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-view-find-every-situations): Renamed from
`mime-view-find-every-acting-situation'; changed to variable.
(mime-situation-examples-file): Renamed from
`mime-acting-situation-examples-file'.
(mime-preview-situation-example-list-max-size): New variable.
(mime-save-situation-examples): Renamed from
`mime-save-acting-situation-examples'; save
`mime-preview-situation-example-list' if it is not null.
2000-01-16 MORIOKA Tomohiko <tomo@m17n.org>
* mime-play.el (mime-acting-situation-example-list): Moved to
mime-view.el.
(mime-acting-situation-example-list-max-size): Likewise.
(mime-save-acting-situation-examples): Likewise.
(mime-reduce-acting-situation-examples): Likewise.
* mime-view.el (mime-preview-situation-example-list): New
variable.
(mime-acting-situation-example-list): Moved from mime-play.el.
(mime-acting-situation-example-list-max-size): Likewise.
(mime-save-acting-situation-examples): Likewise.
(mime-reduce-acting-situation-examples): Likewise.
(mime-view-load-hook): Abolished.
2000-01-16 MORIOKA Tomohiko <tomo@m17n.org>
* mime-play.el (mime-play-entity): Use `mime-unify-situations'.
* mime-view.el (mime-unify-situations): New function.
2000-01-16 MORIOKA Tomohiko <tomo@m17n.org>
* mime-play.el (mime-compare-situation-with-example): Moved to
mime-view.el.
(mime-sort-situation): Likewise.
* mime-view.el (mime-compare-situation-with-example): Moved from
mime-play.el.
(mime-sort-situation): Likewise.
2000-01-16 MORIOKA Tomohiko <tomo@m17n.org>
* postpet.el: New module.
* SEMI-ELS (semi-modules-to-compile): Add `postpet'.
* mime-play.el (mime-delq-null-situation): Moved to mime-view.el.
* mime-view.el: Add setting for
`mime-display-application/x-postpet' to autoload "postpet".
(mime-delq-null-situation): Moved from mime-play.el.
(unpack): Moved to postpet.el.
(unpack-skip): Likewise.
(unpack-fixed): Likewise.
(unpack-byte): Likewise.
(unpack-short): Likewise.
(unpack-long): Likewise.
(unpack-string): Likewise.
(unpack-string-sjis): Likewise.
(postpet-decode): Likewise.
(mime-display-application/x-postpet): Likewise.
2000-01-11 Nakagawa, Makoto <Makoto.Nakagawa@jp.compaq.com>
* pgg-pgp.el, pgg-pgp5.el
(pgg-scheme-lookup-key-string): Fix number of arguments against
call-process.
* pgg-pgp5.el (pgg-scheme-verify-region): Analize process output
to see whether verify successed or not.
2000-01-05 Katsumi Yamaoka <yamaoka@jpl.org>
* Makefile, README.en: Update for the new CVS server.
1999-12-28 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* mime-edit.el (mime-edit-user-agent-value): Don't require
`apel-ver' directly.
1999-12-28 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-edit.el (mime-edit-user-agent-value): Use `error' instead of
`file-error' for the handler of `condition-case' because XEmacs
does not signal an error named `file-error' if the required feature
is not provided.
1999-12-16 MORIOKA Tomohiko <tomo@m17n.org>
* semi-setup.el (mime-setup-decode-message-header): Comment out.
(mime-edit-mode-hook): Don't use
`mime-setup-decode-message-header'.
(mu-cite/pre-cite-hook): Don't use `eword-decode-header'.
1999-12-14 Akihiro Arisawa <ari@atesoft.advantest.co.jp>
* mime-view.el (mime-preview-follow-current-entity): Fetch field of
`mime-view-following-required-fields-list' from parent entity if it
is not exist in current entity.
1999-12-13 Katsumi Yamaoka <yamaoka@jpl.org>
* README.en: Update for the recent ML address and ftp site.
1999-12-11 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* smime.el (smime-encrypt-region): Delete entity header.
(smime-sign-region): Ditto.
* mime-edit.el: Fix autoload settings for `smime-sign-region' and
`smime-encrypt-region.
(mime-edit-sign-smime): Set Content-Type
`application/pkcs7-signature' instead of
`application/x-pkcs7-signature'; add Content-Description.
(mime-edit-encrypt-smime): Set content-type
`application/pkcs7-mime' instead of `x-application/pkcs7-mime'.
* mime-pgp.el: Fix autoload settings for `smime-verify-region' and
`smime-decrypt-region.
(mime-decrypt-application/pkcs7-mime):
Bind `inhibit-read-only' to t.
1999-12-09 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* semi-def.el (mime-user-interface-product): Bump up to
EMIKO 1.13.9.
* smime.el: Require `static' when compiling.
(smime-directory-files): New macro.
(smime-find-certificate): Use it.
1999-12-08 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* smime.el (smime-verify-region): Abolish local variable `cert-file'.
(smime-find-certificate): Rename from `smime-search-certificate'.
* mime-edit.el: Add autoload settings for `smime-encrypt-region' and
`smime-sign-region'.
(mime-edit-process-multipart-1): Handle type "smime-signed" and
"smime-encrypted".
(mime-edit-sign-smime): New function.
(mime-edit-encrypt-smime): New function.
(mime-edit-enclose-smime-signed-region): New function.
(mime-edit-enclose-smime-encrypted-region): New function.
* mime-pgp.el: Add autoload settings for `smime-decrypt-region' and
`smime-verify-region'.
(mime-verify-application/pkcs7-signature): New function.
(mime-decrypt-application/pkcs7-mime): New function.
* semi-setup.el: Set up for `mime-verify-application/pkcs7-signature'
and `mime-decrypt-application/pkcs7-mime'.
1999-12-08 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* smime.el (smime-x509-hash): Use `call-process' instead of
`call-process-region'.
(smime-x509-subject): Ditto.
1999-12-08 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* SEMI-ELS (semi-modules-to-compile): Add smime.el.
* smime.el: New file.
1999-11-30 Tsukamoto Tetsuo <czkmt@remus.dti.ne.jp>
* mime-edit.el (mime-edit-decode-message-in-buffer): Don't decode
the message header twice.
1999-11-30 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg.el (pgg-remove-passphrase-cache): Add checking whether
the passphrase has already been expired.
1999-11-26 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* mime-edit.el (mime-edit-pgp-user-id): New variable.
(mime-edit-sign-pgp-mime): Undo last change; refer
`mime-edit-pgp-user-id'.
(mime-edit-encrypt-pgp-mime): Ditto.
* pgg-gpg.el, pgg-pgp.el, pgg-pgp5.el
(encrypt-region): Refer `pgg-<impl>-user-id' if specified.
(sign-region): Ditto.
(decrypt-region): Ditto.
(insert-key): Ditto.
1999-11-26 Nakagawa, Makoto <Makoto.Nakagawa@jp.compaq.com>
* mime-edit.el (mime-edit-sign-pgp-mime): Regard
`pgg-default-user-id' as more preferrable if it's specified.
(mime-edit-encrypt-pgp-mime): Ditto.
1999-11-22 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* semi-def.el (mime-user-interface-product): Bump up to
EMIKO 1.13.8.
* pgg.el (pgg-remove-passphrase-cache): Don't unbind passphrase.
1999-11-20 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* mime-edit.el (mime-edit-sign-pgp-mime): Bind
`pgg-default-user-id' to the canonical address of From field.
* pgg-def.el (pgg-cache-passphrase): New user option.
* pgg.el (pgg-read-passphrase): Refer `pgg-cache-passphrase'.
(pgg-remove-passphrase-cache): Fill cached passphrase with `_'.
* pgg-gpg.el, pgg-pgp.el, pgg-pgp5.el (sign-region): Refer
`pgg-cache-passphrase'.
1999-11-17 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-image.el (mime-display-image): Use
`mime-image-normalize-xbm' if the feature `xemacs' is provided or
the variable `image-types' is bound.
1999-11-17 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* mime-image.el (mime-image-normalize-xbm): Work for the future
FSF Emacsen as well.
(mime-display-image): Always use `mime-image-normalize-xbm'.
1999-11-17 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-image.el (mime-image-normalize-xbm): New macro.
(mime-display-image): Use it.
1999-11-13 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg.el (pgg-temp-buffer-show-function): New function.
(pgg-display-output-buffer): Use it.
(pgg-save-coding-system): Use buffer narrowing.
(pgg-encrypt-region, pgg-decrypt-region, pgg-sign-region,
pgg-verify-region): Assume that the current region has already
been narrowed.
1999-11-13 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg-def.el (pgg-default-keyserver-address): Default to
`wwwkeys.pgp.net'.
* pgg.el (pgg-save-coding-system): New macro.
(pgg-display-output-buffer): New function.
(pgg-encrypt-region, pgg-decrypt-region, pgg-sign-region,
pgg-verify-region, pgg-insert-key, pgg-snarf-keys-region):
Add documentation string; use `pgg-save-coding-system'.
(pgg-fetch-key): Fix documentation.
1999-11-11 Akihiro Arisawa <ari@atesoft.advantest.co.jp>
* mime-image.el (image-normalize): Use `write-region-as-binary'.
1999-11-11 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg-pgp.el, pgg-pgp5.el (verify-region): Set default umask to 077.
1999-11-10 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg-gpg.el (pgg-gpg-process-region): Enclose `start-process'
with `as-binary-process'.
* pgg-pgp.el (pgg-pgp-process-region): Enclose `start-process'
with `as-binary-process'.
* pgg-pgp5.el (pgg-pgp5-process-region): Enclose `start-process'
with `as-binary-process'.
* mime-edit.el (mime-edit-set-sign): Remove duplication.
(mime-edit-set-encrypt): Ditto.
(mime-edit-encrypt-pgp-mime): Encode header before encrypting.
* mime-image.el (image-insert-at-point): Check the number of the
arguments of `insert-image'.
(mime-display-image): Rewrite.
1999-11-10 Yoshiki Hayashi <t90553@mail.ecc.u-tokyo.ac.jp>
* mime-play.el: (mime-save-directory): New variable.
(mime-save-content): Don't force filename parameter to be used.
1999-11-09 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg-pgp.el, pgg-pgp5.el
(sign-region): Don't convert line break code.
1999-11-07 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* mime-pgp.el (mime-verify-application/pgp-signature): Don't
scroll MIME-echo buffer, just set window starting point.
(mime-add-application/pgp-keys): Ditto.
1999-11-06 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg.el (pgg-sign-region): Add optional argument `cleartext'.
* mime-ui-en.sgml, mime-ui-ja.sgml: Remove description about
`pgp-functions-alist' and `pgp-function'; add description about
`pgg-default-scheme' and `pgg-scheme'.
* NEWS (PGP 5.0i and GnuPG are now supported for PGP/MIME):
New section.
* pgg-gpg.el, pgg-pgp.el, pgg-pgp5.el (encrypt-region): Add
sender's user id to the recipients list if `pgg-encrypt-for-me' is
specified.
* pgg-def.el (pgg-encrypt-for-me): New user option.
* mime-edit.el:
(mime-edit-decode-multipart-in-buffer): Sync up with semi-pgpgpg_20.
(mime-edit-decode-message-in-buffer): Ditto.
(mime-edit-decode-single-part-in-buffer): Ditto.
1999-11-06 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg.el (pgg-verify-region): Bind `pgg-scheme' in the predicate
of whether to fetch signer's public key.
(pgg-convert-lbt-region): New macro.
(pgg-as-lbt): New macro.
* mime-edit.el (mime-edit-encrypt-pgp-mime): Extract canonical
address of From field to use it as default user id; tokenize
bodies of the recipient fields.
(mime-edit-make-encrypt-recipient-header): Undo last change.
(mime-edit-translate-buffer): Do `undo-boundary'
before translating.
* pgg-gpg.el (sign-region): Use `pgg-as-lbt'.
(pgg-gpg-process-region): Use `pgg-convert-lbt-region'.
(encrypt-region): Don't ask passphrase.
* pgg-pgp5.el (sign-region): Use `pgg-as-lbt'.
(pgg-pgp5-process-region): Use `pgg-convert-lbt-region'.
(encrypt-region): Don't ask passphrase.
* pgg-pgp.el (verify-region): Fill errors buffer.
(pgg-pgp-process-region): Use `pgg-convert-lbt-region'.
(sign-region): Use `pgg-as-lbt'.
(encrypt-region): Don't ask passphrase.
1999-11-06 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg-parse.el (pgg-byte-after): Always pass the first argument
of `char-after'.
1999-11-05 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg-pgp.el (sign-region): Fix regexp for the beginning of armor.
* pgg-gpg.el (encrypt-region): Don't use "--textmode" in GPG
arguments, replace line break code with CRLF while signing
instead.
1999-11-05 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* mime-pgp.el (mime-verify-application/pgp-signature): Copy the
messages in PGG buffers to MIME-echo buffer instead of binding
`pgg-output-buffer'.
(mime-add-application/pgp-keys): Likewise.
* pgg-gpg.el (verify-region): Fill errors buffer whether
verification has succeeded or not.
1999-11-05 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg-gpg.el, pgg-pgp.el, pgg-pgp5.el (snarf-keys-region):
Use `pgg-process-when-success'.
* pgg.el (pgg-encrypt-region): Add autoload cookie.
(pgg-decrypt-region): Ditto.
(pgg-sign-region): Ditto.
(pgg-verify-region): Don't modify the buffer; add autload cookie.
(pgg-snarf-keys-region): Add interactive spec; add autload cookie.
(pgg-insert-key): Add interactive spec; add autload cookie.
1999-11-05 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg-gpg.el (pgg-gpg-shell-command-switch): New user option.
(pgg-gpg-process-region): Bind `shell-command-switch' to the value
of `pgg-gpg-shell-command-switch'.
* pgg-pgp.el (pgg-pgp-shell-command-switch): New user option.
(pgg-pgp-process-region): Bind `shell-command-switch' to the value
of `pgg-pgp-shell-command-switch'.
* pgg-pgp5.el (pgg-pgp5-shell-command-switch): New user option.
(pgg-pgp5-process-region): Bind `shell-command-switch' to the value
of `pgg-pgp5-shell-command-switch'.
* pgg-gpg.el, pgg-pgp.el, pgg-pgp5.el (sign-region): Use fixed end
position of the signature.
* mime-pgp.el: Add autoload for `pgg-decrypt-region',
`pgg-verify-region', `pgg-snarf-keys-region'.
(mime-view-application/pgp): Don't use `pgp-function'.
(mime-verify-application/pgp-signature): Ditto.
(mime-add-application/pgp-keys): Ditto.
(mime-pgp-command): Abolish.
(mime-pgp-default-language): Abolish.
(mime-pgp-good-signature-regexp-alist): Abolish.
(mime-pgp-key-expected-regexp-alist): Abolish
(mime-pgp-check-signature): Abolish.
* semi-def.el (pgp-function-alist): Abolish.
(pgp-function): Abolish.
* mime-edit.el: Add autoload for `pgg-encrypt-region',
`pgg-sign-region', `pgg-insert-key'.
(mime-edit-sign-pgp-mime): Throw an error when
`pgg-sign-region' returns nil; don't use `pgp-function'.
(mime-edit-encrypt-pgp-mime): Throw an error when
`pgg-encrypt-region' returns nil; don't use `pgp-function'.
(mime-edit-sign-pgp-kazu): Don't use `pgp-function'.
(mime-edit-encrypt-pgp-mime): Ditto.
1999-11-05 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* mime-pgp.el (mime-add-application/pgp-keys): Don't display
public key block; snarf keys immediately.
* pgg.el (pgg-insert-url-with-program): Call program asynchronously.
1999-11-05 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg-def.el (pgg-echo-buffer): New variable.
* pgg.el (pgg-process-when-success): New macro.
(pgg-insert-url-with-w3): New function.
(pgg-insert-url-program): New variable.
(pgg-insert-url-extra-arguments): New variable.
(pgg-insert-url-function): New variable.
(pgg-fetch-key): Use it.
(pgg-encrypt-region): If called interactively, popup
`pgg-echo-buffer' to display encryption status.
(pgg-decrypt-region): Likewise.
(pgg-sign-region): Likewise.
(pgg-verify-region): Likewise.
* pgg-gpg.el (lookup-key-string): Use `call-process' instead of
`pgg-gpg-process-region'.
(encrypt-region): Use `pgg-process-when-success'; if the output
buffer is empty, don't copy errors, just return nil.
(decrypt-region): Likewise.
(verify-region): Check the contents of status buffer to looking
for `GOODSIG' response.
(sign-region): Accept optional argument `clearsign'.
* pgg-pgp.el (lookup-key-string): Use `call-process' instead of
`pgg-pgp-process-region'.
(encrypt-region): Use `pgg-process-when-success'; if the output
buffer is empty, don't copy errors, just return nil.
(decrypt-region): Likewise.
(verify-region): Likewise.
(sign-region): Accept optional argument `clearsign'.
* pgg-pgp5.el (lookup-key-string): Use `call-process' instead of
`pgg-pgp5-process-region'.
(encrypt-region): Use `pgg-process-when-success'; if the output
buffer is empty, don't copy errors, just return nil.
(decrypt-region): Likewise.
(verify-region): Likewise.
(sign-region): Accept optional argument `clearsign'.
1999-11-04 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg.el (pgg-verify-region): Ignore all errors encountered on
calling `pgg-fetch-key'.
1999-11-04 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* mime-pgp.el (mime-verify-application/pgp-signature): Enclose
with `unwind-protect' to be sure of deleting *.asc files.
* pgg-pgp.el (pgg-pgp-process-region): Set `PGPPASSFD' before
starting PGP process.
* pgg-pgp5.el (pgg-pgp5-process-region): Ditto.
1999-11-04 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg-parse.el (pgg-parse-crc24): Don't use any `write' ops.
(pgg-parse-crc24-string): Use `ccl-execute-on-string'.
1999-11-04 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* mime-edit.el (mime-edit-set-sign): Preserve last status of
`mime-edit-pgp-processing'.
(mime-edit-set-encrypt): Ditto.
(mime-edit-pgp-enclose-buffer): Process
`mime-edit-pgp-enclose-buffer' consequently.
* pgg-parse.el (pgg-decode-packets): Don't use
`mime-encode-string'.
(pgg-ignore-packet-checksum): Default to t.
1999-11-04 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg.el: Rename the field name `cipher-algorithm' to
`symmetric-key-algorithm'.
(pgg-verify-condition): Fix documentation.
(pgg-decrypt-condition): Ditto.
1999-11-04 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-edit.el (mime-edit-preview-message): Inherit the value of
`mime-edit-pgp-processing'.
1999-11-04 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg.el (pgg-encrypt-region): Add interactive spec.
(pgg-decrypt-region): Ditto.
(pgg-sign-region): Ditto.
(pgg-verify-region): Add optional argument `fetch' to fetch
signer's public key.
* pgg-def.el (pgg-default-keyserver-address): New variable.
* semi-def.el (pgp-function-alist): Remove `lookup-key'.
* mime-pgp.el (mime-display-application/pgp-signature): Abolish.
(mime-display-application/pgp-encrypted): Abolish.
(mime-display-application/pgp-keys): Abolish.
(mime-pgp-keyserver-url-template): Abolish.
(mime-pgp-keyserver-address): Abolish.
(mime-pgp-keyserver-port): Abolish.
(mime-pgp-keyserver-protocol): Abolish.
(mime-pgp-fetch-key): Abolish.
* semi-setup.el: Delete default setting of
`mime-display-application/pgp-signature',
`mime-display-application/pgp-encrypted',
`mime-display-application/pgp-keys'
1999-11-03 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg.el (pgg-fetch-key): Protect `buffer-file-name'.
* pgg-gpg.el (snarf-keys-region): Add `-' as extra argument of
gpg --import; convert status code into an integer.
1999-11-03 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* semi-def.el (pgp-function-alist): Add `lookup-key'.
* pgg.el, pgg-gpg.el, pgg-pgp5.el, pgg-pgp.el:
Rename generic function `lookup-key' to `lookup-key-string';
add optional argument `type'.
* pgg-def.el (pgg-truncate-key-identifier): New macro.
* pgg.el: Rename generic function `lookup-key' to
`lookup-key-string'; add optional argument `type'.
(pgg-fetch-key): New function.
(pgg-snarf-keys-region): Fix typo.
(pgg-lookup-key-string): New function.
(pgg-read-passphrase): Use `pgg-truncate-key-identifier'.
(pgg-add-passphrase-cache): Ditto.
* mime-pgp.el (mime-pgp-keyserver-url-template): New variable
imported from semi-pgpgpg.
(mime-pgp-keyserver-address): Ditto.
(mime-pgp-keyserver-port): Ditto.
(mime-pgp-keyserver-protocol): New variable.
(mime-pgp-fetch-key): New function.
(mime-verify-application/pgp-signature): Prompt user to fetch
signer's public key.
1999-11-03 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg.el (pgg-fetch-public-key): New function.
* pgg-pgp.el (lookup-key): New generic function.
(encrypt-region): Use `lookup-key'; cache passphrase if the
encryption has done successfully.
(sign-region): Likewise.
(decrypt-region): Use `lookup-key'.
* pgg.el (pgg-scheme): Remove all slots.
(pgg-decrypt-codition): Rename tag `cipher-algorithm' to
`symmetric-key-algorithm'.
(lookup-key): Add documentation about the new generic function.
* pgg-parse.el (pgg-decode-armor-region): Remove autoload cookie.
(pgg-armor-header-lines): New variable.
1999-11-02 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg.el (pgg-add-passphrase-cache): Use only four octets of the key.
(pgg-read-passphrase): Ditto.
* pgg-pgp5.el (lookup-key): New generic function.
(encrypt-region): Use `lookup-key'; cache passphrase if the
encryption has done successfully.
(sign-region): Likewise.
(decrypt-region): Use `lookup-key'.
1999-11-02 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg-parse.el
(pgg-parse-public-key-encrypted-session-key-packet):
Rename tag `public-key-identifier' to `key-identifier'.
* mime-pgp.el
(mime-display-application/pgp-encrypted): Refer it.
* pgg.el (pgg-passphrase-cache-expiry): New variable.
(pgg-passphrase-cache): New variable.
(pgg-read-passphrase): Add optional argument `key'.
(pgg-add-passphrase-cache): New function.
(pgg-remove-passphrase-cache): New function.
* pgg-gpg.el (lookup-key): New generic function.
(encrypt-region): Use `lookup-key'; cache passphrase if the
encryption has done successfully.
(sign-region): Likewise.
(decrypt-region): Use `lookup-key'.
1999-11-02 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* pgg-parse.el (pgg-parse-length-type): Fix typo.
(pgg-parse-public-key-encrypted-session-key-packet): Use
`pgg-read-bytes-string' instead of `pgg-read-bytes'.
1999-11-02 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* mime-edit.el (mime-edit-sign-pgp-mime): Rewrite with PGG functions.
(mime-edit-encrypt-pgp-mime): Likewise.
(mime-edit-encrypt-recipient-fields-list): Return recipients as list.
* mime-pgp.el: Add comment that this module is based on
draft-yamamoto-openpgp-mime-00.txt (OpenPGP/MIME) and RFC 2440
(OpenPGP Message Format) as well.
(mime-verify-application/pgp-signature): Use
`pgg-verify-region' instead of `mime-pgp-check-signature'.
(mime-display-application/pgp-signature): New function.
(mime-display-application/pgp-encrypted): New function.
(mime-display-application/pgp-keys): New function.
* semi-setup.el: Set up for
`mime-display-application/pgp-signature',
`mime-display-application/pgp-encrypted',
`mime-display-application/pgp-keys'.
(mime-setup-enable-pgp): Default to t.
* SEMI-ELS (semi-modules-to-compile): Add `pgg', `pgg-parse',
`pgg-gpg', `pgg-pgp' and `pgg-pgp5' instead of `mime-mc'.
* EMIKO-VERSION, pgg-def.el, pgg.el, pgg-gpg.el,
pgg-pgp5.el, pgg-pgp.el, pgg-parse.el: New file.
* mime-image.el (mime-display-image): Rewrite.
* semi-def.el (mime-user-interface-product): Modify for EMIKO.
(pgp-function-alist): Replace each method with PGG function.
* mime-view.el (mime-view-popup-menu): New variable.
(mime-view-popup-menu): New function.
(mime-view-define-keymap): Bind `mime-view-popup-menu' to
`mouse-button-3'.
1999-11-01 Tanaka Akira <akr@jaist.ac.jp>
* mime-view.el (mime-display-application/x-postpet): New function.
(mime-preview-condition): Set up for
'mime-preview-application/x-postpet.
(unpack): New macro.
(unpack-skip): New function.
(unpack-fixed): New function.
(unpack-byte): New function.
(unpack-short): New function.
(unpack-long): New function.
(unpack-string): New function.
(unpack-string-sjis): New function.
(postpet-decode): New function.
1999-10-17 Yoshiki Hayashi <t90553@mail.ecc.u-tokyo.ac.jp>
* SEMI-MK (install-semi-package): Delte auto-autoloads.el
and custom-load.el
1999-10-16 MORIOKA Tomohiko <tomo@m17n.org>
* SEMI: Version 1.13.7 (Awazu) released.
1999-10-06 Yoshiki Hayashi <t90553@mail.ecc.u-tokyo.ac.jp>
* mime-view.el (mime-preview-move-to-upper): Scroll
according to mime-preview-move-scroll.
1999-10-05 Yoshiki Hayashi <t90553@mail.ecc.u-tokyo.ac.jp>
* mime-view.el (mime-preview-scroll-down-entity,
mime-preview-scroll-up-entity): Recenter when moving to
a next entity.
(mime-preview-move-scroll): New variable.
(mime-preview-move-to-previous, mime-preview-move-to-next):
Recenter according to the variable mime-preview-move-scroll.
1999-10-04 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-view.el (mime-preview-move-to-next): Attempt to go to the
next page if the return value of `next-single-property-change' is
greater than `point-max'.
(mime-preview-move-to-previous): Don't move backward at the
beginning of the buffer; attempt to go to the previous page if the
return value of `previous-single-property-change' is less than
`point-min'.
1999-09-29 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-display-multipart/mixed): Share cell of
`major-mode'.
(mime-display-multipart/alternative): Likewise.
(mime-display-entity): Refer `major-mode' value of a situation
instead of buffer-local-variable `major-mode'.
1999-09-29 MORIOKA Tomohiko <tomo@m17n.org>
* mime-play.el (mime-preview-play-current-entity): Use
text-property `mime-view-situation' as the initial value of
acting-situation to add major-mode.
1999-09-29 MORIOKA Tomohiko <tomo@m17n.org>
* mime-edit.el (mime-content-types): Delete text/x-rot13-47-48 in
default definition. [cf. <tm-ja:4904>, <tm-ja:4907>]
1999-09-27 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-edit.el (mime-edit-user-agent-value): Include
`emacs-patch-level'. It exists in XEmacs 21.1.1 or later.
1999-09-20 Yoshiki Hayashi <t90553@mail.ecc.u-tokyo.ac.jp>
* mime-view.el (mime-preview-scroll-up-entitiy,
mime-preview-scroll-down-entity): Use scroll-up and scroll-down
instead of forward-line.
(mime-preview-next-line-entity,
mime-preview-previous-line-entity): Add optional argument LINES
and scroll LINES lines if specified. Add doc-string.
1999-09-13 MORIOKA Tomohiko <tomo@m17n.org>
* SEMI: Version 1.13.6 (Komatsu) released.
1999-08-30 MORIOKA Tomohiko <tomo@m17n.org>
* mime-edit.el (mime-edit-mime-version-field-for-message/partial):
Encode `mime-edit-version'.
1999-08-28 MORIOKA Tomohiko <tomo@m17n.org>
* mime-play.el (mime-store-message/partial-piece): Use
`directory-files' to check number of pieces.
1999-08-26 MORIOKA Tomohiko <tomo@m17n.org>
* mime-play.el (mime-store-message/partial-piece): Don't refer
`mime-preview-buffer'.
1999-08-25 Katsumi Yamaoka <yamaoka@jpl.org>
* SEMI-CFG: Use `if' instead of `when'.
1999-08-18 MORIOKA Tomohiko <tomo@m17n.org>
* REMI: Version 1.13.2 (Åike-Ikoinomori) released.
1999-08-17 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-view.el (mime-preview-original-major-mode): Modify the way
of checking for the end of the buffer.
1999-08-17 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-view.el (mime-preview-original-major-mode): Don't use
`get-text-property' at the end of the buffer.
1999-08-02 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-preview-follow-current-entity): Don't use
`mime-entity-buffer'.
1999-05-17 KOSEKI Yoshinori <kose@yk.NetLaputa.ne.jp>
* mime-pgp.el (mime-verify-application/pgp-signature): Specify the
name of `sig-file' explicitly for `mime-pgp-check-signature'.
(mime-pgp-check-signature): Accept new arg `sig-file' and feed its
value to the verify command.
1999-07-29 MORIOKA Tomohiko <tomo@m17n.org>
* mime-play.el (mime-play-entity): Get media-type from situation
instead of entity; display prompt and call `mime-save-content' if
method is not found.
(mime-detect-content): Call `mime-play-entity' even if media-type
specification is not found in `mime-magic-type-alist'.
1999-07-28 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-view-entity-title): Use
`mime-entity-read-field' instead of `mime-read-field'.
(mime-display-message): Use `major-mode' of
mime-entity-header-buffer as the default value of
original-major-mode.
* mime-play.el (mime-entity-safe-filename): Use
`mime-entity-read-field' instead of `mime-read-field'.
(mime-view-message/rfc822): New implementation.
* mime-pgp.el (mime-add-application/pgp-keys): Use
`mime-entity-number' instead of `mime-raw-point-to-entity-number'.
* mime-partial.el
(mime-combine-message/partial-pieces-automatically): Use
`mime-entity-read-field' instead of `mime-read-field'.
* mime-bbdb.el (mime-bbdb/update-record): Use
`mime-entity-read-field' instead of `mime-read-field'; use
`mime-entity-fetch-field' instead of `mime-fetch-field'.
1999-07-28 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-raw-find-entity-from-point): Deleted.
(mime-raw-buffer): Deleted.
(mime-preview-original-major-mode): Add new optional argument
`point'; refer text-property `mime-view-situation' instead of
using `mime-entity-buffer'.
(mime-raw-point-to-entity-node-id): Deleted.
(mime-raw-point-to-entity-number): Deleted.
(mime-raw-flatten-message-info): Deleted.
(mime-display-entity): Add text-property `mime-view-situation' to
each entity.
1999-07-27 MORIOKA Tomohiko <tomo@m17n.org>
* SEMI: Version 1.13.5 (MeihÅ) released.
1999-07-27 MORIOKA Tomohiko <tomo@m17n.org>
* NEWS (Don't expect raw-buffer): New subsection.
(Now acting-method must not expect to run in raw-buffer): Changed
as a subsubsection of subsection `Don't expect raw-buffer'.
(Don't refer variable `mime-raw-buffer'): New subsubsection.
(Don't refer variable `mime-preview-buffer'): New subsubsection.
* NEWS (Requires FLIM 1.13 API): New subsection.
1999-07-23 MORIOKA Tomohiko <tomo@m17n.org>
* README.en (Required environment): Change required FLIM to
1.13.1; change location of APEL and FLIM.
1999-07-22 MORIOKA Tomohiko <tomo@m17n.org>
* REMI: Version 1.13.1 (Kubiki) released.
1999-07-22 MORIOKA Tomohiko <tomo@m17n.org>
* mime-play.el
(mime-preview-quitting-method-for-mime-show-message-mode): Don't
refer `mime-raw-buffer'.
1999-07-21 MORIOKA Tomohiko <tomo@m17n.org>
* mime-play.el (mime-store-message/partial-piece): Don't refer
`mime-preview-buffer'.
1999-07-21 MORIOKA Tomohiko <tomo@m17n.org>
* REMI: Version 1.13.0 (Saigata) released.
1999-07-21 MORIOKA Tomohiko <tomo@m17n.org>
* Makefile (EXEC_PREFIX): Deleted.
(elc): Change command-line interface to delete `EXEC_PREFIX'.
(install-elc): Likewise.
* SEMI-MK (config-semi): Change command-line interface to delete
`EXEC_PREFIX'.
* SEMI-CFG (EXEC_PREFIX): Deleted.
1999-07-07 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
* mime-edit.el (mime-edit-quitting-method): Don't refer
`mime-raw-buffer'.
* mime-view.el (mime-preview-follow-current-entity): Don't refer
`mime-raw-buffer'.
1999-06-17 MORIOKA Tomohiko <tomo@m17n.org>
* mime-edit.el (mime-edit-user-agent-value): Modify for XEmacs
UTF-2000-MULE.
1999-06-04 MORIOKA Tomohiko <tomo@m17n.org>
* mime-edit.el (mime-edit-user-agent-value): Modify code to get
version number of XEmacs. [cf. <tm-ja:4561>]
1999-05-22 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-entity-situation): Don't refer `major-mode'
of a mime-entity-buffer.
(mime-display-multipart/mixed): Add `major-mode' of SITUATION to
default-situation of children.
(mime-display-multipart/alternative): Likewise.
(mime-display-entity): Don't refer `raw-buffer'; use
`mime-goto-header-start-point'.
(mime-display-message): Add new optional argument
`original-major-mode'; don't refer `raw-buffer'; use
`mime-entity-name' to make name of `preview-buffer'; don't set up
`mime-raw-buffer' of `preview-buffer'; use `original-major-mode'
as value of `major-mode' field of default-situation; don't pop up
`preview-buffer' in suitable window; return `preview-buffer'.
(mime-view-buffer): Pop up `preview-buffer' in suitable window.
1999-05-31 Keiichi Suzuki <keiichi@nanap.org>
* mime-play.el (mime-show-echo-buffer): Bind `buffer-read-only' to
nil, while insert messages.
1999-05-28 MORIOKA Tomohiko <tomo@m17n.org>
* README.en (Required environment): Require APEL 9.20.
1999-05-27 MORIOKA Tomohiko <tomo@m17n.org>
* mime-play.el (mime-play-entity): Enter to the calist-package
`mime-view' before call `ctree-find-calist'.
* mime-view.el (mime-view): New calist-package.
(mime-display-entity): Enter to the calist-package `mime-view'
before call `ctree-match-calist'.
1999-05-23 MORIOKA Tomohiko <tomo@m17n.org>
* mime-edit.el (mime-edit-mime-version-value): Don't use
`eval-when-compile' to avoid problem with XEmacs-MULE.
(mime-edit-mime-version-field-for-message/partial): Likewise.
1999-05-20 MORIOKA Tomohiko <tomo@m17n.org>
* NEWS (Text property `mime-view-entity-{header|body}'): New
subsection.
(Behavior change about `mime-display-header-hook'): Likewise.
* mime-view.el (mime-display-entity): Don't move to (point-max)
before run `mime-display-header-hook)'.
1999-05-19 MORIOKA Tomohiko <tomo@m17n.org>
* mime-view.el (mime-display-entity): Put text-property
`mime-view-entity-header' and `mime-view-entity-body' to header
and body; run `mime-display-header-hook' before insert "\n".
(mime-preview-follow-current-entity): Use text-property
`mime-view-entity-header'.
1999-05-12 MORIOKA Tomohiko <tomo@m17n.org>
* SEMI: Version 1.13.4 (Terai) released.
1999-04-06 Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
* mime-edit.el (mime-delete-field): Use `std11-field-end'.
1999-03-30 Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
* mime-edit.el (mime-edit-decode-single-part-in-buffer): Normalize
EOL code in MIME encoded text part.
1999-03-27 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-preview-follow-current-entity): Don't copy
header if current entity is root.
1999-03-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-charset-type-list): Add `tis-620'.
1999-02-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.13.3 (Komaiko) released.
1999-02-26 Katsumi Yamaoka <yamaoka@jpl.org>
* SEMI-MK (install-semi-package): Install mime-setup.el(c).
(compile-semi-package): Compile mime-setup.el as well.
1999-02-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-content-types): Add definition of
application/vnd.ms-powerpoint for myself :-P
(mime-file-types): Add setting of *.ppt for
application/vnd.ms-powerpoint.
1999-02-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-partial.el
(mime-combine-message/partial-pieces-automatically): Call
`mime-store-message/partial-piece' in the buffer when it is
called.
* mime-play.el (mime-store-message/partial-piece): Don't move to
point-min.
* mime-play.el (mime-store-message/partial-piece): Don't expect
called in raw-buffer.
1999-01-27 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.13.2 (Mikawa) released.
1999-01-26 Katsumi Yamaoka <yamaoka@jpl.org>
* README.en: Notice that 1.12.5 or later of FLIM is required.
1999-01-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-preview-play-current-entity): Add autoload
cookie.
(mime-play-entity): Likewise.
* mime-view.el (mime-display-message): Add autoload cookie; add
DOC-string.
(mime-view-buffer): Add autoload cookie.
1999-01-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-reduce-acting-situation-examples): New
implementation.
1999-01-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-view-caesar): Select window which displays
current-buffer if it is not selected <to fix problem with mouse
operations>.
1999-01-26 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-edit.el (mime-edit-decode-single-part-in-buffer): Limit the
search bound for the end of "Content-Transfer-Encoding" field.
1999-01-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-view-caesar): New implementation.
1999-01-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-view-caesar): Don't expect called in
raw-buffer; use `mime-insert-entity'.
1999-01-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-w3.el (mime-preview-text/html): Display err if error occurs
in `w3-region'.
* mime-w3.el (mime-preview-text/html): Guard from error of
`w3-region'.
1999-01-24 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.13.1 (Kaga-Kasama) released.
1999-01-24 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* TODO (Don't expect raw-buffer): New item.
(lazy generating of situations from mime-entity information): New
item.
* TODO (Don't use filter-model): finished.
* TODO (multipart/related support): virtually finished.
1999-01-24 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* Delete README.ja until it is fixed.
* mime-w3.el (url-cid): Use `mime-insert-entity-content'.
* README.ja, README.en (Required environment): Require FLIM
1.12.4.
* mime-w3.el (mime-w3-message-structure): New variable.
(mime-preview-text/html): Set up `mime-w3-message-structure'.
(url-cid): New function; set up as registered-protocol of url.
1999-01-23 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* README.ja: Modify title.
* README.ja: Add notice about translation.
* README.ja, README.en (Required environment): Require FLIM
1.12.3; delete description about enriched.el because anything
older than Emacs 19.28 are not supported.
* mime-pgp.el (mime-view-application/pgp): Don't expect called in
raw-buffer; use `mime-insert-entity'.
* mime-play.el (mime-view-message/rfc822): Use
`mime-insert-entity'.
1999-01-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS (Function `mime-play-entity'): Sync with latest
specification.
* mime-pgp.el (mime-verify-multipart/signed): Modify for interface
change of `mime-play-entity'.
* mime-play.el (mime-preview-play-current-entity): Modify for
interface change of `mime-play-entity'.
(mime-play-entity): Change interface; abolish optional arguments
`mode' and `ignore-example'.
(mime-detect-content): Modify for interface change of
`mime-play-entity'.
* mime-view.el (mime-entity-situation): Add new optional argument
`situation'; it is preferred to attributes of entity.
1999-01-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-version): Don't use `eval-when-compile'
to avoid to break product-code-name.
* mime-edit.el (mime-edit-version): Don't use `eval-when-compile'
to avoid to break product-code-name.
1999-01-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.13.0 (MattÅ) released.
1999-01-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-view-message/rfc822): Don't expect called in
raw-buffer.
1999-01-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS (Function `mime-play-entity'): Add description about
interface change of `mime-play-entity'.
* mime-play.el (mime-play-entity): Change interface.
1999-01-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS (Changes in SEMI 1.13): New section.
* NEWS (Changes in SEMI 1.12): New section.
1999-01-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-view-application/pgp): Don't expect called in
raw-buffer.
(mime-verify-application/pgp-signature): Likewise.
* mime-play.el: Abolish variable
`mime-preview-after-decoded-position'.
(mime-preview-play-current-entity): Use `mime-play-entity' simply;
don't switch to raw-buffer.
(mime-play-entity): renamed from `mime-raw-play-entity'; don't
expect called in raw-buffer.
(mime-activate-mailcap-method): Don't expect called in raw-buffer.
(mime-show-echo-buffer): Permit to run in preview-buffer.
1999-01-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.12.1 ([JR] Nonoichi) released.
* mime-play.el (mime-detect-content): Use `mime-entity-content'
not to refer to buffer directly.
1999-01-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Must require `emu'.
1999-01-04 OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
* mime-view.el (mime-view-insert-entity-button): Use URL if it
exists in Content-Type field.
* mime-play.el (mime-raw-browse-url-function): Default to
`mime-browse-url-function' instead of `mime-browse-url'.
1998-12-24 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-view.el (mime-preview-move-to-next): Don't move forward at
the end of buffer.
1998-12-03 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-edit.el (mime-edit-user-agent-value): Include
`xemacs-betaname'.
1998-12-02 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.12.0 (Nishi-Kanazawa) released.
1998-11-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (eliminate-top-spaces): New function (moved from
mime-def.el of FLIM).
1998-11-17 Kazuhiro Ohta <ohta@ele.cst.nihon-u.ac.jp>
* mime-partial.el
(mime-combine-message/partial-pieces-automatically): Fix
DOC-string.
* mime-view.el (mime-view-buffer): Fix DOC-string.
1998-11-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS (Changes in SEMI 1.11): New section.
1998-11-18 Katsumi Yamaoka <yamaoka@jpl.org>
* semi-setup.el (mime-setup-decode-message-header): Use
`mime-decode-header-in-buffer' instead of `eword-decode-header'.
* mime-view.el (mime-preview-follow-current-entity): Likewise.
1998-11-18 Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
* mime-edit.el (mime-content-transfer-encoding-priority-list): New
variable.
(mime-edit-translate-single-part-tag): Change return value to
`nil' or a cons which include content-type and encoding.
(mime-edit-translate-region): Generate `encodeing' from
return value of `mime-edit-translate-single-part-tag'.
1998-11-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.11.0 (Kanazawa) released.
* README.ja, README.en (Required environment): Modify for APEL
9.11 and FLIM 1.12.0.
1998-11-12 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-edit.el (mime-edit-split-ignored-field-regexp): Add "^".
1998-11-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-bbdb.el (mime-bbdb/update-record): Use
`mime-decode-field-body' instead of
`eword-decode-structured-field-body'.
1998-10-31 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-decode-message-in-buffer): Delete fields
match with `mime-edit-again-ignored-field-regexp' then call
`mime-decode-header-in-buffer'.
(mime-edit-again): Delete header filter.
1998-10-31 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-decode-multipart-in-buffer): Change
interface.
(mime-edit-decode-single-part-in-buffer): New function.
(mime-edit-decode-message-in-buffer): Swap arguments; use function
`mime-edit-decode-single-part-in-buffer'.
(mime-edit-again): Modify for
`mime-edit-decode-message-in-buffer'.
1998-10-31 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-decode-multipart-in-buffer): New
function.
(mime-edit-decode-message-in-buffer): Add new optional argument
`default-content-type'; use function
`mime-edit-decode-multipart-in-buffer'; add autoload cookie.
(mime-edit-again): Add autoload cookie.
* mime-edit.el (mime-edit-decode-message-in-buffer): Renamed from
`mime-edit-decode-buffer'; change `not-decode-text' to optional
argument.
1998-10-31 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.10.2 (Higashi-Kanazawa) released.
1998-10-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS (Abolish variable `mime-temp-directory'): New subsection.
1998-10-27 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-edit.el (mime-edit-decode-buffer): Limit search bound for
"Content-Transfer-Encoding:".
1998-10-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.10.1 (Morimoto) released.
* README.ja, README.en (Required environment): Modify for APEL 9.6
and FLIM 1.11.2.
1998-10-24 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el, mime-pgp.el, mime-partial.el, mime-image.el,
mime-edit.el: Use `temporary-file-directory' instead of
`mime-temp-directory'.
1998-10-23 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.10.0 (Tsubata) released.
1998-10-22 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
* README.ja: New file.
1998-10-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el, mime-view.el: Use `(featurep 'xemacs)' instead of
`running-xemacs'.
1998-10-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el, SEMI-ELS: Move function `mime-display-text/plain',
`mime-display-text/enriched' and `mime-display-text/richtext' from
mime-text to mime-view.el; abolish mime-text.el.
* mime-play.el: Don't Require `mime-text' when compiling.
* mime-w3.el: Require `mime' instead of `mime-text'.
1998-10-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* semi-setup.el (mime-setup-enable-inline-image): Use `(featurep
'xemacs)' instead of `running-xemacs'.
1998-10-20 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* README.en (Required environment): Modify to require APEL 9.5 and
FLIM 1.11.1.
* mime-edit.el: - Don't require emu.
- Require invisible.
* semi-def.el: Require poe instead of emu.
1998-10-20 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-decode-buffer): Convert encoding to
lower case.
1998-10-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-ignored-field-list): Modify each element
of initial value to include `:'.
(mime-view-visible-field-list): Likewise.
(mime-display-entity): Use `mime-insert-header' instead of
`mime-insert-decoded-header'.
1998-10-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-decode-buffer): Call
`mule-caesar-region' for text/x-rot13-47-48 entity.
1998-09-22 Shozo UEHARA <uehara@eken.phys.nagoya-u.ac.jp>
* mime-play.el (mime-raw-play-entity): Initialize `max-escore' by
0. <cf. [tm-ja:3432]>
1998-10-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS (Changes in SEMI 1.10): New section.
* NEWS (Changes in SEMI 1.9): New section.
* NEWS (User-Agent field): New subsection.
1998-10-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-view-caesar): Use `mime-insert-text-content'
instead of `mime-text-insert-decoded-body'.
* mime-w3.el (mime-preview-text/html): Use
`mime-insert-text-content' instead of
`mime-text-insert-decoded-body'.
* mime-text.el: Abolish function `mime-text-insert-decoded-body'.
(mime-display-text/plain): Use `mime-insert-text-content' instead
of `mime-text-insert-decoded-body'.
(mime-display-text/richtext): Likewise.
(mime-display-text/enriched): Likewise.
1998-10-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.9.1 (Kurikara) released.
1998-10-14 Jari Aalto <jari.aalto@poboxes.com>
* mime-edit.el (mime-file-types): Add some new mime types, and
rearrange the types to logical sections: text; octext text and
binary. <cf. [tm-en:1856]>
1998-10-12 Katsumi Yamaoka <yamaoka@jpl.org>
* README.en: Add explanation about `VERSION_SPECIFIC_LISPDIR'.
* Makefile (install): Add new arg `VERSION_SPECIFIC_LISPDIR'.
(install-elc): Likewise.
* SEMI-MK (config-semi): Refer to `VERSION_SPECIFIC_LISPDIR'.
* SEMI-CFG (VERSION_SPECIFIC_LISPDIR): New variable.
1998-10-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-CFG: Abolish variable `SHELL' and `SHELLOPTION'.
1998-10-08 Katsumi Yamaoka <yamaoka@jpl.org>
* SEMI-CFG: Use `add-latest-path' for adding "custom" to
load-path.
1998-10-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-CFG: Don't use `when' before install is required; don't
require cl.
1998-10-08 Katsumi Yamaoka <yamaoka@jpl.org>
* SEMI-CFG: Add "custom" to load-path.
1998-10-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.9.0 (Isurugi) released.
1998-10-06 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* README.en (Required environment): Modify for APEL 9.1 and FLIM
1.10.1.
1998-10-06 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-version): Enclose with
`eval-and-compile'.
* mime-edit.el (mime-edit-version): Renamed from
`mime-edit-version-string'; use `mime-user-interface-product',
`mime-product-name', `mime-product-version' and
`mime-product-code-name'.
(mime-edit-user-agent-value): Use `mime-user-interface-product',
`mime-library-product', `mime-product-name',
`mime-product-version' and `mime-product-code-name'.
(mime-edit-mime-version-value): Rename `mime-edit-version-string'
-> `mime-edit-version'.
(mime-edit-mime-version-field-for-message/partial): Likewise.
* mime-play.el (mime-save-acting-situation-examples): Rename
`mime-view-version-string' -> `mime-view-version'.
* mime-view.el (mime-view-version): Renamed from
`mime-view-version-string'; use `mime-user-interface-product',
`mime-product-name', `mime-product-version' and
`mime-product-code-name'.
* semi-def.el (mime-user-interface-product): New constant; abolish
`mime-user-interface-version'.
1998-10-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-echo-window-is-shared-with-bbdb): Check bbdb
is install or not to define default value.
(mime-show-echo-buffer): New implementation about
`mime-echo-window-is-shared-with-bbdb'.
1998-10-01 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-charset-type-list): Use `cn-gb' instead of
`cn-gb2312' because `cn-gb2312' is typo.
1998-09-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-file-types): Use function
`mime-encoding-list' instead of variable
`mime-file-encoding-method-alist' to define default value.
(mime-edit-insert-voice): Use function `mime-encoding-alist'
instead of variable `mime-file-encoding-method-alist' for
completion.
(mime-prompt-for-encoding): Likewise.
1998-09-20 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-user-agent-value): Add
system-configuration for Emacs and XEmacs.
1998-09-20 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-normalize-body): Use "7bit" for nil
encoding as an argument of `mime-encode-region'.
1998-09-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.8.6 (Fukuoka) released.
1998-09-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* README.en (Installation): Add description for `run in expanded
place' and `install as a XEmacs package'.
* README.en (Required environment): Require FLIM 1.9.2 or later.
1998-09-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-file-types): Abolish setting for
text/richtext.
(mime-edit-insert-text): Likewise.
* mime-edit.el (mime-content-types): Modify comment style.
1998-09-13 Shin'ichiro Tanaka <tanaka@ifos.se.fujitsu.co.jp>
* mime-edit.el (mime-content-types): Delete text/richtext and add
text/css and text/xml (cf. [tm-ja:3387]).
1998-09-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-insert-user-agent-field): New variable
(abolish `mime-edit-insert-x-emacs-field').
(mime-edit-user-agent-value): New variable (abolish
`mime-edit-x-emacs-value').
(mime-edit-translate-body): Insert User-Agent field instead of
`X-Emacs' field.
(mime-edit-again-ignored-field-regexp): Add `User-Agent' instead
of `X-Emacs' field conditionally.
1998-09-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-MK (config-semi-package): New function.
(compile-semi-package): New function.
(install-semi-package): New function.
* SEMI-CFG (PACKAGEDIR): New variable.
* Makefile: Abolish variable `SHELL', `MAKE', `CC' and `CFLAGS'.
(XEMACS): New variable.
(FLAGS): Add `-l SEMI-MK'.
(PACKAGEDIR): New variable.
(elc): Delete `-l SEMI-MK'.
(install-elc): Delete `-l SEMI-MK'. Abolish target `all', `tex',
`dvi' and `ps'.
(package): New target.
(install-package): New target.
(clean): Delete historical setting.
1998-08-31 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.8.5 (Nishi-Takaoka) released.
* README.en (Required environment): Modify APEL and FLIM version.
* mime-ui-en.sgml (Introduction): Translate.
1998-08-31 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-type-subtype-score-alist): Fix
mismatched.
1998-08-10 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el (mime-text-insert-decoded-body): Specify line break
code type as CRLF.
1998-08-10 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
* mime-edit.el (mime-edit-normalize-body): Failed to canonicalize
empty lines.
1998-08-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-w3.el (mime-preview-text/html): Insert dummy "\n" into end
of entity to avoid keymap text-property problem.
1998-07-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS (Don't use "file" command to detect content of entity): New
section.
* mime-play.el (mime-magic-type-alist): New variable; abolish
`mime-file-content-type-alist'.
(mime-detect-content): New implementation (don't use "file"
command).
1998-07-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.8.4 (Takaoka) released.
1998-07-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-ui-en.sgml, mime-ui-ja.sgml (message/partial sending): New
section.
* mime-edit.el (mime-edit-split-blind-field-regexp): Add
DOC-string; change to user option.
1998-07-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* REMI: Version 1.8.4 (Takaoka) released.
1998-07-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el: Reduce `mime-acting-situation-example-list' while
it is bigger than `mime-acting-situation-example-list-max-size'.
1998-07-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-preview-message): Use `mime-view-buffer'
instead of `mime-view-mode'.
1998-07-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* REMI: Version 1.8.3 (Ecchū-Nakagawa) released.
* mime-play.el (mime-delq-null-situation): Add new optional
argument `ignored-value'.
(mime-raw-play-entity): Add new optional argument
`ignored-method'; add `ignore-examples' to acting-situation.
(mime-detect-content): Specify `ignore-examples' of
acting-situation as `ignore-examples' of `mime-raw-play-entity';
specify `mime-detect-content' as `ignored-method' of
`mime-raw-play-entity'.
1998-07-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-preview-extract-current-entity): Change
interface to add `ignore-examples'.
(mime-preview-print-current-entity): Likewise.
* mime-play.el (mime-acting-situation-example-list-max-size): New
variable.
(mime-reduce-acting-situation-examples): New function.
(mime-preview-play-current-entity): Change interface to add
`ignore-examples'.
(mime-raw-play-entity): Add new optional argument
`ignore-examples'. Reduce `mime-acting-situation-example-list'
when loading example file.
1998-07-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* REMI: Version 1.8.2 (NÅmachi) released.
1998-07-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-acting-situation-example-list): New variable;
abolish `mime-acting-situation-examples'.
(mime-save-acting-situation-examples): Modify for
`mime-acting-situation-example-list'.
(mime-compare-situation-with-example): New function.
(mime-raw-play-entity): Change algorithm to compare with
acting-situation-examples.
(mime-store-message/partial-piece): Use `mime-view-buffer' instead
of `mime-view-mode'.
1998-07-06 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-preview-play-current-entity): Fix problem
when `mode' is omitted with non-interactive mode (maybe for button
dispatcher).
1998-07-06 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* REMI: Version 1.8.1 (Fushiki) released.
1998-07-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-ui-en.texi, mime-ui-en.sgml: New files.
* mime-ui-ja.sgml: Modify node names about MIME-Edit.
(file-type specification): Fix typo.
1998-07-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-file-content-type-alist): Add "Standard
MIDI".
* mime-play.el (mime-detect-content): Fixed.
1998-07-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-activate-mailcap-method): Check filename is
null string.
1998-07-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-ui-ja.sgml, mime-ui-ja.texi: New files; delete
mime-view-ja.sgml and mime-view-ja.texi.
1998-07-01 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.8.2 (Kosugi) released.
* README.en (Required environment): Modify for FLIM 1.8.0.
* mime-view.el (mime-display-entity): Modify for
`mime-insert-decoded-header'.
1998-06-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-activate-mailcap-method): Use
`mime-write-entity-content'.
1998-06-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.8.1 (Kureha) released.
1998-06-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-save-content): Use
`mime-write-entity-content'.
1998-06-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el:
- Abolish local variable `mime-raw-representation-type'.
- Abolish function `mime-entity-representation-type'.
* mime-pgp.el (mime-view-application/pgp): Use
`mime-entity-cooked-p'.
* mime-play.el (mime-view-message/rfc822): Use
`mime-entity-cooked-p'.
1998-06-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el: Abolish function `mime-raw-write-region'.
* mime-play.el (mime-store-message/partial-piece): Use
`mime-write-entity-body'.
* mime-pgp.el (mime-verify-application/pgp-signature): Use
`mime-write-entity'.
1998-06-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-view-application/pgp): Specify
representation-type by argument of `mime-view-buffer'.
1998-06-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-view-message/rfc822): New implementation.
* mime-view.el (mime-display-message): Try use window of mother
buffer to display mime-preview-buffer.
1998-06-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Abolish `mime-entity-cooked-p'; use
`mime-entity-cooked-p' of FLIM.
(mime-view-buffer): New optional argument `representation-type';
use `mime-open-entity'.
(mime-view-mode): New implementation.
1998-06-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* REMI: Version 1.8.0 (Ecchū-Kokubu) released.
1998-06-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* README.en (Required environment): Modify for FLIM 1.7.0.
* mime-view.el (mime-view-mode): New implementation.
1998-06-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el (mime-display-text/plain): Must rename
`mime-browse-add-url-button' to `mime-add-url-buttons'.
1998-06-25 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
* semi-def.el: Don't require 'browse-url.
Abolish `mime-browse-add-url-buttons-maybe' and `mime-browse-url'.
(mime-browse-url-function): New variable.
(mime-add-url-buttons): Renamed from `mime-browse-add-url-button'.
Use `mime-browse-url-function'.
1998-06-24 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
* mime-view.el: (mime-preview-condition): Renamed method for
"anon-ftp" access-type to `mime-view-message/external-anon-ftp'
and added new method `mime-view-message/external-url' for "url"
access-type.
1998-06-24 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
* mime-play.el (mime-preview-play-current-entity): Use
optional arg of `interactive'.
(mime-view-message/external-anon-ftp): Renamed from
`mime-view-message/external-ftp'.
(mime-raw-browse-url-function): New variable.
(mime-view-message/external-url): New function.
1998-06-24 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
* semi-def.el (mime-browse-url-regexp): Renamed from
`mime-text-url-regexp'.
(mime-browse-url): Renamed from `mime-text-browse-url'.
(mime-browse-add-url-buttons): Renamed from
`mime-text-add-url-buttons'.
(mime-browse-add-url-buttons-maybe): Renamed from
`mime-text-add-url-buttons-maybe'.
* mime-text.el: Moved URL stuff to semi-def.el.
1998-06-24 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.8.0 (Toyama) released.
* SEMI-CFG: Modify for FLIM 1.6.0.
* README.en (Required environment): Modify for FLIM 1.6.0.
1998-06-24 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el:
- Abolish function `mime-raw-find-entity-from-node-id',
`mime-raw-find-entity-from-number'.
- Move function `mime-entity-parent' to mime.el of FLIM.
- Abolish variable `mime-view-uuencode-encoding-name-list'.
- Move function `mime-entity-uu-filename' and
`mime-entity-filename' to mime.el of FLIM.
(mime-preview-follow-current-entity): Use function
`mime-find-entity-from-node-id' instead of
`mime-raw-find-entity-from-node-id'.
(mime-preview-move-to-upper): Don't use
`mime-raw-find-entity-from-node-id'.
* mime-pgp.el (mime-verify-application/pgp-signature): Don't use
`mime-raw-find-entity-from-node-id'.
(mime-decrypt-application/pgp-encrypted): Likewise.
* mime-view.el, mime-play.el (mime-entity-safe-filename): Use
`mime-read-field' instead of `mime-entity-read-field'.
* mime-partial.el
(mime-combine-message/partial-pieces-automatically): Use
`mime-read-field' instead of `mime-entity-read-field'.
* mime-bbdb.el (mime-bbdb/update-record): Use `mime-fetch-field'
and `mime-read-field' instead of `mime-entity-fetch-field' and
`mime-entity-read-field'.
1998-06-23 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-display-message): Use window of
preview-buffer or preview-buffer to display preview-buffer.
(mime-view-buffer): fixed.
(mime-view-mode): fixed.
* MIME-View-API-ja.ol: Delete MIME-View-API-ja.ol.
1998-06-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS (Changes in SEMI 1.8): New chapter.
1998-06-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Abolish external x-face viewer.
1998-06-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* semi-def.el: Abolish function `tm:set-fields', `tm:add-fields'
and `tm:delete-fields'.
* mime-partial.el: Abolish variable
`mime-view-partial-message-method-alist' and function
`mime-view-partial-message'.
(mime-combine-message/partial-pieces-automatically): Use
`request-partial-message-method' in acting-situation.
1998-06-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-display-message): Delete unnecessary
`mime-parse-buffer'.
1998-06-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.7.1 (Higashi-Toyama) released.
* README.en (Required environment): Delete description about
`enable-multibyte-characters'; modify for FLIM 1.5.0.
1998-06-22 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
* mime-edit.el (mime-content-types): Add "url" access-type and
"subject" parameter of "mail-server" access-type to
message/external-body media-type.
(mime-edit-define-menu-for-xemacs): Doc-string fix.
1998-06-22 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
* SEMI-CFG: Support run-in-place installation of BBDB and
Emacs/W3.
1998-06-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Don't require `std11'.
* mime-view.el: Require `mime' instead of `mime-lib'.
(mime-entity-filename): Don't use `std11-strip-quoted-string'.
* mime-edit.el: Don't require `eword-encode'.
1998-06-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-partial.el
(mime-combine-message/partial-pieces-automatically): Fixed.
* mime-pgp.el (mime-view-application/pgp): Use function
`mime-entity-representation-type'.
* mime-play.el (mime-view-message/rfc822): Use function
`mime-entity-representation-type'.
(mime-store-message/partial-piece): `mime-entity-body-start' and
`mime-entity-body-end'.
* mime-text.el (mime-text-insert-decoded-body): Use function
`mime-entity-cooked-p'.
* mime-view.el (mime-entity-representation-type): New function.
(mime-entity-cooked-p): New function.
(mime-display-entity): Use function `mime-entity-cooked-p'.
1998-06-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el (mime-text-insert-decoded-body): Use
`mime-entity-content'.
* mime-image.el (mime-display-image): Use `mime-entity-content'.
1998-06-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-entity-safe-filename): New implementation.
1998-06-20 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el (mime-text-insert-decoded-body): Delete unnecessary
`save-restriction'.
1998-06-20 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
* semi-def.el: Require 'custom.
1998-06-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Don't require `mime-parse'.
1998-06-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-CFG: - Modify for FLIM 1.5.0.
- Don't signal error if tm is found in load-path.
1998-06-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-save-content): Use `mime-entity-body-start'
and `mime-entity-body-end'.
1998-06-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-view-application/pgp): fixed.
(mime-verify-application/pgp-signature): Use
`mime-message-structure' instead of `mime-raw-message-info'.
(mime-decrypt-application/pgp-encrypted): Use
`mime-message-structure' instead of `mime-raw-message-info'.
* mime-view.el (mime-display-message): Use `mime-parse-buffer';
abolish variable `mime-raw-message-info'; use
`mime-message-structure' instead of `mime-raw-message-info'.
1998-06-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-bbdb.el (mime-bbdb/update-record): Use
`mime-entity-fetch-field' and `mime-entity-read-field'.
1998-06-19 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
* SEMI-CFG: Require 'cl first.
1998-06-18 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.7.0 (Mizuhashi) released.
1998-06-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el, mime-view.el, semi-def.el: Rename
`mime-module-version' to `mime-user-interface-version'.
* mime-parse.el, SEMI-ELS: Move mime-parse.el to FLIM layer.
1998-06-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* semi-setup.el (call-after-loaded): Moved from semi-def.el.
* semi-def.el: Move `call-after-loaded' to semi-setup.el.
1998-06-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-insert-entity-button): Change interface.
1998-06-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-entity-filename): Moved from mime-play.el.
(mime-view-entity-title): Use `mime-entity-filename'.
* mime-play.el: Move `mime-entity-filename' to mime-view.el.
1998-06-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-entity-filename): New function; abolish
`mime-raw-get-original-filename'.
(mime-entity-safe-filename): New function; abolish
`mime-raw-get-filename'.
(mime-activate-mailcap-method): Use `mime-entity-safe-filename'.
(mime-save-content): Use `mime-entity-safe-filename'.
(mime-detect-content): Use `mime-entity-safe-filename'.
* mime-view.el (mime-entity-uu-filename): New function; abolish
`mime-raw-get-uu-filename'.
1998-06-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-entity-title): Renamed from
`mime-raw-get-subject'; use `mime-entity-read-field'.
1998-06-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS (Changes in SEMI 1.7): New chapter.
(Changes in SEMI 1.6): Add description of entity-detection.
1998-06-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Rename `mime-view-following-method-alist' to
`mime-preview-following-method-alist'.
1998-06-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* semi-setup.el, mime-pgp.el: Rename
`mime-method-to-add-application/pgp-keys' to
`mime-add-application/pgp-keys'.
* semi-setup.el, mime-pgp.el: Rename
`mime-method-to-decrypt-application/pgp-encrypted' to
`mime-decrypt-application/pgp-encrypted'.
* semi-setup.el, mime-pgp.el: Rename
`mime-method-to-verify-application/pgp-signature' to
`mime-verify-application/pgp-signature'.
* semi-setup.el, mime-pgp.el: Rename
`mime-method-to-verify-multipart/signed' to
`mime-verify-multipart/signed'.
* semi-setup.el, mime-pgp.el: Rename
`mime-method-for-application/pgp' to `mime-view-application/pgp'.
* SEMI-naming.ol: New file.
1998-06-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-partial.el: Rename
`mime-method-to-combine-message/partial-pieces' to
`mime-combine-message/partial-pieces-automatically'.
1998-06-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el, mime-view.el: Rename
`mime-method-to-display-caesar' to `mime-view-caesar'.
* mime-play.el, mime-view.el: Rename
`mime-method-to-display-message/external-ftp' to
`mime-view-message/external-ftp'.
1998-06-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el, mime-partial.el, mime-play.el: Rename
`mime-method-to-store-message/partial' to
`mime-store-message/partial-piece'.
1998-06-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el, mime-view.el: Rename
`mime-method-to-display-message/rfc822' to
`mime-view-message/rfc822'.
1998-06-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el, mime-view.el: Rename `mime-method-to-detect' to
`mime-detect-content'.
1998-06-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-display-entity): Abolish body-filter support.
* mime-play.el, mime-view.el: Rename `mime-method-to-save' to
`mime-save-content'.
1998-06-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-activate-mailcap-method): Fixed.
1998-06-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-image.el (mime-display-image): New function; abolish
function `mime-preview-filter-for-image'.
* mime-image.el: Rename `mime-view-content-header-filter-hook' to
`mime-display-header-hook'.
* mime-view.el (mime-display-entity): Run
`mime-display-header-hook'.
* mime-text.el, mime-view.el: Rename `mime-preview-text/enriched'
to `mime-display-text/enriched'.
* mime-text.el, mime-view.el: Rename `mime-preview-text/richtext'
to `mime-display-text/richtext'.
* mime-text.el, mime-view.el: Rename `mime-preview-text/plain' to
`mime-display-text/plain'.
* mime-view.el (mime-display-multipart/mixed): Renamed from
`mime-preview-multipart/mixed'.
* mime-view.el (mime-display-multipart/alternative): Renamed from
`mime-preview-multipart/alternative'.
* mime-view.el (mime-display-message/partial-button): Renamed from
`mime-preview-message/partial-button'.
* mime-view.el (mime-display-entity): Renamed from
`mime-view-display-entity'; change interface.
(mime-display-message): Renamed from `mime-view-display-message'.
1998-06-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* README.en (Required environment): Modify for FLIM 1.4.0.
1998-06-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el: Move function `mime-entity-number' to FLIM layer.
1998-06-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-header-presentation-method-alist): New
variable; abolish variable
`mime-view-content-header-filter-alist'; abolish function
`mime-view-cut-header'; abolish variable
`mime-view-ignored-field-regexp'.
(mime-view-display-entity): Use
`mime-header-presentation-method-alist'.
* mime-parse.el: Move definition of structure `mime-entity' to
FLIM layer.
1998-06-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el: Change order of `mime-entity'.
1998-06-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.6.0 (Namerikawa) released.
1998-06-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view-ja.texi, mime-view-ja.sgml: New files.
* mime-view.el (mime-view-mode): Fix DOC-string.
1998-06-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-file-content-type-alist): Renamed from
`mime-file-type-regexp-type-subtype-alist'.
1998-06-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS: Add description about
`mime-preview-over-to-{previous|next}-method-alist'.
* mime-view.el (mime-preview-over-to-previous-method-alist):
Add DOC-string.
(mime-preview-over-to-next-method-alist): Add DOC-string.
* mime-view.el (mime-preview-over-to-previous-method-alist):
Renamed from `mime-view-over-to-previous-method-alist'.
(mime-preview-over-to-next-method-alist): Renamed from
`mime-view-over-to-next-method-alist'.
1998-06-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-w3.el (mime-save-background-color): Fixed.
* mime-view.el (mime-acting-condition): Set up
`mime-method-to-detect' for application/octet-stream in "play"
mode.
* mime-play.el (mime-file-type-regexp-type-subtype-alist): New
variable.
(mime-method-to-detect): New function.
1998-06-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-sort-situation): Modify for
Content-Disposition information.
1998-06-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Abolish variable `mime-view-show-summary-method'
and function `mime-preview-show-summary'.
1998-06-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-entity-situation): Add information of
Content-Disposition.
1998-06-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* MIME-View-API-ja.ol (mime-preview-buffer): Add description about
`mime-preview-original-major-mode'.
* mime-view.el (mime-preview-original-major-mode): Modify
DOC-string.
* NEWS: Add description about abolishment of tm-compatible
external method support.
* mime-play.el (mime-raw-play-entity): Abolish tm-compatible
external method support; abolish function
`mime-activate-external-method' and
`mime-make-external-method-args'.
1998-06-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-activate-mailcap-method): Use
`mime-entity-body-start'.
* mime-play.el (mime-activate-external-method): Change interface.
* mime-play.el (mime-activate-mailcap-method): Change interface.
1998-06-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* MIME-View-API-ja.ol (mime-preview-buffer): Delete description
about text-property `mime-view-raw-buffer'.
* mime-play.el (mime-preview-play-current-entity): Don't refer
text-property `mime-view-raw-buffer'.
* mime-view.el (mime-view-display-entity): Don't set up
text-property `mime-view-raw-buffer'.
1998-06-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* MIME-View-API-ja.ol: Abolish description about
`mime-preview-original-major-mode'.
* NEWS (Changes in SEMI 1.6): New chapter.
* TODO (multipart/related support): New item.
1998-06-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS: Add description about mime-w3.el.
1998-06-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-w3.el (mime-save-background-color): New macro.
(mime-preview-text/html): Use `mime-save-background-color'.
1998-06-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el: Abolish variable `mime-edit-signing-type' and
`mime-edit-encrypting-type'.
(mime-edit-process-multipart-1): Separate "signed" to "pgp-signed"
and "kazu-signed"; separate "encrypted" to "pgp-encrypted" and
"kazu-encrypted".
(mime-edit-enclose-signed-region): Renamed from
`mime-edit-enclose-pgp-signed-region'.
(mime-edit-enclose-pgp-encrypted-region): Renamed from
`mime-edit-enclose-encrypted-region'.
(mime-edit-enclose-kazu-signed-region): New function.
(mime-edit-enclose-kazu-encrypted-region): New function.
(mime-edit-set-sign): Don't refer `mime-edit-signing-type'.
(mime-edit-set-encrypt): Don't refer `mime-edit-encrypting-type'.
1998-06-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-sign-pgp-kazu): Abolish unused local
variable.
(mime-edit-encrypt-pgp-kazu): Abolish unused local variables.
1998-06-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-method-for-application/pgp): Change interface.
(mime-method-to-verify-multipart/signed): Change interface.
(mime-method-to-verify-application/pgp-signature): Change
interface.
(mime-method-to-decrypt-application/pgp-encrypted): Change
interface.
(mime-method-to-add-application/pgp-keys): Change interface.
* mime-partial.el (mime-method-to-combine-message/partial-pieces):
Change interface.
* mime-play.el (mime-raw-play-entity): Change interface of
internal-method.
(mime-method-to-save): Change interface.
(mime-method-to-display-message/rfc822): Change interface.
(mime-method-to-store-message/partial): Change interface.
(mime-method-to-display-message/external-ftp): Change interface.
(mime-method-to-display-caesar): Change interface.
1998-06-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-normalize-body): Use
`mime-charset-type-list' directly; abolish local variable
`mime-edit-charset-default-encoding-alist' and function
`mime-make-charset-default-encoding-alist'.
(mime-edit-toggle-transfer-level): Don't set up
`mime-edit-charset-default-encoding-alist'.
1998-06-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-message): Set up
`mime-raw-message-info'.
(mime-view-buffer): New function.
(mime-view-mode): Don't set up `mime-raw-message-info'.
1998-06-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-charset-type-list): Use base64 for cn-gb2312
and gb2312.
(mime-edit-normalize-body): If encoding is not specified for
charset, use quoted-printable or 8bit for mime-transfer-level is 7
or 8.
* mime-edit.el (mime-charset-type-list): Add `shift_jis'.
1998-06-10 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-message): Use
`mime-maybe-hide-echo-buffer'.
(mime-view-mode): Don't use `mime-maybe-hide-echo-buffer'.
* mime-view.el (mime-view-display-message): Move point to top of
body; run `mime-view-mode-hook'.
(mime-view-mode): Don't move point; don't run
`mime-view-mode-hook'.
* mime-view.el (mime-view-display-message): Add new optional
argument `default-keymap-or-function'.
(mime-view-mode): Modify for `mime-view-display-message'.
* mime-view.el (mime-view-display-message): Add new optional
argument `mother'; set to `mime-mother-buffer'.
(mime-view-mode): Modify for `mime-view-display-message'.
1998-06-10 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-mc.el: Use `eval-and-compile' to load "mc-pgp".
* mime-view.el (mime-preview-multipart/mixed): Modify for
`mime-view-display-entity'; don't refer `mime-raw-buffer'.
(mime-preview-multipart/alternative): Modify for
`mime-view-display-entity'; don't refer `mime-raw-buffer'.
(mime-view-display-entity): Change interface to abolish argument
for raw-buffer; don't refer `mime-raw-buffer'.
(mime-view-display-message): Abolish variable
`mime-preview-original-major-mode'; modify for
`mime-view-display-entity'.
(mime-preview-original-major-mode): New implementation; add
optional argument `recursive'.
(mime-preview-follow-current-entity): Modify for
`mime-preview-original-major-mode'.
(mime-preview-move-to-next): Use function
`mime-preview-original-major-mode'.
(mime-preview-scroll-up-entity): Use function
`mime-preview-original-major-mode'.
(mime-preview-scroll-down-entity): Use function
`mime-preview-original-major-mode'.
(mime-preview-quit): Use function
`mime-preview-original-major-mode'.
(mime-preview-show-summary): Use function
`mime-preview-original-major-mode'.
* mime-view.el (mime-view-display-message): New function; abolish
function `mime-view-setup-buffers'.
(mime-view-mode): Use `mime-view-display-message'.
1998-06-10 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-raw-play-entity): Use
`mime-entity-situation'.
* mime-view.el (mime-entity-situation): New function.
(mime-preview-multipart/alternative): Use `mime-entity-situation'.
(mime-view-display-entity): Use `mime-entity-situation'.
1998-06-10 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-enclose-region-internal): Abolish unused
local variable.
1998-06-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* MIME-View-API-ja.ol (entity): Add description of
`mime-entity-number'.
* mime-play.el (mime-method-to-display-caesar): Use
`mime-entity-number'.
* mime-parse.el (mime-entity-number): New function.
1998-06-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* MIME-View-API-ja.ol (entity-button): Modify description of
`mime-view-insert-entity-button'.
* mime-view.el (mime-view-insert-entity-button): Change interface.
(mime-view-display-entity): Modify for
`mime-view-insert-entity-button'.
1998-06-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* MIME-View-API-ja.ol (entity-button): Modify description of
`mime-view-entity-button-visible-p'.
* mime-view.el (mime-view-entity-button-visible-p): Change
interface.
(mime-view-display-entity): Modify for
`mime-view-entity-button-visible-p'.
1998-06-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* MIME-View-API-ja.ol: Add description of `mime-entity-parent' and
abolish description `mime-raw-entity-parent'.
* mime-view.el (mime-entity-parent): New function; abolish
`mime-raw-entity-parent'.
(mime-view-entity-button-visible-p): Use `mime-entity-parent'
instead of `mime-raw-entity-parent'.
1998-06-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.5.4 (Higashi-Namerikawa) released.
* mime-edit.el (mime-edit-normalize-body): Abolish unused local
variable.
1998-06-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-translate-single-part-tag): Add new
argument `boundary'.
(mime-edit-translate-region): Modify for
`mime-edit-translate-single-part-tag'.
1998-06-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-w3.el (mime-put-keymap-region): New macro.
(mime-preview-text/html): Use macro `mime-put-keymap-region'.
1998-06-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-ELS (semi-modules-to-compile): Add 'mime-w3 if w3 is found.
* semi-setup.el (mime-setup-enable-inline-html): New variable; add
setting for mime-w3.el conditionally.
* mime-w3.el: New module.
1998-06-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-preview-multipart/alternative): Fix typo.
1998-06-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-x-emacs-value): Check
`enable-multibyte-characters' is bound or not.
1998-06-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.5.3 (Uozu) released.
* NEWS (`pgp-elkins' -> `pgp-mime'): New section.
* mime-edit.el: Rename `pgp-elkins' -> `pgp-mime'.
1998-06-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-sign-pgp-elkins): Abolish unused local
variable.
(mime-edit-encrypt-pgp-elkins): Abolish unused local variable.
1998-06-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el (mime-parse-multipart): fixed.
1998-06-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.5.2 (Kurobe) released.
* mime-play.el (mime-delq-null-situation): New function.
(mime-raw-play-entity): Use `mime-delq-null-situation'.
1998-06-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* TODO (Better implementation for multipart/alternative): done.
* NEWS (type-subtype-score): New section.
1998-06-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-raw-message-info): Modify DOC-string.
* MIME-View-API-ja.ol: Modify for SEMI 1.5.
1998-06-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-touched-flag): Define by `defvar'.
(mime-edit-mode): Don't check `mime-edit-touched-flag' is bound or
not.
* mime-edit.el (mime-edit-find-inmost): Abolish unused local
variables.
1998-06-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el (mime-text-insert-decoded-body): Don't refer
`mime-raw-buffer'.
* mime-parse.el: Change format of `mime-entity' to add `buffer'.
1998-06-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el: When it is compiled, require 'bbdb or define
`bbdb-buffer-name' to avoid compiler warning.
(mime-method-to-display-caesar): Abolish unused local variable.
Use `eval-buffer' to eval contents of
`mime-acting-situation-examples-file'.
1998-06-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el: Move definition of variable
`mime-raw-representation-type' to mime-view.el.
* mime-view.el: Move definition of variable
`mime-raw-representation-type' from mime-text.el.
(mime-raw-message-info): Modify DOC-string.
* MIME-View-API-ja.ol: New file.
1998-06-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.5.1 (Ikuji) released.
* mime-view.el (mime-raw-message-info): Fix typo.
(mime-view-type-subtype-score-alist): New variable.
(mime-preview-multipart/alternative): New function; set up for
`mime-preview-condition'.
(mime-view-display-entity): Add optional argument `situation'.
1998-06-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-entity): Call
body-presentation-method to display multipart if it is function.
* NEWS: Add news about SEMI 1.5.
1998-06-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-preview-multipart/mixed): New function.
(mime-view-display-entity): Use `mime-preview-multipart/mixed'.
1998-06-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-entity): Display entity-button
in body if button is invisible and body-presentation-method is not
found.
1998-06-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.5.0 (Nishi-Nyūzen) released.
* README.en (Required environment): Modify for FLIM 1.3.0.
1998-06-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-raw-write-region): New implementation; refer
`mime-raw-representation-type' or
`mime-raw-representation-type-alist' instead of
`mime-raw-buffer-coding-system-alist'.
* mime-view.el: Abolish variable
`mime-raw-buffer-coding-system-alist'.
1998-06-02 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-method-for-application/pgp): Use
`mime-raw-representation-type-alist' instead of
`mime-text-decoder-alist'; set up to
`mime-raw-representation-type' instead of `mime-text-decoder'.
* mime-play.el (mime-method-to-display-message/rfc822): Use
`mime-raw-representation-type-alist' instead of
`mime-text-decoder-alist'; set up to
`mime-raw-representation-type' instead of `mime-text-decoder'.
(mime-method-to-display-caesar): Use
`mime-text-insert-decoded-body'.
* mime-text.el (mime-raw-representation-type): New variable;
abolish `mime-text-decoder'.
(mime-text-insert-decoded-body): Change interface; refer
`mime-raw-representation-type' or
`mime-raw-representation-type-alist' instead of
`mime-text-decoder' or `mime-text-decoder-alist'; abolish function
`mime-text-decode-buffer' and `mime-text-decode-buffer-maybe'.
(mime-preview-text/plain): Modify for new interface of
`mime-text-insert-decoded-body'.
(mime-preview-text/richtext): Modify for new interface of
`mime-text-insert-decoded-body'.
(mime-preview-text/enriched): Modify for new interface of
`mime-text-insert-decoded-body'.
* mime-view.el (mime-raw-representation-type-alist): New variable;
abolish `mime-text-decoder-alist'.
1998-05-31 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el (mime-parse-multipart): fixed.
1998-06-01 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.4.6 (Nyūzen) released.
1998-05-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el (mime-text-insert-decoded-body): New function;
abolish 'mime-text-decode-body.
(mime-preview-text/plain): Use 'mime-text-insert-decoded-body.
(mime-preview-text/richtext): Use 'mime-text-insert-decoded-body.
(mime-preview-text/enriched): Use 'mime-text-insert-decoded-body.
1998-05-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-preview-condition): Set up for
'mime-preview-text/enriched instead of
'mime-preview-filter-for-text/enriched.
* mime-text.el (mime-preview-text/enriched): New function; abolish
'mime-preview-filter-for-text/enriched.
1998-05-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-preview-condition): Set up for
'mime-preview-text/richtext instead of
'mime-preview-filter-for-text/richtext.
* mime-text.el (mime-preview-text/richtext): New function; abolish
'mime-preview-filter-for-text/richtext.
1998-05-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Rename 'mime-view-insert-message/partial-button to
'mime-preview-message/partial-button.
1998-05-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-preview-condition): Set up for
'mime-preview-text/plain instead of
'mime-preview-filter-for-text/plain.
(mime-view-insert-message/partial-button): Change interface for
new spec of body-presentation-method.
(mime-view-display-entity): Change interface of
body-presentation-method.
* mime-text.el (mime-preview-text/plain): New function; abolish
'mime-preview-filter-for-text/plain.
1998-05-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el (make-mime-entity): Change format.
(mime-entity-header-start): New function.
(mime-entity-header-end): New function.
(mime-entity-body-start): New function.
(mime-entity-body-end): New function.
(mime-entity-content-type): Modify for new format.
(mime-entity-content-disposition): Modify for new format.
(mime-entity-encoding): Modify for new format.
(mime-entity-children): Modify for new format.
(mime-entity-point-min): Change to alias of
'mime-entity-header-start.
(mime-entity-point-max): Change to alias of 'mime-entity-body-end.
(mime-parse-multipart): Modify for 'make-mime-entity.
(mime-parse-message): Modify for 'make-mime-entity.
1998-05-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el (mime-parse-multipart): Change interface; abolish
local variable 'beg and 'end.
(mime-parse-message): Modify for 'mime-parse-multipart.
1998-05-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el (mime-parse-multipart): Use
'mime-content-type-parameter.
1998-05-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el (mime-parse-Content-Transfer-Encoding): New
function.
(mime-read-Content-Transfer-Encoding): Use function
'mime-parse-Content-Transfer-Encoding.
(mime-parse-message): Use 'mime-parse-* instead of 'mime-read-*.
1998-05-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el: Move 'regexp-* and 'regexp-or to mime-def.el of
FLIM (Chao); move 'std11-quoted-pair-regexp, 'std11-qtext-regexp
and 'std11-quoted-string-regexp to mime-def.el of FLIM (Chao).
1998-05-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el: Rename 'rfc822/quoted-string-regexp ->
'std11-quoted-string-regexp.
* mime-parse.el: Rename 'rfc822/qtext-regexp ->
'std11-qtext-regexp.
* mime-parse.el: Rename 'rfc822/quoted-pair-regexp ->
'std11-quoted-pair-regexp.
1998-05-29 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-view.el (mime-preview-scroll-down-entity): Use (not (bobp))
instead of (> (point) 1).
1998-05-25 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-play.el (mime-preview-play-current-entity): Don't widen.
1998-05-25 Katsumi Yamaoka <yamaoka@jpl.org>
* mime-play.el (mime-raw-play-entity): Abolish point correcting
procedures for VM.
* mime-play.el (mime-preview-play-current-entity): Do widen befor
playing the entity.
1998-05-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.4.5 (Tomari) released.
* README.en (Mailing lists): Add notice about direct-mail for
authors.
1998-05-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-raw-dired-function): Don't refer
'mime/use-multi-frame.
* semi-def.el: Abolish variable 'mime/use-multi-frame.
* semi-def.el (mime-insert-button): Merge arguments of two
'insert.
* semi-def.el: Abolish function 'get-version-string because it is
not used.
* TODO (Don't use filter-model): New item.
* TODO (Fix problem of dynamic configuration for
'mime-acting-condition): Done.
* TODO (Mother entity should modify preview-situation of
children): Done.
1998-05-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-setup-buffers): Use
'mime-view-display-entity; abolish 'mime-view-display-message.
(mime-view-display-entity): fixed.
1998-05-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-message): fixed.
1998-05-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-raw-get-subject): Use
'mime-content-disposition-filename.
* mime-parse.el (mime-content-type-parameter): New function.
* mime-parse.el (mime-content-disposition-parameter): New
function.
(mime-content-disposition-filename): New function.
1998-05-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-raw-get-original-filename): Abolish optional
argument 'encoding; modify for 'mime-raw-get-uu-filename.
* mime-view.el (mime-raw-get-uu-filename): Change interface; don't
check encoding.
(mime-raw-get-subject): Change interface; new implementation.
1998-05-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-entity): fixed.
* mime-parse.el (mime-parse-multipart): Change interface.
1998-05-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el (make-mime-entity): Add 'content-disposition.
(mime-entity-content-disposition): New function.
(mime-parse-multipart): Modify for 'make-mime-entity.
(mime-parse-message): Modify for 'make-mime-entity.
1998-05-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-raw-play-entity): Don't use
'mime-entity-media-type, 'mime-entity-media-subtype and
'mime-entity-parameters.
1998-05-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-entity): Don't use
'mime-entity-media-type, 'mime-entity-media-subtype and
'mime-entity-parameters.
1998-05-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-message): Don't use
'mime-entity-media-type, 'mime-entity-media-subtype and
'mime-entity-parameters.
1998-05-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-setup.el: Avoid warning message of byte-compiler.
1998-05-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.4.4 (Ecchū-Miyazaki) released.
* mime-play.el (mime-mailcap-method-filename-alist): New variable.
(mime-mailcap-method-sentinel): New function.
(mime-activate-mailcap-method): Use 'mime-mailcap-method-sentinel;
don't use 'mime-show-echo-buffer.
1998-05-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-activate-mailcap-method): Regard
'mime-temp-directory.
1998-05-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el (make-mime-entity): Change interface and
data-format.
(mime-entity-content-type): New access function.
(mime-entity-media-type): New implementation.
(mime-entity-subtype): New implementation.
(mime-entity-parameters): New implementation.
(mime-parse-multipart): Change interface; modify for
'make-mime-entity.
(mime-parse-message): Modify for 'make-mime-entity.
1998-05-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.4.3 (Ichiburi) released.
1998-05-12 Kazuhiro Ohta <ohta@ele.cst.nihon-u.ac.jp>
* mime-partial.el: start and end of the region fixed.
1998-05-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el (make-mime-content-type): New function.
(mime-parse-Content-Type): Use 'make-mime-content-type.
(mime-parse-multipart): Use 'make-mime-content-type.
1998-05-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el: Change data format of mime-content-disposition.
1998-05-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el: Rename 'mime/Content-Transfer-Encoding ->
'mime-read-Content-Transfer-Encoding.
1998-05-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-raw-get-subject): Use
'mime-content-disposition-parameters.
* mime-play.el (mime-raw-get-original-filename): Use
'mime-content-disposition-parameters.
* mime-parse.el (mime-content-disposition-type): New function.
(mime-content-disposition-parameters): New function.
1998-05-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el, mime-play.el, mime-view.el: Rename
'mime/Content-Disposition -> 'mime-read-Content-Disposition.
1998-05-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* Makefile (PACKAGE): New variable.
(tar): Use $(PACKAGE).
1998-05-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el: Change data format of mime-content-type.
1998-05-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-decode-buffer): Use
'mime-content-type-primary-type, 'mime-content-type-subtype and
'mime-content-type-parameters.
1998-05-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el (mime-content-type-primary-type): New function.
(mime-content-type-subtype): New function.
(mime-content-type-parameters): New function.
(mime-parse-message): Use 'mime-content-type-primary-type,
'mime-content-type-subtype and 'mime-content-type-parameters.
1998-05-10 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el: Abolish function 'symbol-concat because it is not
used.
1998-05-10 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.4.2 (Oyashirazu) released.
1998-05-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* README.en (Authors): New section.
* README.en (CVS based development): New section.
1998-05-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-preview-move-to-previous): Must regard
previous entity separated by null property region.
(mime-preview-move-to-next): Must regard next entity separated by
null property region.
1998-05-03 Simon Josefsson <jas@pdc.kth.se>
* mime-view.el (mime-preview-move-to-previous): check that new
prop is non-null
* mime-view.el (mime-preview-move-to-next): skip leading null
props, check that new prop is non-null
1998-05-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Use 'ctree-set-calist-with-default instead of
'ctree-set-calist-strictly to set up mailcap entries.
1998-05-06 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.4.1 (Åmi) released.
* README.en (Required environment): Modify for FLIM 1.2.0.
1998-05-06 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el: Move 'mime-type/subtype-string to
flim/mime-def.el.
1998-05-06 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-sort-situation): New function.
(mime-raw-play-entity): Use 'mime-sort-situation.
1998-05-06 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-activate-mailcap-method): Use
'mailcap-format-command.
1998-05-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* README.en (What's SEMI?): Add description about mailcap.
(Documentation): Add RFC 1524; change location of RFC.
1998-05-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.4.0 (Itoigawa) released.
* README.en (Required environment): Modify for FLIM 1.1.0.
* SEMI-CFG: Modify error message for FLIM 1.1.0.
1998-05-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* semi-def.el: Abolish 'mime/find-file-function because it is not
used.
1998-05-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* TODO (keymap-prefix): done.
(mailcap support): done.
(Change 'mime-acting-condition to condition-tree format): done.
(Unify entity display specifications to 'mime-preview-condition):
done.
1998-05-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS: Add description for SEMI 1.4.
1998-05-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Abolish setting for tm-sh-scripts.
* semi-setup.el: Abolish MUA depended signature setting.
* mail-mime-setup.el: Move setting for 'mail-signature from
semi-setup.el.
1998-05-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* semi-setup.el: Use 'mime-add-condition to set up for mime-pgp.
* mime-pgp.el: Abolish setting for 'mime-preview-condition and
mime-acting-condition.
* semi-def.el (mime-condition-type-alist): New variable.
(mime-condition-mode-alist): New variable.
(mime-add-condition): New function.
1998-05-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-acting-condition): Use
'ctree-set-calist-with-default to set up 'mime-method-to-save.
1998-05-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-acting-condition): Delete setting for
metamail.
1998-05-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-activate-mailcap-method): New function.
(mime-raw-play-entity): Use 'mime-activate-mailcap-method for
mailcap method.
* mime-view.el (mime-acting-condition): Read mailcap.
1998-05-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mailcap.el: Move mailcap.el to FLIM.
1998-05-02 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-raw-play-entity): Sort before registering to
'mime-acting-situation-examples.
1998-04-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.3.4 (Kajiyashiki) released.
1998-04-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-CFG: Modify messages for APEL 8.7.
* README.en (Required environment): Modify for APEL 8.7.
1998-04-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-find-every-acting-situation): Change
default value to 't.
1998-04-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-save-acting-situation-examples): New
function; set up for 'kill-emacs-hook.
* mime-play.el (mime-acting-situation-examples): Renamed from
'mime-user-acting-condition.
* mime-play.el: Load MIME acting-example file.
* mime-view.el (mime-acting-situation-examples-file): New
variable.
1998-04-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-raw-play-entity): Use
'ctree-match-calist-partially.
1998-04-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.3.3 (Uramoto) released.
1998-04-27 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-raw-play-entity): Refer
'mime-view-find-every-acting-situation.
* mime-view.el (mime-view): New customize group.
(mime-view-find-every-acting-situation): New variable.
1998-04-27 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-user-acting-condition): New variable.
(mime-raw-play-entity): Refer it.
1998-04-27 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-raw-play-entity): Get all available
acting-situations; display menu of methods to select
acting-situation to activate.
* semi-def.el (select-menu-alist): New function.
1998-04-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.3.2 (NÅ) was released.
* mime-edit.el (mime-edit-mode-entity-prefix): New variable.
(mime-edit-mode-entity-map): New variable.
(mime-edit-mode-enclosure-prefix): New variable.
(mime-edit-mode-enclosure-map): New variable.
(mime-edit-mode-map): Use 'mime-edit-mode-entity-map and
'mime-edit-mode-enclosure-map.
* mime-view.el (mime-acting-condition): Fix setting.
1998-04-24 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-raw-play-entity): Use 'ctree-match-calist
directly; abolish 'mime/get-content-decoding-alist.
1998-04-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.3.1 (Tsutsuishi) was released.
* mime-view.el (mime-preview-follow-current-entity): Abolish
unused local variable 'message-info.
1998-04-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-split-ignored-field-regexp): Add
Message-Id field.
1998-04-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mail-mime-setup.el: Must require 'alist.
1998-04-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.3.0 (Nadachi) was released.
1998-04-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* semi-def.el: Don't require 'atype; abolish function
'field-unifier-for-mode.
1998-04-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el: Use 'ctree-set-calist-strictly instead of
'set-atype to set up for 'mime-acting-condition.
* mime-play.el (mime/get-content-decoding-alist): Use
'ctree-match-calist instead of 'get-unified-alist.
* mime-view.el (mime-acting-condition): Change format from list of
atype to ctree.
1998-04-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.2.4 (Arimagawa) was released.
* NEWS: Modify for SEMI 1.2.4 (Arimagawa).
* mime-view.el (mime-view-display-message): Check 'message-button
is 'visible.
(mime-view-display-entity): Check 'header is 'visible.
1998-04-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Abolish variable
'mime-view-childrens-header-showing-Content-Type-list and function
'mime-view-header-visible-p.
(mime-preview-follow-current-entity): Don't use
'mime-view-header-visible-p.
1998-04-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-preview-condition): Don't display body of
message/rfc822 and message/news; add '(entity-button . invisible)
to default situation of child entity.
(mime-view-display-entity): Don't display entity-button if
'entity-button field value of preview-condition is 'invisible.
1998-04-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.2.3 (Tanihama) was released.
* mime-view.el: Abolish function 'mime-view-body-visible-p and
'mime-view-entity-separator-visible-p.
(mime-view-display-entity): Don't use
'mime-view-entity-separator-visible-p.
1998-04-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-preview-condition): Specify
'childrens-situation field for message/rfc822 and message/news.
(mime-view-display-message): Use value of 'childrens-situation
field of preview-situation as default-situation of children.
(mime-view-display-entity): Add new argument 'default-situation;
use it as elements of draft of preview-situation; use value of
'header field of preview-situation instead of
'mime-view-header-visible-p; use value of 'childrens-situation
field of preview-situation as default-situation of children.
1998-04-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.2.2 (Naoetsu) was released.
* README.en: Modify for FLIM.
1998-04-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-CFG: Modify messages for FLIM and APEL 8.2.
1998-04-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-CFG: Add "flim" instead of "rime" to 'load-path.
1998-04-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-calist::field-match-method-as-default-rule):
New function; setup for calist-field-match-method for 'header and
'body.
1998-04-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-preview-condition): Add (message-button
. visible) to application/pgp again.
1998-04-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-message): Abolish unused local
variable 'ctype.
(mime-view-display-entity): Abolish unused local variable 'ctype.
* mime-view.el (mime-view-display-message): Don't use
'mime-view-content-button-visible-ctype-list; abolish it.
1998-04-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-entity-button-visible-p): Omit to check
entity is not message.
(mime-view-header-visible-p): Omit to check entity is message.
(mime-view-setup-buffers): Call 'mime-view-display-message instead
of 'mime-view-display-entity.
(mime-view-display-message): New function.
(mime-view-display-entity): Abolish local variable
'entity-node-id; don't check entity is message or not.
1998-04-10 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-CFG: Add "rime" instead of "mel" to 'load-path.
1998-04-10 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-ELS (semi-modules-to-compile): Delete 'mime-def,
'eword-encode and 'eword-decode.
* mime-def.el, eword-encode.el, eword-decode.el: Abolish
mime-def.el, eword-decode.el and eword-encode.el; (moved to RIME).
1998-04-10 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el (regexp-or): Moved from semi-def.el.
* semi-def.el: Move 'regexp-or to mime-parse.el.
Move 'eliminate-top-spaces to mime-def.el.
* mime-def.el (eliminate-top-spaces): Moved from semi-def.el.
1998-04-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-ELS (semi-modules-to-compile): Add 'semi-def.
* semi-setup.el: Require 'semi-def instead of 'mime-def.
* mime-view.el: Require 'semi-def.
* mime-def.el: Move SEMI depended definitions to semi-def.el.
* semi-def.el: Move SEMI depended definitions from mime-def.el.
* eword-decode.el (eword-decode-version): Don't use
`mime-module-version'.
1998-04-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.2.1 (Nomachi) was released.
1998-04-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-setup-buffers): Don't use
'mime-raw-flatten-message-info.
(mime-view-display-entity): Display recursively.
1998-04-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* TODO: New file.
1998-04-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-decode.el (eword-decode-version): Use
`mime-module-version' instead of `semi-version'.
* mime-edit.el (mime-edit-version-string): Use
`mime-module-version' instead of `semi-version'.
* mime-view.el (mime-view-version-string): Use
`mime-module-version' instead of `semi-version'.
* mime-def.el (mime-module-version): New variable; abolish
`semi-version'.
1998-03-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.2.0 (Nishiizumi) was released.
* NEWS: Update for SEMI 1.2.
1998-03-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el: Rename 'mime-view-plain-text-preview-hook ->
'mime-preview-text/plain-hook.
* mime-text.el (mime-text-add-url-buttons): New function.
(mime-text-add-url-buttons-maybe): New function.
1998-03-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el, mime-text.el, mime-image.el: Rename
'mime-view-filter-for-* -> 'mime-preview-filter-for-*.
1998-03-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el: Rename 'mime-decode-text-body ->
'mime-text-decode-body.
1998-03-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el (mime-decode-text-body): Change interface; call
'mime-text-decode-hook.
1998-03-23 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* VERSION: New file.
1998-03-23 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.1.2 (Shin-Nishikanazawa) was released.
1998-03-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS: Modify about 'image-format.
* mime-image.el (mime-view-filter-for-image): Refer 'image-format
of preview-situation instead of 'mime-view-image-converter-alist;
abolish variable 'mime-view-image-converter-alist.
1998-03-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS: Modify about 'body-filter.
1998-03-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-image.el: Abolish 'mime-view-ps-to-gif-command.
* mime-image.el (mime-view-filter-for-image): Change interface.
Abolish `mime-view-filter-for-application/postscript'.
* mime-text.el (mime-view-filter-for-text/plain): Change
interface.
(mime-view-filter-for-text/richtext): Change interface.
(mime-view-filter-for-text/enriched): Change interface.
* mime-view.el (mime-view-display-entity): Change interface of
body-filter.
1998-03-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-image.el (mime-preview-condition): Set 'with-filter in
body-presentation-method for body-filter.
* mime-view.el (mime-view-display-entity): Call body-filter only
when body-presentation-method is 'with-filter.
1998-03-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-entity): Modify to omit check
for body-presentation-method.
1998-03-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS: Modify about `mime-preview-condition'.
1998-03-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-image.el: Set up for `mime-preview-condition' instead of
`mime-view-body-visible-condition' and
`mime-view-content-filter-alist'.
* mime-view.el (mime-preview-condition): New variable.
(mime-view-body-visible-p): Use `mime-preview-condition' instead
of `mime-view-body-visible-condition'; abolish variable
`mime-view-body-visible-condition'.
(mime-view-insert-message/partial-button): Add argument
`situation'.
(mime-view-display-entity): Use `mime-preview-condition' instead
of `mime-view-content-filter-alist'; don't hard-coding for
`message/partial-button'; abolish variable
`mime-view-content-filter-alist'.
1998-03-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el: Require 'mime-text when compiling.
1998-03-21 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
* eword-decode.el (eword-lexical-analyze-internal): Fixed return
value.
* mime-view.el (mime-view-body-visible-condition): text media-
type is always visible.
1998-03-20 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.1.1 (Oshino) was released.
* mime-play.el (mime-method-to-save): Must treat nil encoding as
7bit.
1998-03-20 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS: Update for latest version.
1998-03-20 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-CFG: Must set up load-path before version check codes.
1998-03-20 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Don't require mime-text.el; add autoload setting
for mime-text.el.
(mime-text-decoder-alist): moved from mime-text.el.
(mime-view-entity-separator-visible-p): New function.
Abolish `mime-view-display-header', `mime-view-display-body' and
`mime-view-entity-separator-function'.
* mime-text.el: Require mime-view (mime-text.el is autoloaded by
mime-view); variable `mime-text-decoder-alist' was moved to
mime-view.el.
* mime-play.el (mime-method-to-save): fixed.
1998-03-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* NEWS: New file.
1998-03-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.1.0 (Nonoichi) was released.
1998-03-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-method-to-verify-application/pgp-signature):
Abolish unused local-variable `raw-buf'.
* mime-play.el (mime-raw-play-entity): fixed.
* mime-view.el (mime-preview-original-window-configuration): Use
`defvar' to avoid warning of byte-compiler.
* mime-view.el (mime-view-display-entity): Don't use
`mime-view-entity-button-function' (abolish it); use
`mime-root-entity-p'.
1998-03-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-entity-button-visible-p): New function.
(mime-view-entity-button-function): Use function
`mime-view-entity-button-visible-p'.
* mime-view.el (mime-raw-entity-parent): New function.
(mime-view-entity-button-function): Use `mime-raw-entity-parent'.
* mime-view.el (mime-view-entity-button-function): Use
`mime-root-entity-p'.
* mime-parse.el (mime-root-entity-p): New function.
1998-03-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-CFG: Insert version check code.
1998-03-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-image.el: Set up `mime-view-body-visible-condition' instead
of `mime-view-visible-media-type-list'.
* mime-view.el (mime-view-body-visible-condition): New variable.
(mime-view-body-visible-p): Use `mime-view-body-visible-condition'
instead of `mime-view-visible-media-type-list'.
Abolish `mime-view-visible-media-type-list'.
* mime-parse.el (mime-type/subtype-string): New function.
(mime-entity-type/subtype): Use `mime-type/subtype-string'.
1998-03-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-method-to-verify-application/pgp-signature):
Use `mime-raw-write-region'.
* mime-view.el (mime-raw-buffer-coding-system-alist): Move setting
for mh-show-mode.
* mime-play.el, mime-view.el: Rename
`mime-raw-coding-system-alist' ->
`mime-raw-buffer-coding-system-alist'.
* mime-view.el, mime-play.el: Move `mime-raw-coding-system-alist'
from mime-play.el to mime-view.el.
1998-03-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-raw-point-to-entity-node-id): Use
`mime-raw-find-entity-from-point'.
(mime-raw-point-to-entity-number): Likewise.
* mime-view.el (mime-raw-find-entity-from-point): New function.
1998-03-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-body): Change interface.
1998-03-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el, mime-view.el: Rename `mime-view-entity-info' ->
`mime-view-entity'.
* mime-view.el: Rename `mime-raw-entity-number-to-entity-info' ->
`mime-raw-find-entity-from-number'.
* mime-pgp.el, mime-view.el: Rename
`mime-raw-entity-node-id-to-entity-info' ->
`mime-raw-find-entity-from-node-id'.
* mime-pgp.el, mime-partial.el, mime-play.el, mime-view.el,
mime-parse.el: Rename `mime-entity-info' -> `mime-entity'.
1998-03-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-header-visible-p): Change interface.
(mime-view-body-visible-p): Change interface.
* mime-view.el (mime-view-insert-entity-button): Change interface.
(mime-view-entity-button-function): Change interface.
* mime-view.el (mime-view-body-visible-p): Add DOC-string.
* mime-view.el: `rcnum' -> `entity-node-id'.
1998-03-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-method-to-verify-application/pgp-signature):
Don't use temporary buffer for signed entity.
* mime-pgp.el (mime-method-to-verify-application/pgp-signature):
Don't use temporary buffer for PGP-signature.
1998-03-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-method-to-verify-application/pgp-signature):
Use `write-region-as-binary'.
* mime-pgp.el (mime-method-to-verify-application/pgp-signature):
Use `mime-write-decoded-region'.
* mime-pgp.el: Rename `rmcnum' -> `mother-node-id'.
1998-03-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-method-to-decrypt-application/pgp-encrypted):
Use `mime-raw-point-to-entity-node-id'; abolish `entity-number'.
* (mime-method-to-verify-application/pgp-signature): Use
`mime-raw-point-to-entity-node-id'; abolish `entity-number'.
* mime-pgp.el (mime-method-to-verify-multipart/signed): Use
`mime-raw-point-to-entity-node-id'.
* mime-view.el (mime-raw-point-to-entity-node-id): New function.
* mime-view.el, mime-pgp.el: Rename `reversed-entity-number' ->
`entity-node-id'.
* mime-view.el, mime-parse.el: Rename `reversed-number' ->
`node-id'.
* mime-pgp.el: `rcnum' -> `reversed-entity-number'.
* mime-pgp.el: `cnum' -> `entity-number'.
* mime-pgp.el: `beg' -> `start'.
1998-03-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mailcap.el (mailcap-look-at-field): Change field-name to symbol.
1998-03-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mailcap.el (mailcap-look-at-type-field): Must allow
"implicit-wild".
(mailcap-look-at-field): fixed.
1998-03-13 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
* README.en (Bug reports): Modify description of tm mailing list.
1998-03-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el, mime-play.el: Rename
`mime-view-quitting-method-for-mime-show-message-mode' ->
`mime-preview-quitting-method-for-mime-show-message-mode'.
* mime-play.el, mime-edit.el, mime-view.el: Rename
`mime-view-quitting-method-alist' ->
`mime-preview-quitting-method-alist'.
1998-03-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el: Rename `mime-article::write-region' ->
`mime-raw-write-region'.
1998-03-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el, mime-play.el: Rename `mime-playback-entity' ->
`mime-raw-play-entity'.
* mime-play.el, mime-view.el: Rename `mime-view-cinfo' ->
`mime-view-entity-info'.
* mime-view.el, mime-parse.el: Rename `mime-entity-info-rnum' ->
`mime-entity-info-reversed-number'.
* mime-view.el: Rename `mime/flatten-content-info' ->
`mime-raw-flatten-message-info'.
* mime-pgp.el, mime-view.el: Rename `mime-raw-rcnum-to-cinfo' ->
`mime-raw-reversed-entity-number-to-entity-info'.
* mime-view.el: Rename `mime-raw-cnum-to-cinfo' ->
`mime-raw-entity-number-to-entity-info'.
* mime-pgp.el, mime-partial.el, mime-view.el: Rename
`mime-raw-entity-info' -> `mime-raw-message-info'.
* mime-play.el, mime-pgp.el, mime-view.el: Rename
`mime-raw-point-content-number' ->
`mime-raw-point-to-entity-number'.
1998-03-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el, mime-pgp.el, mime-view.el: Rename ` mime-article/'
-> `mime-raw-'.
* mime-view.el: Rename `mime-view-get-original-major-mode' ->
`mime-preview-original-major-mode'.
* mime-view.el: Rename `mime-view-display-x-face' ->
`mime-preview-display-x-face'.
* mime-play.el, mime-pgp.el, mime-bbdb.el, mime-view.el: Rename
`mime-view-buffer' -> `mime-preview-buffer'.
* mime-play.el, mime-view.el: Rename `mime::preview/' ->
`mime-preview-'.
* mime-view.el: Rename `mime-view-original-major-mode' ->
`mime-preview-original-major-mode'.
* mime-play.el, mime-edit.el, mime-view.el: Rename
`mime-view-kill-buffer' -> `mime-preview-kill-buffer'.
* mime-view.el: Rename `mime-view-show-summary' ->
`mime-preview-show-summary'.
* mime-view.el: Rename `mime-view-quit' -> `mime-preview-quit'.
* mime-view.el: Rename `mime-view-follow-current-entity' ->
`mime-preview-follow-current-entity'.
* mime-view.el: Rename `mime-view-print-current-entity' ->
`mime-preview-print-current-entity'.
* mime-view.el (mime-view-menu-list): Modify menu.
* mime-view.el: Rename `mime-view-extract-current-entity' ->
`mime-preview-extract-current-entity'.
* mime-def.el, mime-play.el, mime-view.el: Rename
`mime-view-play-current-entity' ->
`mime-preview-play-current-entity'.
* mime-view.el: Rename `mime-view-previous-line-content' ->
`mime-preview-previous-line-entity'.
* mime-view.el: Rename `mime-view-next-line-content' ->
`mime-preview-next-line-entity'.
* mime-view.el: Rename `mime-view-scroll-' ->
`mime-preview-scroll-'.
* mime-view.el: Rename `mime-view-move-to-' ->
`mime-preview-move-to-'.
* mime-play.el, mime-image.el: Rename `mime-preview/' ->
`mime-preview-'.
1998-03-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-partial.el (mime-method-to-combine-message/partial-pieces):
Rename `mime-raw-content-info' -> `mime-raw-entity-info'.
* mime-pgp.el, mime-view.el: Rename `mime-raw-content-info' ->
`mime-raw-entity-info'.
1998-03-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-raw-content-info): Modify DOC-string.
1998-03-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-encode.el: Abolish `eword-encode-RCS-ID'.
1998-03-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-partial.el: Rename
`mime-combine-message/partials-automatically' ->
`mime-method-to-combine-message/partial-pieces'.
1998-03-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-acting-condition): Separate type and subtype.
* mime-view.el (mime-acting-condition): Separate type and subtype.
* mime-play.el (mime-playback-entity): Separate type and subtype.
1998-03-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.0.2 (Nonoichi-KÅdaimae) was released.
1998-03-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el: Rename `mime-pgp-add-keys' ->
`mime-method-to-add-application/pgp-keys'.
* mime-pgp.el: Rename `mime-pgp-decrypt-application/pgp-encrypted'
-> `mime-method-to-decrypt-application/pgp-encrypted'.
* mime-pgp.el: Rename `mime-pgp-check-application/pgp-signature'
-> `mime-method-to-verify-application/pgp-signature'.
* mime-pgp.el: Rename `mime-check-multipart/signed' ->
`mime-method-to-verify-multipart/signed'.
* mime-pgp.el: Rename `mime-process-application/pgp' ->
`mime-method-for-application/pgp'.
1998-03-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mailcap.el (mailcap-look-at-type-field): Change type and subtype
to symbol.
* mailcap.el (mailcap-file): New variable.
(mailcap-parse-file): New function.
1998-03-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* README.en (What's SEMI?): Remove what does SEMI stand for.
1998-03-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-acting-condition): Use `mime-method-to-save'
instead of external method "tm-file".
* mime-play.el: Rename `mime-extract-current-entity' ->
`mime-method-to-save'.
1998-03-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-ELS (semi-modules-to-compile): Abolish mime-file.el.
* mime-play.el (mime-extract-current-entity): New function; copied
from mime-file.el; abolish mime-file.el.
* mime-view.el (mime-acting-condition), mime-partial.el
(mime-combine-message/partials-automatically), mime-play.el:
Rename `mime-display-message/partial' ->
`mime-method-to-store-message/partial'.
1998-03-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-acting-condition), mime-play.el: Rename
`mime-display-caesar' -> `mime-method-to-display-caesar'.
* mime-view.el (mime-acting-condition), mime-play.el: Rename
`mime-display-message/external-ftp' ->
`mime-method-to-display-message/external-ftp'.
* mime-view.el (mime-acting-condition), mime-play.el: Rename
`mime-display-message/rfc822' ->
`mime-method-to-display-message/rfc822'.
* mime-play.el: Rename `mime-article/make-method-args' ->
`mime-make-external-method-args'.
* mime-file.el: Fix setting.
1998-03-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el: Rename `mime-article/start-external-method-region'
-> `mime-activate-external-method'.
* mime-play.el, mime-pgp.el: Rename `mime-display-content' ->
`mime-playback-entity'.
* mime-file.el (mime-extract-current-entity): Use
`mime-write-decoded-region'.
* mime-file.el: Rename `mime-article/extract-file' ->
`mime-extract-current-entity'.
1998-03-03 Fran çois Pinard <pinard@iro.umontreal.ca>
* mime-edit.el (mime-edit-insert-signature): Function
`mime-edit-insert-tag' is sometimes called with more arguments
than it is ready to accept. (cf. [tm-en:1585])
1998-03-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-insert-text): New optional argument
`subtype'.
1998-02-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.0.1 (Magae) was released.
1998-02-27 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-check-multipart/signed): New function.
1998-02-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-decode.el (eword-decode-and-fold-structured-field): Fixed.
* mime-edit.el (mime-file-types): Use `defcustom'.
1998-02-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 1.0.0 (Nukajūtaku-mae) was released.
* SEMI-ELS: Remove mime-tar.el.
1998-02-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-decode.el (eword-decode-version): Use `semi-version';
abolish `eword-decode-RCS-ID'.
* mime-view.el (mime-view-version-string): Use `semi-version';
abolish `mime-view-version' and `mime-view-RCS-ID'.
* mime-edit.el (mime-edit-version-string): Use `semi-version';
abolish `mime-edit-version' and `mime-edit-RCS-ID'.
* mime-def.el (semi-version): New constant; abolish constant
`semi-version-name'.
* mime-view.el: Rename `mime-view-version-name' ->
`mime-view-version-string'.
* mime-edit.el: Rename `mime-edit-version-name' ->
`mime-edit-version-string'.
* eword-decode.el (eword-lexical-analyzers): New variable.
(eword-analyze-quoted-string): Add second argument.
(eword-analyze-domain-literal): New function.
(eword-analyze-spaces): New function.
(eword-analyze-special): New function.
(eword-analyze-atom): Add second argument.
(eword-lexical-analyze-internal): Use `eword-lexical-analyzers'.
1998-02-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.118.2 (Otomaru) was released.
* eword-decode.el (eword-decode-and-unfold-structured-field): New
function.
* eword-decode.el (eword-decode-and-fold-structured-field): New
function.
(eword-decode-structured-field-body): Use it.
(eword-decode-header): Likewise.
* eword-decode.el (eword-decode-structured-field-body): If
`START-COLUMN' is nil, it uses `mapconcat'.
* eword-decode.el (eword-decode-token): New function.
(eword-decode-structured-field-body): Add new optional arguments
`START-COLUMN' and `MAX-COLUMN'; fill results; use function
`eword-decode-token'.
(eword-decode-header): Specify START-COLUMN for
`eword-decode-structured-field-body'.
1998-02-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-decode.el (eword-decode-header): Unfold fields including
encoded-words.
* eword-decode.el (eword-decode-ignored-field-list): New variable.
(eword-decode-structured-field-list): New variable.
(eword-decode-header): Refer them.
* eword-decode.el (eword-decode-header): Don't use
`eword-decode-unstructured-field-body'.
1998-02-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-decode.el (eword-decode-header): New implementation; add
new argument `CODE-CONVERSION' as first argument. Change
`SEPARATOR' as second argument.
1998-02-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.118.1 (Shijima) was released.
* README.en (Bug reports): Modified for SEMI.
1998-02-06 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-normalize-body): Must not ignore case to
search "From " in beginning of line.
1998-01-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-image.el: Comment out setting for inline Postscript
feature.
1998-01-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-decode.el (eword-analyze-atom): New function.
(eword-lexical-analyze-internal): Use `eword-analyze-atom' instead
of `std11-analyze-atom'.
1997-11-26 Thierry Emery <Thierry.Emery@aar.alcatel-alsthom.fr>
* mime-edit.el (mime-edit-insert-text): Fix to avoid unexpected
entering enriched-mode. (cf. [tm-ja:2697])
1997-11-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.118 (Sodani) was released.
1997-11-24 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-maybe-hide-echo-buffer): bury MIME echo
buffer.
1997-11-23 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-maybe-hide-echo-buffer): New inline function;
abolish `mime-hide-echo-buffer'.
(mime-view-mode): Use `mime-maybe-hide-echo-buffer'.
1997-11-20 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el: Rename `mime-article/add-pgp-keys' ->
`mime-pgp-add-keys'.
* mime-pgp.el: Rename `mime-article/decrypt-pgp' ->
`mime-pgp-decrypt-application/pgp-encrypted'.
* mime-pgp.el: Rename `mime-article/check-pgp-signature' ->
`mime-pgp-check-application/pgp-signature'.
* mime-pgp.el: Rename `mime::article/call-pgp-to-check-signature'
-> `mime-pgp-check-signature'.
* mime-pgp.el: Rename `mime-article/view-application/pgp' ->
`mime-process-application/pgp'.
1997-11-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.116 (DÅhÅji) was released.
1997-11-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el, mime-pgp.el, mime-partial.el: Rename
`mime::article/content-info' -> `mime-raw-content-info'.
1997-11-11 Fran çois Pinard <pinard@iro.umontreal.ca>
* mime-edit.el: Modify space in prompt and removespurious trailing
spaces in the files. (cf. [tm-en:1507])
1997-11-08 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el: Rename `mime-edit-enclose-region' ->
`mime-edit-enclose-region-internal'.
* mime-edit.el (mime-edit-enclose-quote-region,
mime-edit-enclose-mixed-region, mime-edit-enclose-parallel-region,
mime-edit-enclose-digest-region,
mime-edit-enclose-alternative-region,
mime-edit-enclose-signed-region,
mime-edit-enclose-encrypted-region): Change subtype to symbol.
1997-11-06 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-bbdb.el, semi-setup.el: Use path-util.el instead of
file-detect.el.
1997-11-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-def.el: Add group `mime' to `default-mime-charset'.
1997-11-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-encode.el (eword-encode-field): Must regard MIME-Version
field as structured field.
1997-11-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.115.2 (Inokuchi) was released.
1997-11-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-split-message): Use `defcustom'.
(mime-edit-message-default-max-lines): Use `defcustom'.
(mime-edit-message-max-lines-alist): Use `defcustom'.
1997-11-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* Makefile: Abolish `execs' and `install-execs'.
1997-11-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit): New customize group.
(mime-ignore-preceding-spaces): Use `defcustom'.
(mime-ignore-trailing-spaces): Use `defcustom'.
(mime-ignore-same-text-tag): Use `defcustom'.
(mime-auto-hide-body): Use `defcustom'.
(mime-edit-voice-recorder): Use `defcustom'.
(mime-edit-mode-hook): Use `defcustom'.
(mime-edit-translate-hook): Use `defcustom'.
(mime-edit-exit-hook): Use `defcustom'.
* mime-def.el (mime): New customize group.
(mime-button-face): Use `defcustom'.
(mime-button-mouse-face): Use `defcustom'.
1997-11-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-x-emacs-value): Don't add mule-version
if enable-multibyte-characters is nil.
1997-10-31 Kazuhiro Ohta <ohta@ele.cst.nihon-u.ac.jp>
* mime-play.el (mime-article::write-region): fixed
(cf. [tm-ja:2641]).
1997-10-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* semi-setup.el (mime-setup-set-signature-key): Check local keymap
is exist or not to fix problem about
`gnus-summary-resend-message'.
1997-10-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.115.1 (Oyanagi) was released.
1997-10-03 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
* mime-play.el (mime-display-message/partial): Use `write-region'.
* mime-pgp.el (mime-article/check-pgp-signature): Use
`write-region'.
* mime-file.el (mime-article/extract-file): Use `write-region'.
1997-10-02 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-def.el: Don't use `third' (don't use cl function).
* SEMI-CFG: Add current directory to load-path.
* mime-def.el, mime-edit.el (mime-edit-insert-text): Rename
`second' -> `cadr' (Don't use cl function).
1997-09-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.115 (Hinomiko) was released.
* README.en: Modify for Emacs 20.2.
1997-09-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-def.el (butlast, nbutlast): Don't use `defun-maybe' for cl
functions.
1997-09-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-def.el (butlast): New function; imported from cl.el.
(nbutlast): New function; imported from cl.el.
1997-09-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-cut-header): Don't use `member-if'.
* mime-def.el: Don't require cl.
* eword-encode.el: Abolish variable `eword-generate-X-Nsubject'.
(eword-encode-header): Abolish X-Nsubject field generator.
* eword-encode.el (eword-find-field-encoding-method): New inline
function.
(eword-encode-header): Use it.
1997-09-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-image.el: Use `exec-installed-p' to search
`uncompface-program'.
1997-09-24 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
* signature.el: Add doc-string to `signature-file-alist'.
* mime-bbdb.el: Remove Artur Pioro from the authors list; Recent
versions don't contain his code.
1997-09-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Don't use cl.
(mime-article/rcnum-to-cinfo): New implementation (use function
`mime-article/cnum-to-cinfo'); use `defsubst'.
1997-09-18 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-x-emacs-value): Use `(featurep
'xemacs)'; add DOC-string.
1997-09-17 Hisashi Miyashita <himi@bird.scphys.kyoto-u.ac.jp>
* mime-edit.el (mime-edit-x-emacs-value): Add `(Meadow-version)'
when running Meadow. (cf. [tm-ja:2567], [mule-win32:4339])
1997-09-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-mime-version-field-for-message/partial):
New constant.
(mime-edit-insert-partial-header): Use it.
1997-09-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.112 (Tsurugi) was released.
1997-09-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-insert-entity-button): Change interface
to use `media-type' and `media-subtype' instead of `ctype'.
(mime-view-entity-button-function): ditto.
1997-09-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-body-visible-p): Change interface to use
`media-type' and `media-subtype' instead of `ctype'.
(mime-view-entity-separator-function): ditto.
1997-09-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-entity): Use `media-type' and
`media-subtype' instead of `ctype' to compare with
message/partial.
* mime-view.el (mime-view-follow-current-entity,
mime-view-display-entity, mime-view-entity-button-function): Use
`mime-entity-info-media-type' and `mime-entity-info-media-subtype'
instead of `mime-entity-info-type/subtype'.
1997-09-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el: Abolish macro `define-structure'.
(make-mime-entity-info, mime-entity-info-rnum,
mime-entity-info-point-min, mime-entity-info-point-max,
mime-entity-info-parameters, mime-entity-info-encoding,
mime-entity-info-children): New implementation.
(mime-entity-info-media-type, mime-entity-info-media-subtype): New
inline function.
* mime-view.el (mime-view-display-entity,
mime-article/point-content-number, mime-article/cnum-to-cinfo,
mime/flatten-content-info): Use `mime-entity-info-children'
instead of `mime::content-info/children'.
* mime-parse.el (mime-entity-info-children): New inline function.
1997-09-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-body-visible-p,
mime-view-display-entity): Use `mime-entity-info-encoding' instead
of `mime::content-info/encoding'.
* mime-play.el (mime-display-content): Use
`mime-entity-info-encoding' instead of
`mime::content-info/encoding'.
* mime-parse.el (mime-entity-info-encoding): New inline function.
1997-09-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-entity), mime-partial.el
(mime-combine-message/partials-automatically), mime-play.el
(mime-display-content): Use `mime-entity-info-parameters' instead
of `mime::content-info/parameters'.
* mime-parse.el (mime-entity-info-parameters): New inline
function.
1997-09-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-header-visible-p,
mime-view-body-visible-p, mime-view-entity-button-function,
mime-view-display-entity, mime-view-follow-current-entity),
mime-play.el (mime-display-content): Use
`mime-entity-info-type/subtype' instead of
`mime::content-info/type'.
* mime-parse.el (mime-entity-info-type/subtype): New inline
function.
1997-09-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-entity,
mime-article/rcnum-to-cinfo, mime-view-follow-current-entity,
mime-view-move-to-upper): Use `mime::content-info/rcnum' instead
of `mime-entity-info-rnum'.
* mime-parse.el (mime-entity-info-rnum): New inline function.
1997-09-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-display-entity,
mime-article/point-content-number,
mime-view-follow-current-entity), mime-play.el
(mime-display-content), mime-pgp.el
(mime-article/check-pgp-signature, mime-article/decrypt-pgp): Use
`mime-entity-info-point-{min|max}' instead of
`mime::content-info/point-{min|max}'.
* mime-parse.el (mime-entity-info-point-min): New inline function.
(mime-entity-info-point-max): New inline function.
(mime-parse-multipart): Use `mime-entity-info-point-max' instead
of `mime::content-info/point-max'.
1997-09-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mailcap.el (mailcap-skip-comment): Check `chr' is nil.
* mime-edit.el (mime-edit-decode-buffer): Modify for new return
format of `mime-parse-Content-Type'.
* mime-parse.el (mime-parse-Content-Type): Change return format.
(mime-read-Content-Type): Modify DOC-string.
(make-mime-entity-info): New inline function.
(mime-parse-multipart): Change interface.
(mime-parse-message): Rename names of arguments.
* mime-def.el (mime-tspecials): Remove `.' and control-characters.
(mime-token-regexp): Add specification for control-characters.
1997-09-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-cut-header): Use `defun' instead of
`defsubst'.
* mime-view.el: Rename `mime-preview/display-body' ->
`mime-view-display-body'.
* mime-view.el: Rename `mime-preview/display-header' ->
`mime-view-display-header'.
1997-09-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el, mime-edit.el: Rename `mime/Content-Type' ->
`mime-read-Content-Type'.
* mime-parse.el (symbol-concat): New implementation.
1997-08-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-def.el: Abolish alias `last*'.
* eword-decode.el (eword-lexical-analyze): `last' of Emacs 20.0.97
allows two arguments.
1997-08-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-decode.el (eword-lexical-analyze): Use `last*' instead of
`last' (for Emacs 20.0.96).
* mime-def.el (last*): New alias for old emacsen.
1997-07-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el, mime-def.el: Constant
`mime-disposition-type-regexp' was moved from mime-def.el to
mime-parse.el.
1997-07-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.97 (Naka-Tsurugi) was released.
1997-07-24 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el: Delete unnecessary "[mime-edit.el]" from
DOC-strings.
1997-07-23 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-decode.el (eword-analyze-encoded-word): cdr of return
value must not nil (cf.[tm-ja:2496])
1997-07-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el, mime-play.el: `mime-article/view-message/rfc822'
-> `mime-display-message/rfc822'.
1997-07-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-encode.el (eword-phrase-route-addr-to-rwl): Use function
`eword-addr-seq-to-rwl'.
* eword-encode.el: `tm-eword::phrase-route-addr-to-rwl' ->
`eword-phrase-route-addr-to-rwl'.
* eword-encode.el (eword-addr-seq-to-rwl): New function.
(eword-addr-spec-to-rwl): Use function `eword-addr-seq-to-rwl'.
* eword-encode.el (eword-addr-spec-to-rwl): New implementation.
* eword-encode.el: `tm-eword::addr-spec-to-rwl' ->
`eword-addr-spec-to-rwl'.
1997-07-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el: Constant `mime::ctype-regexp' was abolished.
* mime-parse.el: Constant `mime::dtype-regexp' was abolished.
* mime-parse.el, mime-def.el: `mime/disposition-type-regexp' ->
`mime-disposition-type-regexp'.
1997-07-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.96 (Kaga-Ichinomiya) was released.
1997-07-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el: (mime-edit-normalize-body):
- Protect "From " in beginning of line (insert `ESC ( B' before it
if possible, otherwise encode by quoted-printable)
- canonicalize line break code for base64
1997-07-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* signature.el (signature-separator): New variable.
(insert-signature): Insert `signature-separator' when signature is
inserted at end of file.
1997-07-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-version-name): Add `semi-version-name'.
* mime-view.el (mime-view-version-name): New constant.
* mime-def.el (semi-version-name): New constant.
1997-07-02 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* README.en (Required environment): Updated.
1997-07-02 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el, mime-def.el: `mime/content-type-subtype-regexp'
-> `mime-media-type/subtype-regexp'.
1997-07-02 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el, mime-def.el, mailcap.el: `mime/token-regexp' ->
`mime-token-regexp'.
* mime-def.el: `mime/tspecials' -> `mime-tspecials'.
1997-07-02 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el, mime-pgp.el, mime-def.el: `mime/temp-buffer-name'
-> `mime-temp-buffer-name'.
1997-07-02 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el (mime-decode-text-body): Canonicalize line break
code.
1997-06-27 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mailcap.el: New file.
1997-06-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-encode.el (eword-field-encoding-method-alist): Add
"Message-ID" as ignored.
1997-06-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-encode.el (tm-eword::encode-string-1): avoid infinite loop
caused by long non-encoded-word element. (cf. [tm-en:1356])
1997-06-24 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: `mime-preview/display-message/partial' ->
`mime-view-insert-message/partial-button'.
* mime-view.el (mime-preview/display-message/partial): Use
`mime-add-button' again.
1997-06-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-encode.el: `tm-eword::lc-words-to-words' ->
`eword-encode-charset-words-to-words'.
* eword-encode.el (tm-eword::lc-words-to-words): New
implementation; function `tm-eword::parse-word' was abolished.
1997-06-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-encode.el: `tm-eword::split-to-lc-words' ->
`eword-encode-divide-into-charset-words'.
* eword-encode.el: Function `tm-eword::parse-lc-word' was
abolished.
(tm-eword::split-to-lc-words): New implementation.
1997-06-21 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-encode.el: `tm-eword::char-type' ->
`eword-encode-char-type'.
* eword-encode.el: `tm-eword::encode-encoded-text' ->
`eword-encode-text'
* mime-view.el (mime-view-insert-entity-button,
mime-preview/display-message/partial): Use `mime-insert-button'.
(mime-view-setup-buffers): Enclose codes to display preview-buffer
by `(let ((inhibit-read-only t)) ...)'.
* mime-def.el (mime-insert-button): New inline function.
* mime-def.el (mime-add-button): Argument `func' was renamed to
`function'; Use overlay for `mime-button-mouse-face'.
1997-06-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.92 was released.
* mime-view.el, mime-play.el, mime-partial.el:
`mime-article/decode-' -> `mime-display-'.
* mime-play.el (mime-display-caesar): fixed.
1997-06-18 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-decode.el (eword-decode-structured-field-body): fixed.
1997-06-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-decode.el (eword-lexical-analyze-cache): New variable.
(eword-lexical-analyze-cache-max): New variable.
(eword-analyze-quoted-string): New function.
(eword-analyze-comment): New function.
(eword-analyze-encoded-word): New function.
(eword-lexical-analyze-internal): New function.
(eword-lexical-analyze): New function.
(eword-decode-structured-field-body): New function.
(eword-decode-unstructured-field-body): New function.
(eword-extract-address-components): New function.
1997-06-11 Steven L Baur <steve@xemacs.org>
* eword-encode.el (tm-eword::char-type, tm-eword::encode-rwl,
tm-eword::encode-rwl): Clean up Ebola
infection. (cf.[tm-en:1346],[xemacs-beta:9333])
1997-05-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.91 was released.
Wed May 28 13:16:15 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-define-keymap): fixed problem about
[tab], [delete] and [backspace] keys.
Tue May 27 03:26:23 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-sign-pgp-elkins): Enclose PGP-processing
by `as-binary-process'.
1997-05-23 Steven L Baur <steve@altair.xemacs.org>
* mime-view.el (mime-acting-condition): Add image/png
mime type. (cf.[tm-en:1334])
* mime-image.el: Add image/png mime type. (cf.[tm-en:1334])
* mime-edit.el (mime-file-types): Add png handling.
(mime-content-types): Ditto. (cf.[tm-en:1334])
Fri May 23 22:13:47 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-define-keymap): Doesn't bind
`beginning-of-buffer' and `end-of-buffer' for "<" and ">" keys.
1997-05-15 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.88 was released.
Thu May 15 06:05:13 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* Makefile (tar): New implementation.
Tue May 13 14:32:39 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-MK (config-semi): fixed.
* SEMI-CFG: Add site-lisp/apel/ even if LISPDIR is specified.
Tue May 13 14:11:48 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* README.en: Add `LISPDIR'.
* Makefile (LISPDIR): New variable.
* SEMI-CFG: Setting for load-path is modified.
Mon May 12 12:30:42 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-tar.el, mime-play.el, mime-pgp.el, mime-file.el,
mime-view.el: `mime/content-decoding-condition' ->
`mime-acting-condition'.
1997-05-09 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.87 was released.
Fri May 9 04:19:21 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-tar.el: `mime-viewer/uuencode-encoding-name-list' ->
`mime-view-uuencode-encoding-name-list'.
Fri May 9 03:07:02 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el: Use "text/x-rot13-47-48" instead of
"text/x-rot13-47".
* mime-view.el (mime/content-decoding-condition): Add
"text/x-rot13-47-48".
Fri May 9 01:26:13 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-normalize-body): Use
`mule-caesar-region' instead of `caesar-region'.
* mime-play.el (mime-display-caesar): Use `mule-caesar-region'
instead of `caesar-region'.
* mime-def.el: Add autoload for mule-caesar.el.
* mime-def.el: Function caesar-region was abolished.
Thu May 8 23:31:45 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el, mime-edit.el, mime-def.el: `tm:caesar-region' ->
`caesar-region'.
Thu May 8 22:37:47 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-define-keymap): Use
`set-keymap-default-binding' for XEmacs.
Wed May 7 10:04:36 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-display-caesar): Don't use
`buffer-substring'.
* mime-play.el (mime-display-caesar): Use `view-buffer' instead of
`view-mode-enter'.
Wed May 7 09:37:54 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el: Don't require `view'.
Constant `mime-view-text/plain-mode-map' was abolished.
Function `mime-view-text/plain-mode' and
`mime-view-text/plain-exit' were abolished.
(mime-display-caesar): Use `view-mode-enter mother' instead of
`mime-view-text/plain-mode'.
Wed May 7 09:33:48 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el, mime-view.el (mime/content-decoding-condition):
`mime-article/decode-caesar' -> `mime-display-caesar'.
Wed May 7 05:49:03 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-cut-header): fixed. (cf.[tm-ja:2386])
1997-04-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI: Version 0.83 was released.
Sat Apr 5 06:20:34 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-def.el: Overlay is required by emu.
Thu Apr 3 18:09:35 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-image.el, mime-view.el, mime-text.el:
`mime-preview/filter-' -> `mime-view-filter-'.
* mime-view.el: `mime-preview/get-original-major-mode' ->
`mime-view-get-original-major-mode'.
Thu Mar 27 22:16:53 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-mode): Hide mime-echo window.
* mime-view.el: Function `mime-hide-echo-buffer' was moved from
mime-play.el.
* mime-play.el: Function `mime-hide-echo-buffer' was moved to
mime-view.el.
* mime-play.el (mime-hide-echo-buffer): New inline function.
* mime-play.el (mime-echo-window-height): New variable.
Thu Mar 27 21:48:32 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-content-end): Abolish unused local
variable `beg'.
Thu Mar 27 21:45:49 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-follow-current-entity): Abolish unused
local variable `rc'.
Thu Mar 27 21:42:08 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-encode.el (eword-encode-field): Intern down-cased
field-name and use `memq' instead of `member' to detect a field is
address-list or not.
Thu Mar 27 21:17:25 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-article/check-pgp-signature): Use
`insert-buffer-substring'.
Thu Mar 27 20:59:00 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-article/check-pgp-signature):
`mime-article/show-output-buffer' -> `mime-show-echo-buffer'.
* mime-play.el: `mime-article/show-output-buffer' ->
`mime-show-echo-buffer'.
* mime-play.el: `mime/output-buffer-window-is-shared-with-bbdb' ->
`mime-echo-window-is-shared-with-bbdb'.
Thu Mar 27 20:47:14 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el: Variable
`mime/output-buffer-window-is-shared-with-bbdb' was moved from
mime-def.el.
* mime-def.el: Variable
`mime/output-buffer-window-is-shared-with-bbdb' was moved to
mime-play.el.
Thu Mar 27 20:40:57 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-mode): `mime/output-buffer-name' ->
`mime-echo-buffer-name'.
* mime-play.el: `mime/output-buffer-name' ->
`mime-echo-buffer-name'.
* mime-pgp.el (mime-article/check-pgp-signature):
`mime/output-buffer-name' -> `mime-echo-buffer-name'.
* mime-def.el (mime-echo-buffer-name): Renamed from
`mime/output-buffer-name'.
Fri Mar 21 17:55:10 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-content-end): Abolish unused local
variable `top'.
* mime-view.el: Function `mime-view-make-preview-buffer' was
abolished.
* mime-view.el: `mime-view-setup-buffer' ->
`mime-view-setup-buffers'.
1997-03-18 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* MU: Version 0.40.2 was released.
* SEMI: Version 0.75 was released.
Tue Mar 18 15:28:25 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-edit-translate-single-part-tag): Add
DOC-string.
Tue Mar 18 15:21:28 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: `mime::preview/original-major-mode' ->
`mime-view-original-major-mode'.
Tue Mar 18 15:17:48 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el, mime-view.el: `mime::preview/mother-buffer' ->
`mime-mother-buffer'.
Tue Mar 18 15:12:10 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el, mime-play.el, mime-edit.el, mime-view.el:
`mime::preview/article-buffer' -> `mime-raw-buffer'.
Tue Mar 18 14:47:23 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-tar.el, mime-play.el, mime-pgp.el, mime-bbdb.el,
mime-view.el: `mime::article/preview-buffer' ->
`mime-view-buffer'.
Tue Mar 18 14:32:53 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Structure `mime::preview-content-info' was
abolished.
(mime-view-setup-buffer): Return only
`mime::article/preview-buffer'.
(mime-view-make-preview-buffer): Don't generate
preview-content-list; Return only `mime::article/preview-buffer'.
(mime-view-display-entity): Don't create
`mime::preview-content-info'.
(mime-view-mode): Don't set for `mime::preview/content-list'.
Tue Mar 18 13:56:18 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-partial.el (mime-combine-message/partials-automatically):
Don't use preview-content-list.
Tue Mar 18 13:06:09 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* semi-setup.el: Don't require mime-partial; It is autoloaded.
* mime-partial.el: `mime-article/grab-message/partials' ->
`mime-combine-message/partials-automatically'.
* mime-partial.el: `mime-partial/preview-article' ->
`mime-view-partial-message'.
* mime-partial.el: `mime-partial/preview-article-method-alist' ->
`mime-view-partial-message-method-alist'.
* mime-play.el
(mime-view-quitting-method-for-mime-show-message-mode): Don't use
preview-content-list.
* mime-text.el (mime-text-decoder-alist): `mime/show-message-mode'
-> `mime-show-message-mode'.
* mime-pgp.el (mime-article/view-application/pgp):
`mime/show-message-mode' -> `mime-show-message-mode'.
* mime-view.el (mime-view-follow-current-entity): New
implementation.
Tue Mar 18 08:24:07 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: `mime-view-follow-content' ->
`mime-view-follow-current-entity'.
* mime-view.el (mime-view-mode): Don't use preview-content-list to
move to initial point.
* mime-view.el: Function `mime-preview/cinfo-to-pcinfo' was
abolished.
* mime-view.el: Function `mime-preview/point-pcinfo' was
abolished.
* mime-view.el: Function `mime-preview/point-content-number' was
abolished.
* mime-play.el (mime-view-play-current-entity): New
implementation.
Mon Mar 17 17:18:29 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-quit): Use variable
`mime::preview/original-major-mode'.
* mime-view.el (mime-view-show-summary): Use variable
`mime::preview/original-major-mode'.
* mime-view.el (mime-view-scroll-down-entity): New implementation.
* mime-view.el (mime-view-scroll-up-entity): New implementation.
Mon Mar 17 16:19:30 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: `mime-view-scroll-down-content' ->
`mime-view-scroll-down-entity'.
* mime-view.el: `mime-view-scroll-up-content' ->
`mime-view-scroll-up-entity'.
* mime-view.el (mime-view-move-to-next): New implementation.
Mon Mar 17 16:03:11 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: `mime-view-next-content' ->
`mime-view-move-to-next'.
* mime-view.el (mime-view-move-to-previous): New implementation.
* mime-view.el: `mime-view-previous-content' ->
`mime-view-move-to-previous'.
* mime-view.el: `mime-view-up-content' ->
`mime-view-move-to-upper'.
Mon Mar 17 15:39:17 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el, mime-play.el: `mime/show-message-mode' ->
`mime-show-message-mode'.
* mime-view.el (mime-view-up-content): New implementation.
* mime-view.el: `mime-preview/display-content' ->
`mime-view-display-entity'.
* mime-view.el (mime-preview/display-content): Put
`mime-view-raw-buffer' and `mime-view-cinfo' as text-property.
* mime-view.el: Variable `mime-view-visible-field-regexp' was
abolished.
* mime-view.el: `mime-preview/cut-header' ->
`mime-view-cut-header'.
* mime-view.el (mime-view-entity-separator-function): New
implementation.
* mime-view.el: `mime-preview/default-content-separator' ->
`mime-view-entity-separator-function'.
Mon Mar 17 13:49:27 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-view-header-visible-p): Abolish optional
argument `ctype'.
* mime-view.el (mime-view-entity-button-function): New
implementation.
* mime-view.el: Variable
`mime-view-content-button-ignored-ctype-list' was abolished.
* mime-view.el: `mime-preview/default-content-button-function' ->
`mime-view-entity-button-function'.
* mime-view.el: Variable `mime-preview/content-button-function'
was abolished.
* mime-def.el (mime-add-button): New implementation.
* mime-view.el (mime-view-insert-entity-button): modified.
* mime-view.el: `mime-preview/insert-content-button' ->
`mime-view-insert-entity-button'.
* mime-view.el (mime-view-header-visible-p): Don't calculate ctype
is optional argument `ctype' is not nil.
Mon Mar 17 12:12:01 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: `mime-print-entity' ->
`mime-view-print-current-entity'.
* mime-view.el: `mime-extract-entity' ->
`mime-view-extract-current-entity'.
* mime-play.el, mime-view.el: `mime-play-entity' ->
`mime-view-play-current-entity'.
* mime-view.el (mime-play-entity, mime-extract-entity,
mime-print-entity): Add DOC-string.
* mime-view.el: `mime-view-print-content' -> `mime-print-entity'.
* mime-view.el: `mime-view-extract-content' ->
`mime-extract-entity'.
* mime-play.el: Variable `mime-view-decoding-mode' was abolished.
* mime-play.el: Variable `mime-view-decoding-mode' was moved from
mime-view.el.
* mime-view.el: Variable `mime-view-decoding-mode' was moved to
mime-play.el.
Mon Mar 17 05:09:05 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el: Use `mime-play-entity' instead of
`mime-view-play-content'.
Mon Mar 17 05:06:33 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el, mime-play.el: `mime-preview/decode-content' ->
`mime-play-entity'.
* mime-view.el (mime-view-play-content, mime-view-extract-content,
mime-view-print-content): Modify to use optional argument `mode'.
Mon Mar 17 04:41:21 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el (mime-preview/decode-content,
mime-article/decode-content): Add new optional argument `mode'.
Sun Mar 16 02:23:31 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el: `mime-charset/maybe-decode-buffer' ->
`mime-text-decode-buffer-maybe'.
* mime-text.el: `mime-preview/decode-text-buffer' ->
`mime-decode-text-body'.
* mime-view.el (mime-view-visible-media-type-list): Add
"text/rfc822-headers".
Sun Mar 16 01:02:03 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-image.el, mime-view.el:
`mime-view-default-showing-Content-Type-list' ->
`mime-view-visible-media-type-list'.
Sun Mar 16 00:22:03 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el: `mime-raw::text-decoder' -> `mime-text-decoder'.
* mime-pgp.el (mime-article/view-application/pgp):
`mime-charset/decode-buffer' -> `mime-text-decode-buffer'.
* mime-text.el: `mime-charset/decode-buffer' ->
`mime-text-decode-buffer'.
Sat Mar 15 23:59:09 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-article/view-application/pgp):
`mime-raw::text-decoder' -> `mime-text-decoder'.
* mime-text.el: `mime-raw::text-decoder' -> `mime-text-decoder'.
Sat Mar 15 23:53:49 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el: Variable `mime-raw::text-decoder' was moved from
mime-view.el.
* mime-view.el: Variable `mime-raw::text-decoder' was moved to
mime-text.el.
Sat Mar 15 22:40:50 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-article/view-application/pgp): Use
`insert-buffer-substring'.
Sat Mar 15 22:27:53 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-article/view-application/pgp):
`mime::article/code-converter' -> `mime-raw::text-decoder'.
* mime-play.el (mime-article/view-message/rfc822):
`mime::article/code-converter' -> `mime-raw::text-decoder'.
* mime-text.el (mime-preview/decode-text-buffer):
`mime::article/code-converter' -> `mime-raw::text-decoder'.
* mime-view.el: `mime::article/code-converter' ->
`mime-raw::text-decoder'.
Sat Mar 15 21:20:02 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el (mime-article/add-pgp-keys): Abolish unused local
variables `charset' and `mime::article/preview-buffer'.
* mime-pgp.el (mime-article/add-pgp-keys): Abolish unused local
variable `mode'.
Sat Mar 15 21:10:43 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-image.el (mime-preview/filter-for-image): Abolish unused
local variable `charset'.
* mime-pgp.el (mime-article/check-pgp-signature): Abolish unused
local variable `status'.
* mime-pgp.el: (mime-article/view-application/pgp,
mime-article/add-pgp-keys): Abolish unused local variable
`cur-buf'.
* mime-image.el (mime-preview/filter-for-image,
mime-preview/filter-for-application/postscript): Abolish unused
local variable `mode'.
Sat Mar 15 20:56:19 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el
(mime-preview/filter-for-text/richtext,
mime-preview/filter-for-text/enriched): Abolish unused local
variable `mode'.
* mime-text.el (mime-preview/decode-text-buffer): New
implementation.
* mime-view.el (mime-view-follow-content): Abolish unused
variables `f', `mid', `subj', `reply-to', `cc', `to', `from', `he'
and `hb'.
* mime-edit.el (mime-edit-goto-tag): Abolish unused variable
`multipart'.
* mime-file.el (mime-article/extract-file): Abolish unused local
variable `the-buf'.
* mime-tar.el: Quote *autoconv*.
Sat Mar 15 20:29:25 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-partial.el (mime-article/grab-message/partials): Unused
local variable `mother' was abolished.
* mime-play.el (mime-article/decode-caesar): Unused local variable
`cur-buf' was abolished.
* mime-play.el (mime-article/decode-message/external-ftp): Unused
local variable `access-type' was abolished; Comment out `mode'.
* mime-play.el (mime-article/view-message/rfc822): Unused local
variable `cur-buf' was abolished.
* mime-text.el (mime-preview/filter-for-text/richtext,
mime-preview/filter-for-text/enriched): Unused local variable `m'
was abolished.
* mime-parse.el (mime-parse-multipart):
Unused local variable `ct' was abolished.
* eword-encode.el: Require eword-decode.
* mime-image.el (mime-preview/filter-for-application/postscript):
Unused local variable `m' was abolished.
Sat Mar 15 19:47:27 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el: (mime-article/view-application/pgp):
`mime-viewer/code-converter-alist' -> `mime-text-decoder-alist'.
* mime-pgp.el (mime-pgp-command): New variable.
(mime::article/call-pgp-to-check-signature): Use variable
`mime-pgp-command'. (cf. [tm-en:1259])
Sat Mar 15 19:25:25 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-pgp.el: `mime/viewer-mode' -> `mime-view-mode'.
(cf. [tm-en:1259])
1997-03-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* emu: Version 7.40.1 was released.
* APEL: Version 3.2 was released.
* bitmap-mule: Version 7.17 was released.
* MU: Version 0.40.1 was released.
* MEL: Version 6.3 was released.
* SEMI: Version 0.72 was released.
Fri Mar 14 08:48:07 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-ELS (semi-modules-to-compile): Add mail-mime-setup.el.
Fri Mar 14 08:47:06 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mail-mime-setup.el: New module.
* mime-setup.el: Only loads MUA specific setup files.
* semi-setup.el: Setting for mime-edit, signature and mu-cite were
moved from mime-setup.el.
* semi-setup.el: Setting for gnus-mime was moved to
gnus-mime/gnus-mime-setup.el.
* semi-setup.el: Setting for mh-e was moved to emh/emh-setup.el.
* Makefile: modified for SEMI package.
Fri Mar 14 07:42:44 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-MK: Don't compile and install other packages.
Fri Mar 14 06:09:23 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el: Definition of `mime-edit-mode' must be previous to
`add-minor-mode'.
* mime-image.el (mime-preview/filter-for-image): Don't use
`assoc-value'.
Fri Mar 14 04:49:04 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el: Variable `mime-edit-prefix' and `mime-edit-map'
were abolished; Use `mime-edit-mode-map' directly.
Use "C-c C-m" for enclosure commands.
Add new binding "C-c C-x s" for `mime-edit-set-sign', "C-c C-x e"
for `mime-edit-set-encrypt'.
Fri Mar 14 04:41:27 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* semi-setup.el: Require file-detect.
Wed Mar 12 07:49:41 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-CFG: Delete variables about other packages.
Mon Mar 10 15:16:26 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-def.el: Variable `mime-temp-directory' was moved to
mel/mel.el.
1997-03-10 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-ELS (semi-modules-to-compile): Delete `mime-ftp'.
* mime-view.el (mime/content-decoding-condition): Set up for
`mime-article/decode-message/external-ftp'.
* semi-setup.el: tm-latex.el was abolished.
* semi-setup.el: tm-ftp is merged to mime-play.el.
* mime-play.el (mime-article/dired-function): New variable; copied
from tm-ftp.el.
(mime-article/dired-function-for-one-frame,
mime-article/decode-message/external-ftp): New function; copied
from tm-ftp.el.
1997-03-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-partial.el (mime-article/grab-message/partials): Don't use
`assoc-value'.
1997-03-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-play.el: Require filename.
1997-03-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-setup.el: Don't check `(boundp 'epoch::version)'.
* mime-setup.el: Use `turn-on-mime-edit' instead of
`mime-edit-mode'.
* mime-edit.el (mime-edit-decode-buffer): Renamed from
`mime-editor::edit-again'; optional argument `code-conversion' was
changed to `not-decode-text' (behavior was reversed).
(mime-edit-again): modified for `mime-edit-decode-buffer'.
* mime-edit.el (mime-edit-again-ignored-field-regexp): New
variable.
* mime-edit.el (mime-edit-again): optional argument
`code-conversion' was changed to `not-decode-text' (behavior was
reversed); optional argument `no-mode' was renamed to
`not-turn-on'; `mail-header-separator' was replaced to null line
before converting.
1997-03-07 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el: `mime-edit-mode' -> `turn-on-mime-edit';
`mime-edit-toggle-mode' -> `mime-edit-mode'.
Alias `mime-mode' was abolished.
1997-03-06 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-encode.el (eword-encode-header): fixed.
* mime-edit.el: Comments was modified.
(mime-edit-mode): DOC-string was modified.
* mime-edit.el: Function `mime-edit-define-menu-for-emacs19' was
abolished. Buffer local variable `mime-edit-mode-old-local-map'
was abolished.
* mime-edit.el: `mime-edit-minor-mime-map' ->
`mime-edit-mode-map'.
* mime-edit.el: `mime-edit-mime-map' -> `mime-edit-map'.
* mime-edit.el: Function `mime-edit-define-keymap' was abolished.
1997-03-06 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el: `mime-prefix' -> `mime-edit-prefix'.
1997-03-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* semi-setup.el: tm-pgp.el was already renamed to mime-pgp.el.
1997-03-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-def.el (pgp-function-alist): `tm:mc-' -> `mime-mc-'.
1997-03-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-def.el (mime-temp-directory): Refer environment variable
"MIME_TMP_DIR" as default value.
1997-03-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-ELS (semi-modules-to-compile): tm-latex.el and tm-html.el
were abolished.
* mime-tar.el (mime-decode-message/tar), mime-play.el, mime-pgp.el
(mime-article/check-pgp-signature), mime-partial.el
(mime-article/grab-message/partials), mime-image.el, mime-edit.el
(mime-edit-split-and-send), mime-def.el: Variable `mime/tmp-dir'
was renamed to `mime-temp-directory'.
* mime-edit.el: `mime/edit-again' was renamed to
`mime-edit-again'.
1997-03-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-text.el, mime-edit.el: `mime/temporary-message-mode' was
renamed to `mime-temp-message-mode'.
* mime-edit.el: Draft preview feature was abolished.
* mime-edit.el (mime-transfer-level-string): Fixed DOC-string.
Buffer local variable `mime/editing-buffer' was renamed to
`mime-edit-buffer'.
* mime-edit.el (mime-edit-insert-x-emacs-field): New variable.
(mime-edit-x-emacs-value): New variable.
(mime-edit-translate-body): Insert X-Emacs field if variable
`mime-edit-insert-x-emacs-field' is not nil.
1997-03-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-view.el (mime-preview/insert-content-button): Don't use
function `assoc-value'.
1997-03-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-bbdb.el: `mime-bbdb-' -> `mime-bbdb/'.
1997-03-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-MK: compile and install emu and apel.
1997-03-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-ELS: tm-bbdb.el was renamed to mime-bbdb.el.
* mime-bbdb.el: Renamed from tm-bbdb.el.
* SEMI-CFG (EMU_PREFIX, EMU_DIR): New variable.
(APEL_PREFIX, APEL_DIR, APEL_RELATIVE_DIR): New variable.
(load-path): Add "../apel" instead of "../tl".
* SEMI-ELS: alist.el was moved to ../apel/.
1997-03-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-parse.el: Require emu; Function `char-list-to-string' was
abolished.
* mime-edit.el: Require emu; definitions about visible/invisible
were abolished.
1997-03-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-encode.el: Require emu; function
`find-non-ascii-charset-string' and
`find-non-ascii-charset-region' were abolished.
* mime-def.el: Require atype; functions about atype were
abolished.
1997-03-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-def.el: Require emu; Variable `running-xemacs' was
abolished; Macro `defun-maybe' was abolished; Function `functionp'
was abolished; Variable `charsets-mime-charset-alist',
`default-mime-charset' and `mime-charset-coding-system-alist' were
abolished; Function `mime-charset-to-coding-system',
`charsets-to-mime-charset', `detect-mime-charset-region',
`encode-mime-charset-region', `decode-mime-charset-region',
`encode-mime-charset-string' and `decode-mime-charset-string' were
abolished.
Sat Mar 1 04:12:37 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-def.el (charsets-to-mime-charset): New function; copied
from emu.el.
* eword-encode.el: Use `char-bytes' instead of `char-length'.
* mime-def.el (eliminate-top-spaces): New inline-function; copied
from tl-str.el.
* mime-edit.el: Fixed about definition of visible/invisible
functions for XEmacs.
Sat Mar 1 03:39:01 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-edit.el (enable-invisible, end-of-invisible): New macro;
copied from emu-19.el.
(invisible-region, invisible-p, next-visible-point): New function;
copied from emu-19.el and emu-xemacs.el.
(visible-region): New function; copied from emu-19.el.
* mime-edit.el (mime-edit-make-boundary): New function.
(mime-edit-translate-body, mime-edit-translate-region): Use
`mime-edit-make-boundary'.
* mime-edit.el (replace-space-with-underline): New inline
function; copied from tl-str.el.
Sat Mar 1 02:07:00 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* eword-encode.el (find-non-ascii-charset-region): New
inline-function; copied from emu-e20.el.
Fri Feb 28 06:46:48 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-def.el: Require cl.
* mime-view.el (mouse-button-2): New variable; copied from
emu-19.el and emu-xemacs.el.
* mime-def.el (defun-maybe): New macro; copied from emu.el.
(functionp): New function; copied from emu.el.
Fri Feb 28 05:14:54 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-play.el: Supports only Emacs/mule API.
* mime-def.el (field-unify): Fixed.
* semi-setup.el: Don't require mime-play.
* mime-def.el: Function `put-fields' were abolished.
* mime-def.el: atype functions were moved from mime-play.el.
* mime-play.el: atype functions were moved to mime-def.el.
Fri Feb 28 04:50:13 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-def.el (call-after-loaded): New function; moved from
semi-setup.el.
* semi-setup.el: Function `call-after-loaded' was moved to
mime-def.el; require mime-def.
Fri Feb 28 04:44:27 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* semi-setup.el: require mime-play instead of mime-view when
compiling.
Fri Feb 28 04:21:43 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* SEMI-MK: BINS were abolished.
* SEMI-CFG: require cl.
* SEMI-CFG: Variable `BIN_SRC_DIR' and `BINS' were abolished.
Fri Feb 28 04:08:12 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* SEMI-MK: Renamed from TM-MK.
* SEMI-CFG: Don't require tl-misc.
* SEMI-ELS (semi-modules-to-compile): Add alist.el.
Fri Feb 28 02:33:20 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-play.el (field-unify): Fixed.
Fri Feb 28 02:22:38 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-setup.el, mime-image.el, mime-edit.el, mime-play.el:
Require alist.
* alist.el: New module; separated from tl-list.el.
* mime-play.el: Function `put-alist' and `del-alist' were moved to
alist.el.
* mime-play.el (mime-article/coding-system-alist): Use
`no-conversion' instead of *noconv*.
Thu Feb 27 13:48:48 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-parse.el (char-list-to-string): New inline-function; copied
from emu-19.el.
Thu Feb 27 13:43:38 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-parse.el (symbol-concat): New inline-function; copied from
tl-str.el.
* semi-setup.el: require 'mime-view when compiling.
* mime-parse.el (regexp-*): New inline-function; copied from
tl-str.el.
Thu Feb 27 13:28:10 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* semi-setup.el (running-xemacs): New variable.
Thu Feb 27 09:00:33 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-play.el: `mime/viewer-mode' -> `mime-view-mode'.
* mime-def.el: fixed DOC string.
Thu Feb 27 08:56:45 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* eword-decode.el: Don't require emu.
* mime-def.el (charsets-mime-charset-alist, default-mime-charset,
mime-charset-coding-system-alist): New variable; copied from
emu-e20.el.
(mime-charset-to-coding-system, detect-mime-charset-region,
encode-mime-charset-region, decode-mime-charset-region,
encode-mime-charset-string, decode-mime-charset-string): New
function; copied from emu-e20.el.
* eword-encode.el (find-non-ascii-charset-string): New
inline-function; copied from emu-e20.el.
Thu Feb 27 08:36:01 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-tar.el: Don't require emu.
Thu Feb 27 08:34:21 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-play.el (put-alist, del-alist): New function; copied from
tl-list.el.
(put-fields, field-unifier-for-default, field-unifier-for-mode,
field-unify, assoc-unify, get-unified-alist, delete-atype,
remove-atype, replace-atype, set-atype): New function; copied from
tl-atype.el. Don't require tl-atype.
Thu Feb 27 08:18:16 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* semi-setup.el (call-after-loaded): New function; imported from
tl-misc.el; Don't require tl-misc.
Thu Feb 27 08:10:24 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-pgp.el: Renamed from tm-pgp.el.
Thu Feb 27 08:05:45 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-def.el (pgp-function-alist): tm-edit-mc.el was renamed to
mime-mc.el.
* mime-mc.el: Renamed from tm-edit-mc.el.
Thu Feb 27 06:38:44 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-text.el: `tm:mother-button-dispatcher' ->
`mime-button-mother-dispatcher'.
* mime-def.el, mime-text.el (mime-preview/filter-for-text/plain),
mime-view.el, mime-tar.el (mime-tar-set-properties):
`tm:add-button' -> `mime-add-button'.
* mime-file.el: Renamed from tm-file.el.
Wed Feb 26 13:01:25 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* eword-decode.el: Must require emu.
* eword-decode.el (eword-decode-region): Unused local variable
`charset', `encoding' and `text'.
Wed Feb 26 07:58:29 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* eword-decode.el (eword-decode-encoded-word): Use
`add-text-properties' directly.
Wed Feb 26 07:44:22 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-def.el (tm:add-button): Use `add-text-properties' directly.
* mime-def.el (running-xemacs): New variable; if it is not nil,
require overlay.
* mime-def.el (regexp-or): New function.
Wed Feb 26 04:57:33 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-tar.el: Renamed from tm-tar.el.
* mime-view.el (mime-view-define-keymap): `tm:button-dispatcher'
-> `mime-button-dispatcher'.
* mime-def.el: `tm:button-dispatcher' -> `mime-button-dispatcher'.
* mime-def.el: `tm:mother-button-dispatcher' ->
`mime-button-mother-dispatcher'.
* mime-def.el: `semi-data' -> `mime-button-data'.
* mime-def.el: `semi-callback' -> `mime-button-callback'.
* mime-def.el: `tm:mouse-face' -> `mime-button-mouse-face'.
* mime-def.el: `tm:button-face' -> `mime-button-face'.
* mime-def.el (tm:add-button, tm:button-dispatcher):
`mime-callback' was renamed to `semi-callback'; `mime-data' was
renamed to `semi-data'.
Wed Feb 26 03:54:17 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-def.el (tm:add-button): Use `make-overlay' directly.
* mime-def.el (tm:add-button): Use `overlay-put' directly.
Tue Feb 25 07:40:37 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-text.el: `tm:browse-url' was renamed to
`mime-text-browse-url'.
* mime-text.el: Require browse-url.
* mime-text.el: `tm:URL-regexp' was renamed to
`mime-text-url-regexp'.
* mime-text.el: Variable `tm:URL-regexp',
`browse-url-browser-function' and function `tm:browse-url' were
moved from mime-def.el.
* mime-def.el: Variable `tm:URL-regexp',
`browse-url-browser-function' and function `tm:browse-url' were
moved to mime-text.el.
* eword-decode.el: Variable `tm:warning-face' was renamed to
`eword-warning-face'.
* eword-decode.el: Variable `tm:warning-face' was moved from
mime-def.el.
* mime-def.el: Variable `tm:warning-face' was moved to
eword-decode.el.
* mime-def.el: Function `tm:set-face-region' was abolished.
* mime-edit.el: `mime-edit-make-charset-default-encoding-alist' ->
`mime-make-charset-default-encoding-alist'.
* mime-edit.el: `mime-edit-transfer-level' ->
`mime-transfer-level'.
* mime-edit.el: Function `mime/encoding-name' was renamed to
`mime-encoding-name'.
* mime-def.el: Function `mime/make-charset-default-encoding-alist'
was abolished.
* mime-edit.el: Function `mime/encoding-name' was moved from
mime-def.el.
* mime-def.el: Function `mime/encoding-name' was moved to
mime-edit.el.
Tue Feb 25 06:15:53 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-edit.el: Variable `mime-charset-type-list' was moved from
mime-def.el.
* mime-def.el: Variable `mime-charset-type-list' was moved to
mime-edit.el.
Mon Feb 24 10:07:33 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* eword-encode.el (eword-encode-header): fixed typo.
Mon Feb 24 10:04:23 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-edit.el (mime-edit-insert-message, mime-edit-insert-mail,
mime-editor::edit-again): Don't use `assoc-value'; Don't require
tl-list.
Mon Feb 24 10:00:50 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-play.el: require tl-atype.
* mime-view.el: Don't require tl-atype.
Mon Feb 24 09:58:14 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-view.el: Don't require tl-misc.
Mon Feb 24 09:57:03 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* eword-encode.el (eword-encode-header): Use function `assoc-if'
instead of `ASSOC'; require cl instead of tl-list.
* mime-parse.el (define-structure): New macro; Don't require
tl-misc.el.
* mime-view.el (mime-preview/insert-content-button): Don't use
function `assoc-value'.
* mime-view.el: Require cl instead of tl-list.
* mime-view.el: Don't require tl-str.el.
Mon Feb 24 09:12:12 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-parse.el (define-structure): New macro; Don't require
tl-misc.el.
* mime-view.el (mime-preview/insert-content-button): Don't use
function `assoc-value'.
* mime-view.el: Require cl instead of tl-list.
* mime-view.el: Don't require tl-str.el.
Mon Feb 24 09:04:48 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* eword-decode.el: Constant
`eword-Q-encoding-and-encoded-text-regexp' was abolished.
* eword-decode.el (quoted-printable-hex-chars,
quoted-printable-octet-regexp, eword-Q-encoded-text-regexp,
eword-Q-encoding-and-encoded-text-regexp): New constant; moved
from mime-def.el.
* mime-def.el (quoted-printable-hex-chars,
quoted-printable-octet-regexp, eword-Q-encoded-text-regexp,
eword-Q-encoding-and-encoded-text-regexp): Moved to
eword-decode.el.
* eword-decode.el (base64-token-regexp,
base64-token-padding-regexp, eword-B-encoded-text-regexp): New
constant; moved from mime-def.el.
* mime-def.el: Constant `base64-token-regexp',
`base64-token-padding-regexp' and `eword-B-encoded-text-regexp'
were moved to eword-decode.el.
* mime-def.el: Constant `eword-B-encoding-and-encoded-text-regexp'
was abolished.
Mon Feb 24 08:52:01 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* eword-decode.el: Don't require emu.
* eword-decode.el: Don't require tl-str.el.
* mime-def.el (get-version-string): New inline-function; imported
from tl-str.el.
Mon Feb 24 02:42:24 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-setup.el: Function `mime/encode-message-header' was renamed
to `eword-encode-header'.
* mime-edit.el, eword-encode.el: Function
`eword-encode-message-header' was renamed to
`eword-encode-header'.
Mon Feb 24 02:26:02 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* eword-decode.el (eword-decode-header): New optional argument
`SEPARATOR'; Use function `std11-narrow-to-header'.
* mime-view.el, mime-setup.el, eword-decode.el: Function
`eword-decode-message-header' was renamed to
`eword-decode-header'.
Mon Feb 24 02:17:11 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-edit.el: tm-ew-e.el was renamed to eword-encode.el;
Function `mime/encode-message-header' was renamed to
`eword-encode-message-header'.
Mon Feb 24 01:59:28 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-view.el: Function `mime-eword/decode-string' was renamed to
`eword-decode-string'.
* mime-def.el: `mime/Q-' -> `eword-Q-'.
* mime-def.el: `mime/B-' -> `eword-B-'.
Mon Feb 24 01:46:59 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* eword-decode.el: Constant `eword-charset-regexp' was renamed to
`mime-charset-regexp'.
* mime-def.el: Constant `mime/charset-regexp' was renamed to
`mime-charset-regexp'.
Mon Feb 24 01:38:18 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-view.el: Function `mime/decode-message-header' was renamed to
`eword-decode-message-header'.
* mime-view.el: tm-ew-d.el was renamed to eword-decode.el.
Mon Feb 24 01:32:33 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-setup.el: tm-ew-d.el was renamed to eword-decode.el;
Function `mime/decode-message-header' was renamed to
`eword-decode-message-header'.
Sat Feb 22 17:30:15 1997 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-CFG: Renamed from TM-CFG.
* SEMI-ELS: Renamed from TM-ELS.
* eword-encode.el: `eword-exist-encoded-word-in-subject' ->
`eword-in-subject-p'.
* eword-encode.el: `mime/' -> `eword-'.
* eword-encode.el (eword-generate-X-Nsubject): Don't refer
variable `mime/use-X-Nsubject'.
* eword-encode.el (eword-generate-X-Nsubject): Renamed from
`mime/generate-X-Nsubject'.
* eword-encode.el (eword-field-encoding-method-alist): Don't refer
variable `mime/no-encoding-header-fields'.
* eword-encode.el (eword-field-encoding-method-alist): Renamed
from `mime/field-encoding-method-alist'.
* eword-encode.el: Renamed from tm-ew-e.el.
* eword-decode.el: Renamed from tm-ew-d.el.
* mime-view.el: Don't require tm-def.
* mime-parse.el: tm-def.el was renamed to mime-def.el.
* mime-def.el: Renamed from tm-def.el.
1997-02-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* SEMI-ELS: Renamed from TM-ELS.
1997-02-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* eword-encode.el: `eword-exist-encoded-word-in-subject' ->
`eword-in-subject-p'.
* eword-encode.el: `mime/' -> `eword-'.
* eword-encode.el (eword-generate-X-Nsubject): Don't refer
variable `mime/use-X-Nsubject'.
* eword-encode.el (eword-generate-X-Nsubject): Renamed from
`mime/generate-X-Nsubject'.
* eword-encode.el (eword-field-encoding-method-alist): Don't refer
variable `mime/no-encoding-header-fields'.
* eword-encode.el (eword-field-encoding-method-alist): Renamed
from `mime/field-encoding-method-alist'.
* eword-encode.el: Renamed from tm-ew-e.el.
* eword-decode.el: Renamed from tm-ew-d.el.
* mime-view.el: Don't require tm-def.
* mime-parse.el: tm-def.el was renamed to mime-def.el.
1997-02-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-def.el: Renamed from tm-def.el.
Fri Feb 21 08:04:42 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-view.el: Don't `suppress-keymap'.
Fri Feb 21 07:42:32 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-view.el: tm-parse.el was renamed to mime-parse.el.
* mime-parse.el: Renamed from tm-parse.el.
* mime-view.el: Key-binding for function
`mime-view-display-x-face' was abolished.
Fri Feb 21 07:04:51 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-setup.el: modified for mime-edit.el.
Fri Feb 21 07:02:52 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-edit.el: `mime-editor/' -> `mime-edit-'.
Fri Feb 21 06:57:11 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-edit.el: based on tm-edit 7.105.
* semi-setup.el: tm-image.el was renamed to mime-image.el.
* mime-image.el: Renamed from tm-image.el.
Fri Feb 21 05:57:53 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* semi-setup.el: Renamed from tm-setup.el.
* mime-setup.el: Setting for GNUS was abolished.
* mime-setup.el: Variable `mime-setup-use-sc' was abolished.
* mime-view.el: tm-play.el was renamed to mime-play.el.
* mime-partial.el: Renamed from tm-partial.el.
* mime-play.el: Renamed from tm-play.el.
* mime-view.el: `tm-text' is renamed to `mime-text'.
* mime-view.el (mime-view-mode): Optional argument `mother-keymap'
was renamed to `default-keymap-or-function'; optional argument
`default-function' was abolished.
* mime-text.el: `mime-view-code-converter-alist' ->
`mime-text-decoder-alist'.
* mime-text.el: Renamed from tm-text.el.
Thu Feb 20 09:02:36 1997 Tomohiko Morioka <tmorioka@mule.etl.go.jp>
* mime-view.el: `mime/viewer-mode' -> `mime-view-mode'.
* mime-view.el: Renamed from tm-view.el.
Thu Jul 11 14:57:42 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-file-types): add for patch.
* mime-edit.el: rearrangement.
Wed Jul 10 12:05:05 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/normalize-body): Use function
`encode-mime-charset-region' instead of
`mime-charset-encode-region'.
Wed Jul 10 11:51:13 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/normalize-body): fixed.
* mime-edit.el (mime-editor/define-charset):
Argument `charset' was changed to
symbol.
(mime-editor/choose-charset): Changed to return symbol.
(mime-editor/normalize-body): charset was changed to symbol.
Wed Jul 10 11:22:55 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/make-charset-default-encoding-alist):
New function.
(mime-editor/charset-default-encoding-alist): Use function
`mime-editor/make-charset-default-encoding-alist'.
(mime-editor/toggle-transfer-level): Use function
`mime-editor/make-charset-default-encoding-alist'.
* mime-edit.el (mime-editor/choose-charset): Use function
`detect-mime-charset-region' instead of
`mime/find-charset-region'.
Tue Jul 9 13:24:21 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime/editor-mode): Don't toggle.
(mime-editor/toggle-mode): New function.
Tue Jul 2 14:06:53 1996 Alastair Burt <burt@dfki.uni-kl.de>
* mime-edit.el: I think the following is the best way to handle
tm-edit as a minor mode in XEmacs (at least in 19.14 -- I am not
sure if "add-minor-mode" works the same way in earlier versions).
By clicking on the mode line you can turn mime/editor-mode on or
off.
Thu Jun 27 14:08:17 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/encrypt-pgp-kazu): Use macro
`as-binary-process'.
* mime-edit.el (mime-editor/sign-pgp-kazu): Use macro
`as-binary-process'.
Wed Jun 12 05:58:23 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/split-message-sender-alist): setting
for `mail-mode' was moved to tm-rmail.el.
Sun Jun 9 06:44:19 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el: Variable
`mime-editor/message-default-sender-alist' was abolished.
Sun Jun 9 06:40:26 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el: Variable `mime-editor/window-config-alist' was
abolished.
Sun Jun 9 06:35:10 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/split-and-send): New implementation.
Mon Jun 3 17:39:10 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor::edit-again): fixed about multipart.
Wed May 29 09:57:53 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/define-charset,
mime-editor/set-parameter): Function `mime-set-parameter' was
renamed to `mime-editor/set-parameter'.
* mime-edit.el (mime-set-parameter): New implementation
(mime-editor/translate-single-part-tag): New function.
(mime-editor/translate-region): Use function
`mime-editor/translate-single-part-tag'.
Tue May 28 15:15:33 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor::edit-again): fixed.
* mime-edit.el (mime/edit-again): fixed.
* mime-edit.el (mime-editor::edit-again): modified for new tag
rule.
* mime-edit.el (mime-editor/insert-signature): Use variable
`signature-file-name' instead of `signature'.
* mime-edit.el (mime-editor/multipart-beginning-regexp): Don't
require begging new-line.
(defconst mime-editor/multipart-end-regexp): Don't require begging
new-line.
(mime-editor/find-inmost): modified for new enclosure tag rule.
(mime-editor/translate-region): modified for new enclosure tag rule.
(mime-editor/enclose-region): modified for new enclosure tag rule.
Sun May 26 05:04:20 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el: Add `(provide 'tm-edit)'.
Do `(run-hooks 'tm-edit-load-hook)' if variable
`mime-edit-load-hook' is not bound.
Sun May 26 02:10:08 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/insert-binary-buffer): fixed.
(mime-editor/normalize-body): fixed.
Sat May 25 20:47:32 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/normalize-body): fixed.
(mime-editor/content-end): Used function `invisible-p' and
`next-visible-point'.
Sat May 25 20:05:20 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/insert-binary-buffer): Use function
`invisible-region' instead of `mime-flag-region'.
(mime-editor/normalize-body): Use function `visible-region'
instead of `mime-flag-region'.
(mime-editor/content-end): New implementation.
Sat May 25 16:04:28 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/enquote-region): New command; bound to
`C-c C-x q'.
(mime-editor/menu-list): New item for function
`mime-editor/enquote-region'.
Sat May 25 15:52:44 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/process-multipart-1): Use function
`string-equal' instead of `string='.
Sat May 25 15:48:33 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/process-multipart-1): fixed about
condition of next tag inserting.
Sat May 25 15:36:58 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/enclose-region): fixed for new format.
Sat May 25 15:15:03 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/insert-partial-header): Comment of
Mime-Version field was modified.
* mime-edit.el (mime-editor/insert-tag): Don't insert unnecessary
line break.
* mime-edit.el (mime-editor/version-name): New constant.
(mime-editor/mime-version-value): Use constant
`mime-editor/version-name'.
(mime-editor/insert-partial-header): Use constant
`mime-editor/version-name'.
Fri May 24 15:16:37 1996 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* mime-edit.el (mime-editor/goto-tag): fixed for a tag without
line break.
(mime-editor/normalize-body): fixed for a tag without line break.
* mime-edit.el (mime-editor/translate-region): fixed for a part
starting without line break.
* mime-edit.el (mime-editor/single-part-tag-regexp): It allows any
column.
(mime-editor/quoted-single-part-tag-regexp): New constant.
(mime-editor/enquote-region): New function.
(mime-editor/dequote-region): New function.
(mime-editor/process-multipart-1): Processing for ``quote''
enclosure was added.
(mime-editor/translate-body): Use function
`mime-editor/dequote-region'.
(mime-editor/mime-version-value): Comment was renamed.
* mime-edit.el: Renamed from tm-edit.el
07070100000001000081A4000003E80000006400000001627140E500000377000000000000000000000000000000000000002700000000semi-1.14.6+239+gb1c245b81715/Makefile#
# Makefile for SEMI kernel.
#
PACKAGE = semi
API = 1.14
RELEASE = 6
FLIM_API= 1.14
TAR = tar
RM = /bin/rm -f
CP = /bin/cp -p
EMACS = emacs
XEMACS = xemacs
FLAGS = -batch -q -no-site-file -l SEMI-MK
PREFIX = NONE
LISPDIR = NONE
PACKAGEDIR = NONE
VERSION_SPECIFIC_LISPDIR = NONE
PACKAGE_LISPDIR = package-user-dir
GOMI = *.elc
VERSION = $(API).$(RELEASE)
ARC_DIR_PREFIX = /home/kanji/tomo/public_html/comp/emacsen/lisp
ARC_DIR = $(ARC_DIR_PREFIX)/semi/semi-$(API)-for-flim-$(FLIM_API)
elc:
$(EMACS) $(FLAGS) -f compile-semi $(PREFIX) $(LISPDIR) \
$(VERSION_SPECIFIC_LISPDIR) $(PACKAGE_LISPDIR)
install-elc: elc
$(EMACS) $(FLAGS) -f install-semi $(PREFIX) $(LISPDIR) \
$(VERSION_SPECIFIC_LISPDIR) $(PACKAGE_LISPDIR)
install: install-elc
clean:
-$(RM) $(GOMI)
release:
-$(RM) $(ARC_DIR)/$(PACKAGE)-$(VERSION).tar.gz
mv /tmp/$(PACKAGE)-$(VERSION).tar.gz $(ARC_DIR)
07070100000002000081A4000003E80000006400000001627140E500003EB3000000000000000000000000000000000000002300000000semi-1.14.6+239+gb1c245b81715/NEWSSEMI NEWS --- history of major-changes.
Copyright (C) 1998,1999 Free Software Foundation, Inc.
* Changes in SEMI 1.13
** PGP 5.0i and GnuPG are now supported for PGP/MIME
You can select the various PGP or GnuPG commands by the user option
`pgg-default-scheme' or `pgg-scheme'. The former is for encrypting and
signing, the latter could be bound for controlling which command is
used to process the incoming PGP armors. Note that Mailcrypt is not
needed anymore. A user interface for editing or viewing has never
changed. Note also that `pgp-function' and `pgp-functions-alist' are
abolished in this version.
** Requires FLIM 1.13 API
** Don't expect raw-buffer
In FLIM 1.13 API, existence of a raw-buffer corresponding to each
entity is not guaranteed.
*** Now acting-method must not expect to run in raw-buffer
Function `mime-play-entity' was changed to permit to run in any buffer
(may be called in preview-buffer). So each acting-method is called in
any buffer.
*** Don't refer variable `mime-raw-buffer'
Preview-buffer's local variable `mime-raw-buffer' is deleted. So
don't refer it.
*** Don't refer variable `mime-preview-buffer'
There are no guarantee about existence of a raw-buffer corresponding
to each entity, so don't refer buffer local variables of the
raw-buffer, e.g. `mime-preview-buffer'.
** Function `mime-play-entity'
Function `mime-play-entity' was renamed from `mime-raw-play-entity'
and changed interface.
Current interface is:
mime-play-entity (entity &optional situation ignored-method)
Please use `situation' if you would like to specify `mode' and
`ignore-examples'.
** Text property `mime-view-entity-{header|body}'
Now mime-view put text property `mime-view-entity-header' and
`mime-view-entity-body' in header and body of each entity.
** Behavior change about `mime-display-header-hook'
Function `mime-display-entity' runs `mime-display-header-hook' before
it inserts "\n".
In addition, now it is cleared that current point means beginning of
header when `mime-display-entity' runs `mime-display-header-hook'.
Therefore header-presentation-method must not change current point.
** New variable `mime-preview-move-scroll'
This variables decides how to scroll in the MIME-View-mode
when mime-preview-move-upper, mime-preview-move-previous,
mime-preview-move-next is called. Those are bound to `u', `p', `n',
respectively.
* Changes in SEMI 1.12
There are no user-visible changes.
** New function `eliminate-top-spaces'
Now mime-edit has it.
* Changes in SEMI 1.11
** New function `mime-edit-decode-message-in-buffer'
Add new function `mime-edit-decode-message-in-buffer'. Function
`mime-edit-decode-buffer' was abolished.
** Requires FLIM 1.12 API
* Changes in SEMI 1.10
** Abolish variable `mime-temp-directory'
FLIM 1.11 and SEMI 1.10 use variable `temporary-file-directory'
instead of `mime-temp-directory'. So environment variable
"MIME_TMP_DIR" and "TM_TMP_DIR" are not effective to specify temporary
directory of FLIM and SEMI.
** Abolish function `mime-text-insert-decoded-body'
SEMI 1.10 uses function `mime-insert-text-content' of FLIM 1.11 API
instead of `mime-text-insert-decoded-body'.
Now `mime-view-caesar' does not run `mime-text-decode-hook'.
* Changes in SEMI 1.9
** User option `mime-encoding-list'
SEMI 1.9 requires FLIM 1.10 API. In FLIM 1.10 API, variable
`mime-file-encoding-method-alist' was abolished. If you want to use
non-standard Content-Transfer-Encoding to insert a file into sending
message, please edit new user option `mime-encoding-list' instead of
`mime-file-encoding-method-alist'.
** Constant `mime-user-interface-product'
Constant `mime-user-interface-version' was renamed to
`mime-user-interface-product'. Notice that data format is changed
too.
FLIM 1.10 API provides following macros to access a slot of the new
data format:
mime-product-name (product)
mime-product-version (product)
mime-product-code-name (product)
Please use them to get elements of the constant
`mime-user-interface-product'.
* Changes in SEMI 1.8
** Don't use "file" command to detect content of entity
Acting-method to detect content of entity was modified not to use
"file" command.
Variable `mime-file-content-type-alist' was abolished. Instead of
it, new variable `mime-magic-type-alist' is available to customize.
It is an alist of regexp about magic-number vs. corresponding
media-types. Each element looks like (REGEXP TYPE SUBTYPE). REGEXP
is a regular expression to match against the beginning of the content
of entity. TYPE is symbol to indicate primary type of media-type.
SUBTYPE is symbol to indicate subtype of media-type.
** Abolish external X-Face viewer
** Abolish obsolete utility for *-field-list and *-field-regexp
Abolish function `tm:set-fields', `tm:add-fields' and
`tm:delete-fields'.
** Change MUA interface of automatic message/partial combining
Abolish variable `mime-view-partial-message-method-alist'.
Instead of it, `request-partial-message-method' in acting-situation
is available to specify MUA depended implementation.
Each element of `mime-view-partial-message-method-alist' were
required to display message at current summary line, and its return
value were ignored. On the other hand,
`request-partial-message-method' is required to return structure of
message at current summary line. Format of it is mime-entity.
** User-Agent field
MIME-Edit inserts User-Agent field instaed of X-Emacs field if
`mime-edit-insert-user-agent-field' is not nil. Contents of
User-Agent is specified by mime-edit-user-agent-value'.
X-Emacs field related features were abolished.
* Changes in SEMI 1.7
** Header-presentation-method
Now MIME-View uses header-presentation-method instead of
header-filter.
- abolish variable `mime-view-content-header-filter-alist'
- abolish function `mime-view-cut-header'
- Rename `mime-view-content-header-filter-hook' to
`mime-display-header-hook'
** Abolish `mime-view-ignored-field-regexp'
Now mime-view uses `mime-view-ignored-field-list' directly in
default header-presentation-method.
** Abolish body filter support
Please use body-presentation-method.
** Methods for MUAs
- Rename `mime-view-following-method-alist' to
`mime-preview-following-method-alist'
- Rename `mime-method-to-combine-message/partial-pieces' to
`mime-combine-message/partial-pieces-automatically'
* Changes in SEMI 1.6
** Abolish tm-compatible external method support
Abolish tm-compatible external method support. Please use mailcap
method instead of it.
** Abolish `mime-edit-signing-type' and `mime-edit-encrypting-type'
C-c C-m C-s encloses as "pgp-signed" which means PGP/MIME signature.
C-c C-m C-e encloses as "pgp-encrypted" which means PGP/MIME
encryption.
** New method to detect content of entity
Now MIME-View can detect content of entity for
application/octet-stream in default setting.
It uses "file" command to detect. User can customize
`mime-file-content-type-alist' to specify media-type for output of
"file" command. It is an alist of "file" output patterns
vs. corresponding media-types. Each element looks like (REGEXP TYPE
SUBTYPE). REGEXP is pattern for "file" command output. TYPE is
symbol to indicate primary type of media-type. SUBTYPE is symbol to
indicate subtype of media-type.
** New interface to display message
- Function `mime-view-buffer'
- Function `mime-view-display-message'
** Change interface of internal playback method
Interface of internal playback method was changed to
(entity situation)
It is as same as interface of body-presentation-method.
** Change interface of `mime-view-entity-button-visible-p'
** Change interface of `mime-view-insert-entity-button'
** `mime-preview-original-major-mode'
Abolish variable `mime-preview-original-major-mode'.
Please use function `mime-preview-original-major-mode' instead of
it.
** mime-preview-over-to-{previous|next}-method-alist
`mime-preview-over-to-{previous|next}-method-alist' were renamed
from `mime-view-over-to-{previous|next}-method-alist'.
* Changes in SEMI 1.5
** mime-w3
Add inline text/html preview feature using w3. If
`mime-setup-enable-inline-html' is not nil, semi-setup.el sets up it.
** `pgp-elkins' -> `pgp-mime'
Rename `pgp-elkins' -> `pgp-mime'. Variable
`mime-edit-signing-type' and `mime-edit-encrypting-type' does not
allow `pgp-elkins'.
** type-subtype-score
Now MIME-View chooses one entity to display body in
multipart/alternative. In this mechanism,
`mime-view-type-subtype-score-alist' is used to specify priority of
each entity.
Variable `mime-view-type-subtype-score-alist' is alist of
TYPE-SUBTYPE vs. SCORE. TYPE-SUBTYPE is cons pair (TYPE . SUBTYPE),
symbol TYPE or t. TYPE and SUBTYPE are symbol. `t' means default.
SCORE is integer. Larger number is larger priority.
** text presentation
Change text presentation mechanism. In anything older than SEMI
1.4, text presentation mechanism is based on filter model. However it
has design problem about conversion between byte representation and
text presentation. So SEMI was changed to use
body-presentation-method to display text entity. In this purpose, old
text decoding features were abolished and introduces news features
(cf. next section).
** mime-raw-representation-type and mime-raw-representation-type-alist
Abolish `mime-text-decoder' and `mime-text-decoder-alist' because of
text presentation mechanism change (cf. previous section). Instead of
it, SEMI introduces variable about representation-type of
mime-raw-buffer. If it is `binary', mime-raw-buffer is as same as
network representation. If it is `cooked', mime-raw-buffer is
code-converted.
`mime-raw-representation-type-alist' is an alist of major-mode
vs. representation-type. Each element looks like
(SYMBOL . REPRESENTATION-TYPE).
SYMBOL is major-mode or t. t means default.
`mime-raw-representation-type' is a buffer local variable of
mime-raw-buffer. If it is non-nil, it overrides
`mime-raw-representation-type-alist'.
In addition, `mime-raw-buffer-coding-system-alist' was abolished.
Because representation-type has enough information.
* Changes in SEMI 1.4
** mailcap
mailcap was supported to set up 'mime-acting-condition.
tm-external-method scripts written by born shell were abolished.
** mime-add-condition
New function to set up 'mime-preview-condition and/or
'mime-acting-condition.
** signature setting in semi-setup.el
Abolish MUA depended signature setting.
Setting for mail-mode were moved to mail-mime-setup.el.
* Changes in SEMI 1.3
** mime-acting-condition
Format of variable 'mime-acting-condition was changed from `atype'
to `condition tree'. Its format is as same as
'mime-preview-condition.
If there are two or more conditions are found when matching, menu
pops up to select method to run. Selected situation will be added to
example database. (cf. mime-acting-situation-examples-file)
** New variables
*** mime-view-find-every-acting-situation
Find every available acting-situation if non-nil.
*** mime-acting-situation-examples-file
File name of example about acting-situation demonstrated by
user.
* Changes in SEMI 1.2
** User setting
*** hooks
'mime-view-plain-text-preview-hook was renamed to
'mime-preview-text/plain-hook.
*** Variable
Variable 'mime-view-childrens-header-showing-Content-Type-list was
abolished. Please use 'mime-preview-condition instead.
*** API about visible-predicates were abolished
Following functions were abolished:
mime-view-header-visible-p (entity message-info)
mime-view-body-visible-p (entity message-info)
mime-view-entity-separator-visible-p (entity message-info)
Please use 'mime-preview-condition instead.
Function 'mime-view-entity-button-visible-p is not abolished, but it
is obsoleted.
*** mime-preview-condition
Following are added as pre-defined keys:
'childrens-situation default preview-situation for children
'message-button to specify to display message-button
nil: default (invisible)
'visible: visible
'invisible: invisible
'entity-button to specify to display entity-button
nil: default (visible)
'visible: visible
'invisible: invisible
'header to specify to display header
nil: default (invisible)
'visible: visible
'invisible: invisible
** API
*** Interface for body-filter
'mime-view-filter-for-* was renamed to 'mime-preview-filter-for-*.
*** mime-text-decode-body
Function 'mime-decode-text-body was renamed to
'mime-text-decode-body and changed interface. New interface is
following:
mime-text-decode-body (SITUATION)
SITUATION is preview-situation. Content-Transfer-Encoding and
MIME-charset are specified in field of it.
* Changes in SEMI 1.1
** User setting
*** Setting variable about visible body
'mime-view-visible-media-type-list and
'mime-view-content-filter-alist were abolished. Please use
'mime-preview-condition instead.
Notice that 'mime-preview-condition is not list of
media-type/subtype string nor association-list. It uses new
data-structure `ctree' (condition-tree; it is introduced to replace
`atype'). Function 'ctree-set-calist-strictly and
'ctree-set-calist-with-default may be useful to modify it (`calist'
(condition-alist) is as same as `atype').
*** API about visible-predicates
Interface of visible-predicates for entity elements were changed.
New interfaces are following:
mime-view-entity-button-visible-p (entity message-info)
mime-view-header-visible-p (entity message-info)
mime-view-body-visible-p (entity message-info)
mime-view-entity-separator-visible-p (entity message-info)
** API
*** entity representation
Structure 'mime-entity-info was renamed to 'mime-entity. So various
functions were renamed too.
*** Interface for entity-button generators
Interface of entity-button generators was changed. New interfaces
is following:
mime-view-insert-entity-button (entity message-info subject)
*** mime-preview-condition and preview-situation
Conditions about preview generation are unified to
'mime-preview-condition. Namely other variables, such as
'mime-view-visible-media-type-list, 'mime-view-content-filter-alist,
'mime-view-image-converter-alist were abolished.
Preview-situation is generated from entity information, running
environment and 'mime-preview-condition. These elements are checked
to match with each other. (it is similar to acting-situation)
Format of preview-situation is association-list. Following key is
pre-defined:
'type media-type
'subtype media-subtype
'encoding content-transfer-encoding
'major-mode major-mode of MUA
<STRING> attribute of Content-Type field.
'body-presentation-method body-presentation-method
If 'body-presentation-method is 'with-filter, 'body-filter is used to
specify body-filter function. If 'body-presentation-method is
function, it is called to generate presentation of entity body.
Body-filter function 'mime-view-filter-for-image refers 'image-format.
Setting for message/partial button is specified by
'mime-preview-condition instead of hard-coding.
*** Interface for body-filter
Interface of body-filter was changed. New interfaces is following:
<body-filter> (situation)
Current pre-defined filters are following:
mime-view-filter-for-text/plain (situation)
mime-view-filter-for-text/richtext (situation)
mime-view-filter-for-text/enriched (situation)
mime-view-filter-for-image (situation) ; if available
'mime-view-filter-for-application/postscript was abolished.
*** Format of mime-acting-condition (acting-situation)
Format of `mime-acting-condition' were changed. `type' and
`subtype' are separated and changed to symbol.
*** Renaming
- mime-view-buffer -> mime-preview-buffer
Local variables:
mode: outline
paragraph-separate: "[ ]*$"
end:
07070100000003000081A4000003E80000006400000001627140E500000416000000000000000000000000000000000000002500000000semi-1.14.6+239+gb1c245b81715/README-*- outline -*-
[README for SEMI-EPG]
* What's SEMI-EPG?
SEMI-EPG is a variant of SEMI. The remarkable features are that it
uses EasyPG and lexical binding, so Emacs 24.5 and later are
supported. See README.[en|ja] for details of original SEMI.
* GitHub
Development of SEMI-EPG uses Git. The latest developing version is
available at the following Git repository:
% git clone https://github.com/wanderlust/semi.git
Or you can view the SEMI-EPG repository via WWW at:
https://github.com/wanderlust/semi
We hope you will join the open development.
* Bug reports
If you write bug-reports and/or suggestions for improvement, please
send them to the Wanderlust Mailing List. See
https://wanderlust.github.io/wl-docs/wl.html#Wanderlust-Mailing-List
for details.
Alternatively, You can also use GitHub. If you send a pull request,
please embed unindented ChangeLog entries in commit messages like
Emacs's. See "Commit messages" section of Emacs's CONTRIBUTE
file.
https://git.savannah.gnu.org/cgit/emacs.git/plain/CONTRIBUTE
07070100000004000081A4000003E80000006400000001627140E500001CD9000000000000000000000000000000000000002800000000semi-1.14.6+239+gb1c245b81715/README.en;; -*- coding: utf-8; -*-
[README for SEMI kernel package (English Version)]
What's SEMI?
============
SEMI is a library to provide MIME feature for GNU Emacs. MIME is a
proposed internet standard for including content and headers other
than (ASCII) plain text in messages.
RFC 2045 : Internet Message Bodies
RFC 2046 : Media Types
RFC 2047 : Message Header Extensions
RFC 2048 : MIME Registration Procedures
RFC 2049 : MIME Conformance
SEMI has the following features:
- MIME message viewer (mime-view-mode) (RFC 2045 .. 2049)
- MIME message composer (mime-edit-mode) (RFC 2045 .. 2049)
MIME message viewer and composer also support following features:
- filename handling by Content-Disposition field (RFC 1806)
- PGP/MIME security Multiparts (RFC 2015)
- application/pgp (draft-kazu-pgp-mime-00.txt; obsolete)
- text/richtext (RFC 1521; obsolete; preview only)
- text/enriched (RFC 1896)
- External method configuration by mailcap (RFC 1524)
Notice that this package does not contain MIME extender for any
MUAs. They are released as separated packages.
Required environment
====================
SEMI supports XEmacs 21.1 or later, and GNU Emacs 20.4 or later.
SEMI does not support anything older than GNU Emacs 19.28 or XEmacs
19.14. In addition, SEMI does not word with byte-indexing Mule
implementations, such as Mule 1, Mule 2 and GNU Emacs 20.1/20.2.
SEMI also does not support Emacs 19.29 to 19.34, XEmacs 19.15 or
XEmacs 20.2, but SEMI may work with them.
SEMI requires APEL (10.7 or later) and FLIM (1.14.2 or later)
package. Please install them before installing it. APEL package is
available at:
http://git.chise.org/elisp/dist/apel/
and FLIM package is available at:
http://git.chise.org/elisp/dist/flim/flim-1.14/
Installation
============
(a) run in expanded place
If you don't want to install other directories, please do only
following:
% make
You can specify the emacs command name, for example
% make EMACS=xemacs
If `EMACS=...' is omitted, EMACS=emacs is used.
(b) make install
If you want to install other directories, please do following:
% make install
You can specify the emacs command name, for example
% make install EMACS=xemacs
If `EMACS=...' is omitted, EMACS=emacs is used.
You can specify the prefix of the directory tree for Emacs Lisp
programs and shell scripts, for example:
% make install PREFIX=~/
If `PREFIX=...' is omitted, the prefix of the directory tree of the
specified emacs command is used (perhaps /usr/local).
For example, if PREFIX=/usr/local and EMACS 19.34 is specified, it
will create the following directory tree:
/usr/local/share/emacs/19.34/site-lisp/ --- emu
/usr/local/share/emacs/site-lisp/apel/ --- APEL
/usr/local/share/emacs/site-lisp/flim/ --- FLIM
/usr/local/share/emacs/site-lisp/semi/ --- SEMI
You can specify site-lisp directory, for example
% make install LISPDIR=~/share/emacs/lisp
If `LISPDIR=...' is omitted, site-lisp directory of the specified
emacs command is used (perhaps /usr/local/share/emacs/site-lisp or
/usr/local/lib/xemacs/site-lisp).
If the emu modules (included in APEL package) have been installed in
the non-standard directory, you should specify where they will be
found, for example:
% make install VERSION_SPECIFIC_LISPDIR=~/elisp
(c) install as a XEmacs package
If you want to install to XEmacs package directory, please do
following:
% make install-package
You can specify the emacs command name, for example
% make install-package XEMACS=xemacs-21
If `XEMACS=...' is omitted, XEMACS=xemacs is used.
You can specify the package directory, for example:
% make install PACKAGEDIR=~/.xemacs
If `PACKAGEDIR=...' is omitted, the first existing package
directory is used.
Notice that XEmacs package system requires XEmacs 21.0 or later.
(a,b,c)
You can specify other optional settings by editing the file
${archive}/SEMI-CFG. Please read ${archive}/README.en and comments
in ${archive}/SEMI-CFG.
Initialization
==============
(a) load-path
If you are using Emacs or Mule, please add directory of emu, apel,
flim and semi to load-path. If you install by default setting, you
can write subdirs.el for example:
--------------------------------------------------------------------
(normal-top-level-add-to-load-path
'("apel" "flim" "semi"))
--------------------------------------------------------------------
If you are using XEmacs, there are no need of setting about
load-path.
(b) mime-setup
Please insert the following into your ~/.emacs:
(load "mime-setup")
Documentation
=============
To get started, please read ${archive}/README.en.
RFC's 822, 1524, 1806, 1847, 1896, 2015, 2045, 2046, 2047, 2048 and
2049 are available via anonymous ftp:
ftp://ftp.merit.edu/internet/documents/rfc/
Mailing lists
=============
If you write bug-reports and/or suggestions for improvement, please
send them to the Emacs-MIME Mailing Lists:
emacs-mime-en@lists.chise.org (English)
emacs-mime-ja@lists.chise.org (Japanese)
Via the Emacs-MIME ML, you can report SEMI bugs, obtain the latest
release of SEMI, and discuss future enhancements to SEMI. To join
the Emacs-MIME ML, please see the descriptions of the following
pages:
http://lists.chise.org/mailman/listinfo/emacs-mime-en (English)
http://lists.chise.org/mailman/listinfo/emacs-mime-ja (Japanese)
Git based development
=====================
The SEMI development sources can be accessed via Git repository.
You can get the latest SEMI sources by the following:
% git clone http://git.chise.org/git/elisp/semi.git
Or you can view the SEMI repository via WWW at:
http://git.chise.org/gitweb/?p=elisp/semi.git
If you would like to join Git based development, please declare it
in the Emacs-MIME mailing list at first.
We hope you will join the open development.
Authors
=======
Original authors
MORIOKA Tomohiko <morioka@jaist.ac.jp>
(the author of mime-view and various parts of SEMI)
UMEDA Masanobu <umerin@mse.kyutech.ac.jp>
(the author of mime.el of emacs-mime-tools. mime.el is the
origin of mime-edit.el of SEMI)
Other authors
Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
(a major author of signature.el and a lot of codes)
MASUTANI Yasuhiro <masutani@me.es.osaka-u.ac.jp>
(anonymous ftp codes of mime-play.el)
OKABE Yasuo <okabe@kudpc.kyoto-u.ac.jp>
(a major author of mime-partial.el and signature.el)
Steinar Bang <sb@metis.no>
Steven L. Baur <steve@miranova.com>
Kevin Broadey <KevinB@bartley.demon.co.uk>
Alastair Burt <burt@dfki.uni-kl.de>
Eric Ding <ericding@San-Jose.ate.slb.com>
Thierry Emery <Thierry.Emery@aar.alcatel-alsthom.fr>
Simon Josefsson <jas@pdc.kth.se>
Jens Lautenbacher <jtl@tkm.physik.uni-karlsruhe.de>
Carsten Leonhardt <leo@arioch.tng.oche.de>
Pekka Marjola <marjola@bilbo.ntc.nokia.com>
Hisashi Miyashita <himi@bird.scphys.kyoto-u.ac.jp>
Kazuhiro Ohta <ohta@ele.cst.nihon-u.ac.jp>
Alexandre Oliva <oliva@dcc.unicamp.br>
François Pinard <pinard@iro.umontreal.ca>
Artur Pioro <artur@flugor.if.uj.edu.pl>
Dan Rich <drich@morpheus.corp.sgi.com>
(contribute to evolve mime-image.el with XEmacs)
Katsumi Yamaoka <yamaoka@jpl.org>
07070100000005000081A4000003E80000006400000001627140E5000023FD000000000000000000000000000000000000002800000000semi-1.14.6+239+gb1c245b81715/README.ja[README for SEMI kernel package (æ¥æ¬èªç)]
SEMI ãšã¯?
=========
SEMI 㯠GNU Emacs ã«å¯Ÿã㊠MIME æ©èœãæäŸããã©ã€ãã©ãªã§ããMIME ã¯ã
ã¡ãã»ãŒãžå
ã«ãã¬ãŒã³ããã¹ã (ASCII) 以å€ã®å
容ãããããå«ããã®ã«
é¢ããŠææ¡ãããã€ã³ã¿ãŒãããèŠæ Œã§ãã
RFC 2045 : Internet Message Bodies
RFC 2046 : Media Types
RFC 2047 : Message Header Extensions
RFC 2048 : MIME Registration Procedures
RFC 2049 : MIME Conformance
SEMI ã¯ã以äžã®æ©èœãæã£ãŠããŸã:
- MIME message viewer (mime-view-mode) (RFC 2045 .. 2049)
- MIME message composer (mime-edit-mode) (RFC 2045 .. 2049)
MIME message viewer ãš MIME message compiser ã¯ããã«æ¬¡ã®ç¹åŸŽãæã£ãŠ
ããŸã:
- filename handling by Content-Disposition field (RFC 1806)
- PGP/MIME security Multiparts (RFC 2015)
- application/pgp (draft-kazu-pgp-mime-00.txt; obsolete)
- text/richtext (RFC 1521; obsolete; preview only)
- text/enriched (RFC 1896)
- External method configuration by mailcap (RFC 1524)
ãã®ããã±ãŒãžã«ã¯ MUAs ã«é¢ãã MIME æ¡åŒµã¯å«ãŸããŠããªãããšã«æ³šæ
ããŠãã ããããããã¯ãå¥ã®ããã±ãŒãžãšããŠé
åžãããŠããŸãã
å¿
èŠãªç°å¢
==========
SEMI ã¯ãXEmacs 21.1 以éãããã³ GNU Emacs 20.4 以éã«å¯Ÿå¿ããŠããŸãã
SEMI ã¯ãGNU Emacs 19.28 ãŸã㯠XEmacs 19.14 ãããå€ããã®ã«ã€ããŠã¯ã
äžå察å¿ããŠããŸãããå ããŠãSEMI 㯠Mule 1, Mule 2 ããã³ GNU Emacs
20.1/20.2 ãªã©ã§å®è£
ãããŠãã byte-indexing ã§ã¯åäœããŸããã
SEMI ã¯ãEmacs 19.29 ãã 19.34, XEmacs 19.15 ãŸã㯠XEmacs 20.2 ã«ã€
ããŠã察å¿ã¯ããŠããŸããããåããããããŸããã
SEMI ã¯ãAPEL (10.7 以é) ãš FLIM (1.14.2 以é) ãå¿
èŠãšããŸãã SEMI
ãã€ã³ã¹ããŒã«ããåã«ãããããã€ã³ã¹ããŒã«ããŠãã ãããAPEL ã¯ã以
äžã§å
¥æå¯èœã§ãã:
http://git.chise.org/elisp/dist/apel/
ãããŠãFLIM ã¯ä»¥äžã§å
¥æå¯èœã§ãã:
http://git.chise.org/elisp/dist/flim/flim-1.14/
ã€ã³ã¹ããŒã«
============
(a) å±éããå Žæã§å®è¡ãã
ãããä»ã®ãã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ããããšãæãŸãªããªãã°ã以äžã®
ã¿ãå®è¡ããŠãã ããã:
% make
ããªã㯠emacs ã³ãã³ãåãæå®ããããšãå¯èœã§ããäŸãã°ã
% make EMACS=xemacs
ããã`EMACS=...' ãçç¥ããããšãEMACS=emacs ãçšããããŸãã
(b) make install
ããããªãããä»ã®ãã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ããããšãæããªãã°ã以äž
ãå®è¡ããŠãã ããã:
% make install
ããªã㯠emacs ã³ãã³ãåãæå®ããããšãå¯èœã§ããäŸãã°ã
% make install EMACS=xemacs
ããã`EMACS=...' ãçç¥ããããšãEMACS=emacs ãçšããããŸãã
ããªãã¯ãEmacs Lisp ããã°ã©ã ãšã·ã§ã«ã¹ã¯ãªããã«é¢ãããã£ã¬ã¯ããªé
å±€ã®æ¥é èªãæå®ããããšãã§ããŸããããšãã°ã:
% make install PREFIX=~/
ããã`PREFIX=...' ãçç¥ããããšãæå®ãã emacs ã³ãã³ãã®ãã£ã¬ã¯
ããªéå±€ã®æ¥é èªã䜿çšãããŸãã(ãã¶ãã/usr/local)
äŸãã°ããããPREFIX=/usr/local ããã³ãEMACS 19.34 ãæå®ããããšã
以äžã®ãããªãã£ã¬ã¯ããªéå±€ãäœæãããã§ãããã:
/usr/local/share/emacs/19.34/site-lisp/ --- emu
/usr/local/share/emacs/site-lisp/apel/ --- APEL
/usr/local/share/emacs/site-lisp/flim/ --- FLIM
/usr/local/share/emacs/site-lisp/semi/ --- SEMI
ããªãã¯ãsite-lisp ã®ãã£ã¬ã¯ããªãæå®ããããšãã§ããŸããäŸãã°ã
% make install LISPDIR=~/share/emacs/lisp
ããã`LISPDIR=...' ãçç¥ããããšãæå®ãã emacs ã³ãã³ãã®
site-lisp ãã£ã¬ã¯ããªã䜿çšãããŸã(ãã¶ãã
/usr/local/share/emacs/site-lisp ãŸãã¯
/usr/local/lib/xemacs/site-lisp)ã
ãããemu ã¢ãžã¥ãŒã« (APEL ã«å«ãŸããŠãã)ãäžè¬çã§ã¯ãªããã£ã¬ã¯ã
ãªã«ã€ã³ã¹ããŒã«ãããŠããå Žåã«ã¯ãããªãã¯ãããããã©ãã§èŠä»ãã
ãããæå®ããå¿
èŠããããŸãã:
% make install VERSION_SPECIFIC_LISPDIR=~/elisp
(c) XEmacs package ãšããŠã®ã€ã³ã¹ããŒã«
ããããªãããXEmacs package ã®ãã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ããããšãæ
ããªãã°ã以äžãå®è¡ããŠãã ããã:
% make install-package
ããªãã¯ãemacs command ã®ååãæå®ããããšãã§ããŸããããšãã°ã:
% make install-package XEMACS=xemacs-21
ããã`XEMACS=...' ãçç¥ããããšãXEMACS=xemacs ãçšããããŸãã
ããªãã¯ãpackage ã®ãã£ã¬ã¯ããªãæå®ããããšãã§ããŸããããšãã°ã:
% make install PACKAGEDIR=~/.xemacs
ããã`PACKAGEDIR=...' ãçç¥ããããšãæåã«ååšãã package ã®ãã£
ã¬ã¯ããªã䜿çšãããŸãã
XEmacs package ã·ã¹ãã ã¯ãXEmacs 21.0 以éãå¿
èŠãšããããšã«æ³šæããŠã
ã ããã
(a,b,c)
ããªãã¯ã${archive}/SEMI-CFG ãšãããã¡ã€ã«ãæžãæããããšã«ããã
ä»ã®ãªãã·ã§ã³ã®èšå®ãæå®ããããšãã§ããŸãã${archive}/README.en ãš
${archive}/SEMI-CFG ã®ã³ã¡ã³ããèªãã§ãã ããã
åæå
======
(a) load-path
ããªãã XEmacs 21.1 以éããã㯠GNU Emacs 20.4 以éã䜿çšããŠãããª
ããload-path ã«é¢ããŠå¿
èŠãªèšå®ã¯ãããŸããã
(b) mime-setup
ããªãã® ~/.emacs ã«ä»¥äžã®èšè¿°ãè¿œå ããŠãã ããã:
(load "mime-setup")
ä»å±è³æ
========
SEMI ã䜿ãå§ããããã«ã${archive}/README.en ãèªãã§ãã ããã
RFC 822, 1524, 1806, 1847, 1896, 2015, 2045, 2046, 2047, 2048 ããã³
2049 㯠anonymous ftp ãçµç±ããŠå
¥æå¯èœã§ãã:
ftp://ftp.merit.edu/internet/documents/rfc/
ã¡ãŒãªã³ã°ãªã¹ã
================
ãããããªããããã°ã¬ããŒãããã³/ãŸãã¯æ¹è¯ã®ããã®ææ¡ãæžãå Žåã«ã¯ã
ãããã Emacs-MIME ã¡ãŒãªã³ã°ãªã¹ãã«éã£ãŠãã ããã
emacs-mime-en@lists.chise.org (è±èª)
emacs-mime-ja@lists.chise.org (æ¥æ¬èª)
Emacs-MIME ML ãéããŠãSEMI ã®ãã°ãå ±åããããSEMI ã®ææ°ã®ãªãªãŒ
ã¹ã«é¢ããæ
å ±ãå
¥æããããSEMI ã®å°æ¥ã®æ¡åŒµã«ã€ããŠè°è«ããããšãªã©
ãã§ããŸããEmacs-MIME ML ã«å å
¥ãããæ¹ã¯ã以äžã®é ã®èšè¿°ãèŠãŠè³Œèª
æç¶ããè¡ã£ãŠãã ããïŒ
http://lists.chise.org/mailman/listinfo/emacs-mime-ja ïŒæ¥æ¬èªïŒ
http://lists.chise.org/mailman/listinfo/emacs-mime-en ïŒè±èªïŒ
Git ã«åºã¥ããéçº
==================
SEMI ã®éçºã«ã¯ Git ãçšããŠããã次ã®ãããªæäœã«ãã SEMI ã®ææ°ã®
ãœãŒã¹ãååŸããããšãã§ããŸãã
% git clone http://git.chise.org/git/elisp/semi.git
ãã® SEMI ã®ãªããžããªãŒã¯ WWW çµç±ã§ãé²èŠ§ããããšãã§ããŸãïŒ
http://git.chise.org/gitweb/?p=elisp/semi.git
Git ã«åºã¥ããéçºã«åå ããããšãã¯ããŸã Emacs-MIME ã¡ãŒãªã³ã°ãªã¹
ãã«ãŠãã®æšã宣èšããŠãã ããã
æã
ã¯å€ãã®æ¹ããã®éãããéçºã«åå ããŠãã ããããšãæãã§ããŸãã
äœè
====
å
ã®äœè
MORIOKA Tomohiko <morioka@jaist.ac.jp>
(SEMI ã®ãããããªéšåãš mime-view ã®äœè
)
UMEDA Masanobu <umerin@mse.kyutech.ac.jp>
(emacs-mime-tools ã® mime.el ã®äœè
ãmime.el 㯠SEMI ã®
meme-edit.el ã®ååã§ã)
ä»ã®äœè
Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
(ããããã®ã³ãŒããš signature.el ã®äž»èŠãªäœè
)
MASUTANI Yasuhiro <masutani@me.es.osaka-u.ac.jp>
(mime-play.el ã® anonymous ftp ã³ãŒã)
OKABE Yasuo <okabe@kudpc.kyoto-u.ac.jp>
(mime-partial.el ãš signature.el ã®äž»èŠãªäœè
)
Steinar Bang <sb@metis.no>
Steven L. Baur <steve@miranova.com>
Kevin Broadey <KevinB@bartley.demon.co.uk>
Alastair Burt <burt@dfki.uni-kl.de>
Eric Ding <ericding@San-Jose.ate.slb.com>
Thierry Emery <Thierry.Emery@aar.alcatel-alsthom.fr>
Simon Josefsson <jas@pdc.kth.se>
Jens Lautenbacher <jtl@tkm.physik.uni-karlsruhe.de>
Carsten Leonhardt <leo@arioch.tng.oche.de>
Pekka Marjola <marjola@bilbo.ntc.nokia.com>
Hisashi Miyashita <himi@bird.scphys.kyoto-u.ac.jp>
Kazuhiro Ohta <ohta@ele.cst.nihon-u.ac.jp>
Alexandre Oliva <oliva@dcc.unicamp.br>
François Pinard <pinard@iro.umontreal.ca>
Artur Pioro <artur@flugor.if.uj.edu.pl>
Dan Rich <drich@morpheus.corp.sgi.com>
(XEmacs ãšå
±ã« mime-image.el ãçºå±ãããããã«å¯äž)
Katsumi Yamaoka <yamaoka@jpl.org>
07070100000006000081A4000003E80000006400000001627140E500000DD4000000000000000000000000000000000000002700000000semi-1.14.6+239+gb1c245b81715/SEMI-CFG;;; -*-Emacs-Lisp-*-
;; SEMI-CFG: installation setting about SEMI.
;;; Code:
(defvar default-load-path load-path)
(add-to-list 'load-path
(expand-file-name "../../site-lisp/apel" data-directory))
(add-to-list 'load-path
(expand-file-name "." data-directory))
(if (boundp 'LISPDIR)
(progn
(add-to-list 'default-load-path LISPDIR)
(add-to-list 'load-path LISPDIR)
(add-to-list 'load-path (expand-file-name "emu" LISPDIR))
(add-to-list 'load-path (expand-file-name "apel" LISPDIR))
))
(defvar VERSION_SPECIFIC_LISPDIR nil)
(if VERSION_SPECIFIC_LISPDIR
(add-to-list 'load-path VERSION_SPECIFIC_LISPDIR))
(if (boundp 'PACKAGE_LISPDIR)
(let ((default-directory PACKAGE_LISPDIR))
(normal-top-level-add-subdirs-to-load-path)))
(condition-case nil
(require 'install)
(error (error "Please install APEL 8.7 or later.")))
(add-path "bitmap-mule")
(add-path "flim")
(add-to-list 'load-path (expand-file-name "."))
(or (module-installed-p 'calist)
(error "Please install APEL 8.7 or later."))
(or (module-installed-p 'mime)
(error "Please install FLIM 1.6.0 or later."))
(if (module-installed-p 'tm-view)
(message "Please remove tm from load-path."))
;;; @ Please specify optional package directory if you use them.
;;;
;; It is only necessary to use `add-path' if these packages are not
;; already on the standard load-path of Emacs.
;; Function `get-latest-path' detect latest version of such package
;; under load-path directories. If you want to use a version of a
;; package instead of latest version, please specify by argument of
;; function `add-path'.
;; Function `add-path' finds path under load-path directories. If a
;; package does not exist in load-path, please specify by absolutely
;; (`~/' is available), for example
;; (add-path "~/lib/elisp/bbdb")
;; or
;; (add-path "/opt/share/xmule/site-lisp/bbdb")
;;; @@ Please specify BBDB path.
;;;
(let ((path (get-latest-path "bbdb" 'all-paths)))
(if path
(progn
(add-path path)
(add-path (expand-file-name "lisp" path)) ; run-in-place installation
)))
;; Or please specify path.
;; (add-path "bbdb-1.50" 'all-paths)
;;;
;;; @@ Please specify Emacs/W3 path.
;;;
(let ((path (get-latest-path "w3" 'all-paths)))
(if path
(progn
(add-path path)
(add-path (expand-file-name "lisp" path)) ; run-in-place installation
)))
;; Or please specify path.
;; (add-path "w3-4.0pre.20" 'all-paths)
;;;
;;; @@ Please specify CUSTOM path.
;;;
(add-latest-path "custom")
;;; @ Please specify prefix of install directory.
;;;
;; Please specify install path prefix.
;; If it is omitted, shared directory (maybe /usr/local is used).
(defvar PREFIX install-prefix)
;;(setq PREFIX "~/")
;; Please specify emu prefix [optional]
(setq EMU_PREFIX
(if (string-match "XEmacs" emacs-version)
"emu"
""))
;; Please specify SEMI prefix [optional]
(setq SEMI_PREFIX "semi")
;;; @ executables
;;;
;; Please specify binary path. (for external method scripts)
(setq METHOD_DIR (expand-file-name "share/semi" PREFIX))
;;; @ optional settings
;;;
;; It is generated by automatically. Please set variable `PREFIX'.
;; If you don't like default directory tree, please set it.
(defvar LISPDIR (install-detect-elisp-directory PREFIX))
;; (setq install-default-elisp-directory "~/lib/emacs/lisp")
(setq SEMI_KERNEL_DIR (expand-file-name SEMI_PREFIX LISPDIR))
(setq SETUP_FILE_DIR SEMI_KERNEL_DIR)
(defvar PACKAGEDIR (install-get-default-package-directory))
;;; SEMI-CFG ends here
07070100000007000081A4000003E80000006400000001627140E5000003F4000000000000000000000000000000000000002700000000semi-1.14.6+239+gb1c245b81715/SEMI-ELS;;; -*-Emacs-Lisp-*-
;; SEMI-ELS: list of SEMI modules to install
;;; Code:
(setq semi-modules-to-compile
'(signature
mime-pgp mime-tnef
semi-def mime-view mime-play mime-partial
mime-edit mime-signature
semi-setup mail-mime-setup))
(setq semi-modules-not-to-compile nil)
(mapcar (function
(lambda (cell)
(let ((c-module (car cell))
(i-modules (cdr cell))
)
(if (module-installed-p c-module)
(setq semi-modules-to-compile
(nconc semi-modules-to-compile i-modules))
(setq semi-modules-not-to-compile
(nconc semi-modules-not-to-compile i-modules))
)
)))
'((w3 mime-w3)
(bbdb-vcard-vcard21 mime-vcard)
(shr mime-shr)
))
(setq semi-modules-to-compile
(nconc semi-modules-to-compile '(mime-image)))
(when (eq system-type 'darwin)
(setq semi-modules-to-compile
(nconc semi-modules-to-compile '(mime-mac))))
(setq semi-modules (append semi-modules-to-compile
semi-modules-not-to-compile))
;;; SEMI-ELS ends here
07070100000008000081A4000003E80000006400000001627140E5000007E6000000000000000000000000000000000000002600000000semi-1.14.6+239+gb1c245b81715/SEMI-MK;;; -*-Emacs-Lisp-*-
;; SEMI-MK: installer for SEMI.
;;; Code:
(defun config-semi ()
(let (prefix exec-prefix lisp-dir version-specific-lisp-dir)
(and (setq prefix (car command-line-args-left))
(or (string-equal "NONE" prefix)
(defvar PREFIX prefix)
))
(setq command-line-args-left (cdr command-line-args-left))
(and (setq lisp-dir (car command-line-args-left))
(or (string-equal "NONE" lisp-dir)
(defvar LISPDIR lisp-dir)
))
(setq command-line-args-left (cdr command-line-args-left))
(and (setq version-specific-lisp-dir (car command-line-args-left))
(or (string-equal "NONE" version-specific-lisp-dir)
(progn
(defvar VERSION_SPECIFIC_LISPDIR version-specific-lisp-dir)
(princ (format "VERSION_SPECIFIC_LISPDIR=%s\n"
VERSION_SPECIFIC_LISPDIR)))
))
(setq command-line-args-left (cdr command-line-args-left))
(and (setq package-lisp-dir (car command-line-args-left))
(or (string-equal "NONE" package-lisp-dir)
(progn
(defvar PACKAGE_LISPDIR
(if (boundp (intern package-lisp-dir))
(symbol-value (intern package-lisp-dir))
package-lisp-dir))
(princ (format "PACKAGE_LISPDIR=%s\n"
PACKAGE_LISPDIR)))))
(setq command-line-args-left (cdr command-line-args-left)))
(load-file "SEMI-CFG")
(load-file "SEMI-ELS")
(princ (format "PREFIX=%s
LISPDIR=%s\n" PREFIX LISPDIR))
)
(defun directory= (dir1 dir2)
(string= (file-name-as-directory dir1)(file-name-as-directory dir2))
)
(defun compile-semi ()
;; to avoid to read situation-examples-file at compile time.
(setq mime-situation-examples-file nil)
(config-semi)
(print load-path)
(compile-elisp-modules semi-modules-to-compile ".")
(compile-elisp-module 'mime-setup ".")
)
(defun install-semi ()
(config-semi)
(princ (format "%s\n" emacs-version))
(install-elisp-modules semi-modules "." SEMI_KERNEL_DIR)
(install-elisp-modules '(mime-setup) "." SETUP_FILE_DIR)
)
;;; SEMI-MK ends here
07070100000009000081A4000003E80000006400000001627140E5000002F3000000000000000000000000000000000000002D00000000semi-1.14.6+239+gb1c245b81715/SEMI-naming.ol* MIME-View
** mime-entity-*
mime-entity related functions.
** mime-raw-*
mime-raw-buffer related features.
- buffer local variables in mime-raw-buffer
- functions expected running in mime-raw-buffer
** mime-preview-*
mime-preview-buffer related features.
- buffer local variables in mime-preview-buffer
- functions expected running in mime-preview-buffer
** mime-display-*
- functions to make presentation in mime-preview-buffer from
element(s) of mime-raw-buffer
** mime-view-*
MIME-View related general features.
- variables or functions related with both mime-raw-buffer and
mime-preview-buffer
- customizable variables
- view something and enter another mode in another buffer
0707010000000A000081A4000003E80000006400000001627140E5000006E3000000000000000000000000000000000000002300000000semi-1.14.6+239+gb1c245b81715/TODO[TODO]
======
* MIME-View
** dynamic configuration for 'mime-preview-condition
** Don't expect raw-buffer
** lazy generating of situations from mime-entity information
* MIME-Edit
** WYSIWYG editing support
** Use MIME-Preview like tag and display
** Redesign to use two buffers for one message
MIME-View is based on "Multiple Representation Space (layer) Model".
In this model, network representation and its presentation are
distinguished. Thus MIME-View uses two buffers for one message,
'mime-raw-buffer (for network representation) and
'mime-preview-buffer. MIME-View manages them based on information of
entities. According to experience of MIME-View, this model is good to
treat complex structured data, such as MIME.
MIME-Edit was designed to use one buffer for one message. So it is
hard to edit like WYSIWYG style. Format of tag is limited by
translation. Content of forwarded message is unreadable. It is
better to introduce "Multiple Representation Space Model" to resolve
these problems.
** Check available MIME-charset
MIME-charset $B0J30$,@8@.$5$l$k>l9g$N=hM}$r;XDj$G$-$k$h$&$K$9$k!#(B
For example:
(a) translate problematic characters to similar representation
(b) display warning message
(e.g. "`x-ctext' is generated. Do you send it? (yes/no)")
(c) stop sending
** Don't use buffer-local variables
Don't use buffer-local variables to control behavior about
translating to network representation, such as 'mime-transfer-level,
'mime-transfer-level-string,
'mime-edit-charset-default-encoding-alist, 'mime-edit-pgp-processing.
Because they have problem with Semi-gnus.
* Etc.
** Write manual
[Known Bugs]
============
* MIME-Edit
** Content-ID is mandatory for message/external-body
0707010000000B000081A4000003E80000006400000001627140E500002002000000000000000000000000000000000000002600000000semi-1.14.6+239+gb1c245b81715/VERSION[SEMI Version names]
0.72 -------- --------
0.75 -------- --------
0.83 -------- --------
0.87 -------- --------
0.88 -------- --------
0.91 -------- --------
0.92 -------- --------
;;-------------------------------------------------------------------------
;; Hokuriku Railway åéžéé
;; Ishikawa Line ç³å·ç·
;;-------------------------------------------------------------------------
0.96 Kaga-Ichinomiya å è³äžã®å®® ; ïŒçœå±±æ¯å©ç¥ç€ŸïŒ
0.97 Naka-Tsurugi äžé¶Žæ¥
0.112 Tsurugi é¶Žæ¥ ; <=> ããããã¹
0.115 Hinomiko æ¥åŸ¡å
0.115.1 Oyanagi å°æ³
0.115.2 Inokuchi äºå£
0.116 DÅhÅji éæ³å¯º
0.118 Sodani æœè°·
0.118.1 Shijima ååäž
0.118.2 Otomaru ä¹äžž
1.0.0 NukajÅ«taku-mae é¡äœå®
å
1.0.1 Magae 銬æ¿
1.0.2 Nonoichi-KÅdaimae éã
åžå·¥å€§å
1.1.0 Nonoichi éã
åž
1.1.1 Oshino æŒé
1.1.2 Shin-Nishikanazawa æ°è¥¿éæ²¢ ; <=> JR 西éæ²¢
1.2.0 Nishiizumi 西æ³
1.2.1 Nomachi éçº
;;-------------------------------------------------------------------------
;; West Japan Railway 西æ¥æ¬æ
客éé http://www.westjr.co.jp/
;; Hokuriku Line åéžæ¬ç·
;;-------------------------------------------------------------------------
1.2.2 Naoetsu çŽæ±æŽ¥ ; = JR ä¿¡è¶æ¬ç·
1.2.3 Tanihama è°·æµ
1.2.4 Arimagawa æéå·
1.3.0 Nadachi åç«
1.3.1 Tsutsuishi çç³
1.3.2 NÅ èœç
1.3.3 Uramoto 浊æ¬
1.3.4 Kajiyashiki 梶å±æ·
1.4.0 Itoigawa 糞éå· ; = JR 倧糞ç·
1.4.1 Åmi éæµ·
1.4.2 Oyashirazu 芪äžç¥
1.4.3 Ichiburi åžæ¯
1.4.4 EcchÅ«-Miyazaki è¶äžå®®åŽ
1.4.5 Tomari æ³
1.4.6 NyÅ«zen å
¥å
1.5.0 Nishi-NyÅ«zen 西å
¥å
1.5.1 Ikuji çå°
1.5.2 Kurobe é»éš
1.5.3 Uozu é接 ; <=> å¯å±±å°æ¹éé
1.5.4 Higashi-Namerikawa æ±æ»å·
1.6.0 Namerikawa æ»å· ; <=> å¯å±±å°æ¹éé
1.7.0 Mizuhashi æ°Žæ©
1.7.1 Higashi-Toyama æ±å¯å±±
1.8.0 Toyama å¯å±± ; = JR é«å±±æ¬ç·ãå¯å±±æž¯ç·
1.8.1 Kureha å矜
1.8.2 Kosugi å°æ
1.8.3 EcchÅ«-Daimon è¶äžå€§é
1.8.4 Takaoka é«å²¡ ; = JR æ°·èŠç·ãå端ç·
1.8.5 Nishi-Takaoka 西é«å²¡
1.8.6 Fukuoka çŠå²¡
1.9.0 Isurugi ç³å
1.9.1 Kurikara å¶å©äŒœçŸ
1.10.0 Tsubata 接幡
1.10.1 Morimoto 森æ¬
1.10.2 Higashi-Kanazawa æ±éæ²¢
1.11.0 Kanazawa éæ²¢ ; <=> åéžéé åééæ²¢
1.12.0 Nishi-Kanazawa 西éæ²¢ ; <=> åéžéé æ°è¥¿éæ²¢
1.12.1 [JR] Nonoichi [JR] éã
åž
1.13.0 MattÅ æŸä»»
1.13.1 Kaga-Kasama å è³ç¬ é
1.13.2 Mikawa çŸå·
1.13.3 Komaiko å°èå
1.13.4 Terai 寺äº
1.13.5 MeihÅ æå³°
1.13.6 Komatsu å°æŸ
1.13.7 Awazu ç²æŽ¥
1.14.0 Iburihashi åæ©
1.14.1 Kaga-Onsen å è³æž©æ³
1.14.2 DaishÅji 倧è寺
1.14.3 Ushinoya çãè°·
1.14.4 Hosorogi 现åæš
1.14.5 Awara-Onsen èŠåæž©æ³
1.14.6 Maruoka 䞞岡
1.14.7 Harue æ¥æ±
------- Morita 森ç°
------- Fukui çŠäº
: : :
------- Tsuruga æŠè³ ; = JR å°æµç·
------- Shin-Hikida æ°çç°
------- Åmi-Shiotsu è¿æ±å¡©æŽ¥ ; = JR æ¹è¥¿ç·
------- Yogo äœå
------- Kinomoto æšãæ¬
------- Takatsuki é«æ
------- Kawake æ²³æ¯
------- Torahime è姫
------- Nagahama é·æµ
------- Tamura ç°æ
------- Sakata åç°
(Maibara) (ç±³å) ; = JR æ±æµ·éæ¬ç·
[WEMI version names]
;;-------------------------------------------------------------------------
;; East Japan Railway æ±æ¥æ¬æ
客éé http://www.jreast.co.jp/
;; TÅkaidÅ Line æ±æµ·éæ¬ç·
;;-------------------------------------------------------------------------
1.2.0 TÅkyÅ æ±äº¬
1.2.1 Shinbashi æ°æ© ; = JR å±±æç·ã暪é è³ç·
1.2.2 Shinagawa åå· ; = JR å±±æç·ã暪é è³ç·
1.2.3 Kawasaki å·åŽ ; = JR åæŠç·
1.2.4 Yokohama æšªæµ ; = JR 京æµæ±åç·ã»æ ¹å²žç·ã暪é è³ç·
1.3.0 Totsuka æžå¡ ; = JR 暪é è³ç·
1.3.1 Åfuna å€§è¹ ; = JR æ ¹å²žç·ã暪é è³ç·
1.4.0 Fujisawa è€æ²¢ ; <=> å°ç°æ¥é»é æ±ã島ç·ãæ±ã島é»é
1.4.1 TsujidŠ蟻å ; ïŒã蟻ã= J90@B-4454:128bïŒ
1.4.2 Chigasaki è
ã¶åŽ ; = JR çžæš¡ç·
1.4.3 Hiratsuka å¹³å¡
1.4.4 Åiso 倧磯
1.4.5 Ninomiya äºå®®
1.4.6 KÅzu åœåºæŽ¥ ; = JR åŸ¡æ®¿å Žç·
1.5.0 Kamonomiya 鎚宮
1.5.1 Odawara å°ç°å ; <=> å°ç°æ¥ãç®±æ ¹ç»å±±ééã
; äŒè±ç®±æ ¹éé
1.5.2 Hayakawa æ©å·
1.5.3 Nebukawa æ ¹åºå·
1.5.4 Manazuru ç鶎
1.6.0 Yugawara 湯河å
1.7.0 Atami ç±æµ· ; = JR äŒæ±ç·
;;-------------------------------------------------------------------------
;; Central Japan Railway æ±æµ·æ
客éé
;;-------------------------------------------------------------------------
1.7.1 Kan'nami åœå
1.8.0 Mishima äžå³¶ ; = äŒè±ç®±æ ¹éé
1.8.1 Numazu 沌接 ; = JR åŸ¡æ®¿å Žç·
1.8.2 Katahama çæµ
1.8.4 Hara å
1.8.5 Higashi-Tagonoura æ±ç°åã浊
1.8.6 Yoshiwara åå ; = å²³åéé
1.9.0 Fuji å¯å£« ; = JR 身延ç·
1.9.1 Fujikawa å¯å£«å·
1.10.0 Shin-Kambara æ°è²å
1.10.1 Kambara è²å
1.10.2 Yui ç±æ¯
1.11.0 Okitsu è接
1.12.0 Shimizu æž
æ°Ž
1.12.1 Kusanagi èè
1.13.0 Shizuoka é岡
1.13.1 Abekawa å®åå·
1.13.2 Mochimune çšå®
1.13.3 Yaizu çŒæŽ¥
1.13.4 Nishi-Yaizu 西çŒæŽ¥
1.13.5 Fijieda è€æ
1.13.6 RokugÅ å
å
1.13.7 Shimada 島ç°
1.14.0 Kanaya éè°· ; = 倧äºå·éé
------ Kikugawa èå·
------ Kakegawa æå· ; = 倩ç«æµåæ¹éé
------ Fukuroi è¢äº
------ Iwata ç£ç°
------ ToyodachÅ è±ç°çº
------ TenryÅ«gawa 倩ç«å·
------ Hamamatsu æµæŸ ; = é å·éé
------ Takatsuka é«å¡
------ Maisaka èéª
------ Bentenjima åŒå€©å³¶
------ Araimachi æ°å±
çº
------ Wasizu 鷲接
------ Shinjohara æ°æå ; = 倩ç«æµåæ¹éé
------ Futagawa äºæ²³
------ Toyohashi è±æ© ; = JR 飯ç°ç·
: : :
------ Kanayama éå±± ; =ïŒJR äžå€®æ¬ç·ïŒ
------ OtÅbashi å°Ÿé æ©
------ Nagoya åå€å± ; = JR é¢è¥¿æ¬ç·ïŒã»äžå€®æ¬ç·ïŒ
: : :
------ Gifu å²é ; = JR é«å±±æ¬ç·
: : :
------ Samegai éã¶äº
;;-------------------------------------------------------------------------
;; West Japan Railway 西æ¥æ¬æ
客éé http://www.westjr.co.jp/
;;-------------------------------------------------------------------------
------ Maibara ç±³å ; = JR åéžæ¬ç·
: : :
------ Kusatsu è接 ; = JR è接ç·
: : :
------ Yamashina å±±ç§ ; = JR æ¹è¥¿ç·
------ KyÅto äº¬éœ ; = JR å¥è¯ç·ã»å±±é°æ¬ç·
; <=> è¿é 京éœç·ã京éœåžäº€éå± çäžžç·
: : :
------ Åsaka å€§éª ; = JR 倧éªç°ç¶ç· <=> JR æ±è¥¿ç· åæ°å°
; <=> 倧éªåžäº€éå±ãéªç¥ãéªæ¥ æ¢
ç°
: : :
------ KÅbe ç¥æž ; = JR å±±éœæ¬ç·
[REMI version names]
;;-------------------------------------------------------------------------
;; West Japan Railway 西æ¥æ¬æ
客éé http://www.westjr.co.jp/
;; Himi Line æ°·èŠç·
;;-------------------------------------------------------------------------
1.4.0 Himi æ°·èŠ
1.5.0 Shimao 島尟
1.6.0 Amaharashi éšæŽ
1.8.0 EcchÅ«-Kokubu è¶äžåœå
1.8.1 Fushiki äŒæš ; <=> ãŠã©ãžãªã¹ãããã¯èªè·¯
1.8.2 NÅmachi èœçº
1.8.3 EcchÅ«-Nakagawa è¶äžäžå·
1.8.4 Takaoka é«å²¡ ; = JR åéžæ¬ç·ãå端ç·
;;-------------------------------------------------------------------------
;; Hokuetsu Express åè¶æ¥è¡
;; http://www.tiara.or.jp/~tokamaci/hokuhoku/hokuhoku.html
;; Hokuhoku Line ã»ãã»ãç·
;;-------------------------------------------------------------------------
1.13.0 Saigata çæœ ; = JR ä¿¡è¶æ¬ç·
1.13.1 Kubiki ãã³ã
1.13.2 Åike-Ikoinomori å€§æ± ãããã®æ£®
1.14.0 Uragawara ããããã
1.14.1 MushigawaÅsugi è«å·å€§æ
1.14.2 Hokuhoku-Åshima ã»ãã»ã倧島
1.14.3 Matsudai ãŸã€ã ã
[etc.]
;;-------------------------------------------------------------------------
;; West Japan Railway 西æ¥æ¬æ
客éé http://www.westjr.co.jp/
;; Kosei Line æ¹è¥¿ç·
;;-------------------------------------------------------------------------
------- (Åmi-Shiotsu) (è¿æ±å¡©æŽ¥) ; = JR åéžæ¬ç·
: : :
------- Nishi-Åtsu 西倧接
(Yamashina) (å±±ç§) ; = JR æ±æµ·éæ¬ç·
0707010000000C000081A4000003E80000006400000001627140E5000001CF000000000000000000000000000000000000002500000000semi-1.14.6+239+gb1c245b81715/ftp.in--<<alternative>>-{
It is available from
http://kanji.zinbun.kyoto-u.ac.jp/~tomo/lemi/dist/semi/semi-API-for-flim-FLIM_API/
--[[message/external-body; access-type=URL;
URL*0="http://";
URL*1="kanji.zinbun.kyoto-u.ac.jp/~tomo/";
URL*2="lemi/dist/";
URL*3="semi/semi-API-for-flim-FLIM_API/";
URL*4="PACKAGE-VERSION.tar.gz"]]
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="PACKAGE-VERSION.tar.gz"
--}-<<alternative>>
0707010000000D000081A4000003E80000006400000001627140E500000748000000000000000000000000000000000000003100000000semi-1.14.6+239+gb1c245b81715/mail-mime-setup.el;;; mail-mime-setup.el --- setup file for mail-mode. -*- lexical-binding: t -*-
;; Copyright (C) 1994,1995,1996,1997,1998,2000 Free Software Foundation, Inc.
;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Keywords: mail-mode, MIME, multimedia, multilingual, encoded-word
;; This file is part of SEMI (Setting for Emacs MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Code:
(require 'semi-setup)
(require 'alist)
(autoload 'turn-on-mime-edit "mime-edit"
"Unconditionally turn on MIME-Edit minor mode." t)
;; (autoload 'eword-decode-header "eword-decode"
;; "Decode MIME encoded-words in header fields." t)
;;; @ for mail-mode, RMAIL and VM
;;;
;; (add-hook 'mail-setup-hook 'eword-decode-header)
(add-hook 'mail-setup-hook 'turn-on-mime-edit 'append)
(add-hook 'mail-send-hook 'mime-edit-maybe-translate)
(set-alist 'mime-edit-split-message-sender-alist
'mail-mode (lambda ()
(interactive)
(funcall send-mail-function)))
;;; @ for signature
;;;
(if mime-setup-use-signature
(setq mail-signature nil))
;;; @ end
;;;
(provide 'mail-mime-setup)
;;; mail-mime-setup.el ends here
0707010000000E000081A4000003E80000006400000001627140E500019624000000000000000000000000000000000000002B00000000semi-1.14.6+239+gb1c245b81715/mime-edit.el;; -*- mode: emacs-lisp; coding: utf-8; lexical-binding: t -*-
;;; mime-edit.el --- Simple MIME Composer for GNU Emacs
;; Copyright (C) 1993,94,95,96,97,98,99,2000,01,02,03
;; Free Software Foundation, Inc.
;; Author: UMEDA Masanobu <umerin@mse.kyutech.ac.jp>
;; MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
;; Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
;; Created: 1994/08/21 renamed from mime.el
;; Renamed: 1997/2/21 from tm-edit.el
;; Keywords: MIME, multimedia, multilingual, mail, news
;; This file is part of SEMI (Sophisticated Emacs MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Commentary:
;; This is an Emacs minor mode for editing Internet multimedia
;; messages formatted in MIME (RFC 2045, 2046, 2047, 2048 and 2049).
;; All messages in this mode are composed in the tagged MIME format,
;; that are described in the following examples. The messages
;; composed in the tagged MIME format are automatically translated
;; into a MIME compliant message when exiting the mode.
;; Mule (multilingual feature of Emacs 20 and multilingual extension
;; for XEmacs 20) has a capability of handling multilingual text in
;; limited ISO-2022 manner that is based on early experiences in
;; Japanese Internet community and resulted in RFC 1468 (ISO-2022-JP
;; charset for MIME). In order to enable multilingual capability in
;; single text message in MIME, charset of multilingual text written
;; in Mule is declared as either `ISO-2022-JP-2' [RFC 1554]. Mule is
;; required for reading the such messages.
;; This MIME composer can work with Mail mode, mh-e letter Mode, and
;; News mode. First of all, you need the following autoload
;; definition to load mime-edit-mode automatically:
;;
;; (autoload 'turn-on-mime-edit "mime-edit"
;; "Minor mode for editing MIME message." t)
;;
;; In case of Mail mode (includes VM mode), you need the following
;; hook definition:
;;
;; (add-hook 'mail-mode-hook 'turn-on-mime-edit)
;; (add-hook 'mail-send-hook 'mime-edit-maybe-translate)
;;
;; In case of MH-E, you need the following hook definition:
;;
;; (add-hook 'mh-letter-mode-hook
;; (function
;; (lambda ()
;; (turn-on-mime-edit)
;; (make-local-variable 'mail-header-separator)
;; (setq mail-header-separator "--------")
;; ))))
;; (add-hook 'mh-before-send-letter-hook 'mime-edit-maybe-translate)
;;
;; In case of News mode, you need the following hook definition:
;;
;; (add-hook 'news-reply-mode-hook 'turn-on-mime-edit)
;; (add-hook 'news-inews-hook 'mime-edit-maybe-translate)
;;
;; In case of Emacs 19, it is possible to emphasize the message tags
;; using font-lock mode as follows:
;;
;; (add-hook 'mime-edit-mode-hook
;; (function
;; (lambda ()
;; (font-lock-mode 1)
;; (setq font-lock-keywords (list mime-edit-tag-regexp))
;; ))))
;; The message tag looks like:
;;
;; --[[TYPE/SUBTYPE;PARAMETERS][ENCODING]]
;;
;; The tagged MIME message examples:
;;
;; This is a conventional plain text. It should be translated into
;; text/plain.
;;
;;--[[text/plain]]
;; This is also a plain text. But, it is explicitly specified as is.
;;--[[text/plain; charset=ISO-8859-1]]
;; This is also a plain text. But charset is specified as iso-8859-1.
;;
;; ¡Hola! Buenos dÃas. ¿Cómo está usted?
;;--[[text/enriched]]
;; <center>This is a richtext.</center>
;;
;;--[[image/gif][base64]]^M...image encoded in base64 comes here...
;;
;;--[[audio/basic][base64]]^M...audio encoded in base64 comes here...
;;; Code:
(require 'mail-utils)
(require 'sendmail)
(require 'alist)
(require 'pccl)
(require 'invisible)
(require 'mel)
(require 'mime-view)
(require 'epa)
(autoload 'eword-encode-string "eword-encode")
(autoload 'eword-decode-and-unfold-unstructured-field-body "eword-decode")
;;; @ version
;;;
(eval-and-compile
(defconst mime-edit-version
(concat
(mime-product-name mime-user-interface-product) " "
(mapconcat #'number-to-string
(mime-product-version mime-user-interface-product) ".")
" - \"" (mime-product-code-name mime-user-interface-product) "\"")))
;;; @ variables
;;;
(defgroup mime-edit nil
"MIME edit mode"
:group 'mime)
(defcustom mime-ignore-preceding-spaces nil
"*Ignore preceding white spaces if non-nil."
:group 'mime-edit
:type 'boolean)
(defcustom mime-ignore-trailing-spaces nil
"*Ignore trailing white spaces if non-nil."
:group 'mime-edit
:type 'boolean)
(defcustom mime-ignore-same-text-tag t
"*Ignore preceding text content-type tag that is same with new one.
If non-nil, the text tag is not inserted unless something different."
:group 'mime-edit
:type 'boolean)
(defcustom mime-auto-hide-body t
"*Hide non-textual body encoded in base64 after insertion if non-nil."
:group 'mime-edit
:type 'boolean)
(defcustom mime-edit-insert-file-confirm t
"*Confirm guessed mime type when inserting files."
:group 'mime-edit
:type 'boolean)
(defcustom mime-edit-voice-recorder
(function mime-edit-voice-recorder-for-sun)
"*Function to record a voice message and encode it."
:group 'mime-edit
:type 'function)
(defcustom mime-edit-mode-hook nil
"*Hook called when enter MIME mode."
:group 'mime-edit
:type 'hook)
(defcustom mime-edit-translate-hook nil
"*Hook called before translating into a MIME compliant message.
To insert a signature file automatically, call the function
`mime-edit-insert-signature' from this hook."
:group 'mime-edit
:type 'hook)
(defcustom mime-edit-exit-hook nil
"*Hook called when exit MIME mode."
:group 'mime-edit
:type 'hook)
(defvar mime-content-types
'(("text"
;; Charset parameter need not to be specified, since it is
;; defined automatically while translation.
("plain"
;;("charset" "" "ISO-2022-JP" "US-ASCII" "ISO-8859-1" "ISO-8859-8")
)
("enriched")
("html")
("css") ; rfc2318
("csv") ; rfc4180
("xml") ; rfc2376
("xml") ; rfc2376
("vcard") ; rfc6350
;; ("x-rot13-47-48")
)
("message"
("external-body"
("access-type"
("anon-ftp"
("site" "ftp.jaist.ac.jp" "wnoc-fuk.wide.ad.jp" "nic.karrn.ad.jp")
("directory" "/pub/GNU/elisp/mime")
("name")
("mode" "image" "ascii" "local8"))
("ftp"
("site")
("directory")
("name")
("mode" "image" "ascii" "local8"))
("tftp" ("site") ("name"))
("afs" ("site") ("name"))
("local-file" ("site") ("name"))
("mail-server"
("server" "ftpmail@nic.karrn.ad.jp")
("subject"))
("url" ("url"))))
("rfc822")
("news"))
("application"
("javascript")
("msword")
("octet-stream" ("type" "" "tar" "shar"))
("postscript")
("pdf")
("rtf")
("zip")
("x-shockwave-flash")
("x-7z-compressed")
; OpenOffice
("vnd.oasis.opendocument.text")
("vnd.oasis.opendocument.spreadsheet")
("vnd.oasis.opendocument.graphics")
("vnd.oasis.opendocument.chart")
("vnd.oasis.opendocument.formula")
("vnd.oasis.opendocument.text-master")
("vnd.oasis.opendocument.presentation")
("vnd.oasis.opendocument.text-template")
("vnd.oasis.opendocument.spreadsheet-template")
("vnd.oasis.opendocument.presentation-template")
("vnd.oasis.opendocument.graphics-template")
("msword")
("vnd.ms-excel")
("vnd.ms-powerpoint")
; Microsoft Office (OpenXML)
("vnd.ms-excel.addin.macroEnabled.12")
("vnd.ms-excel.sheet.binary.macroEnabled.12")
("vnd.ms-excel.sheet.macroEnabled.12")
("vnd.ms-excel.template.macroEnabled.12")
("vnd.ms-powerpoint.addin.macroEnabled.12")
("vnd.ms-powerpoint.presentation.macroEnabled.12")
("vnd.ms-powerpoint.slideshow.macroEnabled.12")
("vnd.ms-powerpoint.template.macroEnabled.12")
("vnd.ms-word.document.macroEnabled.12")
("vnd.ms-word.template.macroEnabled.12")
("vnd.openxmlformats-officedocument.presentationml.presentation")
("vnd.openxmlformats-officedocument.presentationml.slideshow")
("vnd.openxmlformats-officedocument.presentationml.template")
("vnd.openxmlformats-officedocument.spreadsheetml.sheet")
("vnd.openxmlformats-officedocument.spreadsheetml.template")
("vnd.openxmlformats-officedocument.wordprocessingml.document")
("vnd.openxmlformats-officedocument.wordprocessingml.template")
("vnd.ms-xpsdocument")
; Microsoft Project
("vnd.ms-project")
("vnd.ms-tnef")
("ms-tnef")
("x-kiss" ("x-cnf")))
("image"
("bmp")
("gif")
("jpeg")
("png")
("svg+xml")
("tiff")
("x-pic")
("x-mag")
("x-xwd")
("x-xbm"))
("audio"
("basic")
("mpeg")
("ogg")
("vorbis"))
("video"
("mpeg")
("ogg")
("mp4")
("quicktime")
("x-flv")))
"*Alist of content-type, subtype, parameters and its values.")
(defcustom mime-file-types
(eval-when-compile
(mapcar
(lambda (list)
(let ((name '(nil nil nil "name" nil nil "filename")))
(mapcar (lambda (elt)
(prog1
(if (and (car name)
(null (assoc (car name) elt)))
(nreverse `((,(car name) . file)
. ,(reverse elt)))
elt)
(setq name (cdr name))))
list)))
'(
;; Programming languages
("\\.cc$"
"application" "octet-stream" (("type" . "C++") ("charset" . charset))
"7bit"
"attachment" nil)
("\\.el$"
"application" "octet-stream" (("type" . "emacs-lisp") ("charset" . charset))
"7bit"
"attachment" nil)
("\\.lsp$"
"application" "octet-stream" (("type" . "common-lisp") ("charset" . charset))
"7bit"
"attachment" nil)
("\\.pl$"
"application" "octet-stream" (("type" . "perl") ("charset" . charset))
"7bit"
"attachment" nil)
;; Text or translated text
("\\.txt$\\|\\.pln$"
"text" "plain" (("charset" . charset))
nil
"inline" nil)
("\\.css$"
"text" "css" (("charset" . charset))
nil
"inline" nil)
("\\.csv$"
"text" "csv" (("charset" . charset))
nil
"inline" nil)
("\\.tex$\\|\\.latex$"
"text" "x-latex" (("charset" . charset))
nil
"inline" nil)
;; .rc : procmail modules pm-xxxx.rc
;; *rc : other resource files
("\\.\\(rc\\|lst\\|log\\|sql\\|mak\\)$\\|\\..*rc$"
"text" "plain" (("charset" . charset))
nil
"attachment" nil)
("\\.html$"
"text" "html" (("charset" . charset))
nil
nil nil)
("\\.diff$\\|\\.patch$"
"application" "octet-stream" (("type" . "patch"))
nil
"attachment" nil)
("\\.signature"
"text" "plain" (("charset" . charset)) nil nil nil)
("\\.js$"
"application" "javascript" (("charset" . charset))
nil
"inline" nil)
("\\.vcf$"
"text" "vcard" (("charset" . "UTF-8"))
nil
"inline" nil)
;; Microsoft Project
("\\.mpp$"
"application" "vnd.ms-project" nil
"base64"
"attachment" nil)
;; Microsoft Office (none-OpenXML)
("\\.rtf$" ; Rich text format
"application" "rtf" nil
"base64"
"attachment" nil)
("\\.doc$" ;MS Word
"application" "msword" nil
"base64"
"attachment" nil)
("\\.xls$" ; MS Excel
"application" "vnd.ms-excel" nil
"base64"
"attachment" nil)
("\\.ppt$" ; MS Power Point
"application" "vnd.ms-powerpoint" nil
"base64"
"attachment" nil)
;; Microsoft Office (OpenXML)
; MS Word
("\\.docm$"
"application" "vnd.ms-word.document.macroEnabled.12" nil
"base64"
"attachment" nil)
("\\.docx$"
"application" "vnd.openxmlformats-officedocument.wordprocessingml.document" nil
"base64"
"attachment" nil)
("\\.dotm$"
"application" "vnd.ms-word.template.macroEnabled.12" nil
"base64"
"attachment" nil)
("\\.dotx$"
"application" "vnd.openxmlformats-officedocument.wordprocessingml.template" nil
"base64"
"attachment" nil)
; MS Power Point
("\\.potm$"
"application" "vnd.ms-powerpoint.template.macroEnabled.12" nil
"base64"
"attachment" nil)
("\\.potx$"
"application" "vnd.openxmlformats-officedocument.presentationml.template" nil
"base64"
"attachment" nil)
("\\.ppam$"
"application" "vnd.ms-powerpoint.addin.macroEnabled.12" nil
"base64"
"attachment" nil)
("\\.ppsm$"
"application" "vnd.ms-powerpoint.slideshow.macroEnabled.12" nil
"base64"
"attachment" nil)
("\\.ppsx$"
"application" "vnd.openxmlformats-officedocument.presentationml.slideshow" nil
"base64"
"attachment" nil)
("\\.pptm$"
"application" "vnd.ms-powerpoint.presentation.macroEnabled.12" nil
"base64"
"attachment" nil)
("\\.pptx$"
"application" "vnd.openxmlformats-officedocument.presentationml.presentation" nil
"base64"
"attachment" nil)
; MS Excel
("\\.xlam$"
"application" "vnd.ms-excel.addin.macroEnabled.12" nil
"base64"
"attachment" nil)
("\\.xlsb$"
"application" "vnd.ms-excel.sheet.binary.macroEnabled.12" nil
"base64"
"attachment" nil)
("\\.xlsm$"
"application" "vnd.ms-excel.sheet.macroEnabled.12" nil
"base64"
"attachment" nil)
("\\.xlsx$"
"application" "vnd.openxmlformats-officedocument.spreadsheetml.sheet" nil
"base64"
"attachment" nil)
("\\.xltm$"
"application" "vnd.ms-excel.template.macroEnabled.12" nil
"base64"
"attachment" nil)
("\\.xltx$"
"application" "vnd.openxmlformats-officedocument.spreadsheetml.template" nil
"base64"
"attachment" nil)
;; Open Office
("\\.odt$"
"application" "vnd.oasis.opendocument.text" nil
"base64"
"attachment" nil)
("\\.ods$"
"application" "vnd.oasis.opendocument.spreadsheet" nil
"base64"
"attachment" nil)
("\\.odg$"
"application" "vnd.oasis.opendocument.graphics" nil
"base64"
"attachment" nil)
("\\.odf$"
"application" "vnd.oasis.opendocument.formula" nil
"base64"
"attachment" nil)
("\\.odm$"
"application" "vnd.oasis.opendocument.text-master" nil
"base64"
"attachment" nil)
("\\.odp$"
"application" "vnd.oasis.opendocument.presentation" nil
"base64"
"attachment" nil)
("\\.ott$"
"application" "vnd.oasis.opendocument.text-template" nil
"base64"
"attachment" nil)
("\\.ots$"
"application" "vnd.oasis.opendocument.spreadsheet-template" nil
"base64"
"attachment" nil)
("\\.otp$"
"application" "vnd.oasis.opendocument.presentation-template" nil
"base64"
"attachment" nil)
("\\.otg$"
"application" "vnd.oasis.opendocument.graphics-template" nil
"base64"
"attachment" nil)
;; Postscript and PDF
("\\.ps$"
"application" "postscript" nil
"base64"
"attachment" nil)
("\\.pdf$"
"application" "pdf" nil
"base64"
"attachment" nil)
;; Pure binary
("\\.jpg$\\|\\.jpeg$"
"image" "jpeg" nil
"base64"
"inline" nil)
("\\.gif$"
"image" "gif" nil
"base64"
"inline" nil)
("\\.png$"
"image" "png" nil
"base64"
"inline" nil)
("\\.bmp$"
"image" "bmp" nil
"base64"
"inline" nil)
("\\.svg$"
"image" "svg+xml" nil
"base64"
"inline" nil)
("\\.tiff$"
"image" "tiff" nil
"base64"
"inline" nil)
("\\.pic$"
"image" "x-pic" nil
"base64"
"inline" nil)
("\\.mag$"
"image" "x-mag" nil
"base64"
"inline" nil)
("\\.xbm$"
"image" "x-xbm" nil
"base64"
"inline" nil)
("\\.xwd$"
"image" "x-xwd" nil
"base64"
"inline" nil)
;; Audio and video
("\\.au$\\|\\.snd$"
"audio" "basic" nil
"base64"
"attachment" nil)
("\\.mp[234]\\|\\.m4[abp]$"
"audio" "mpeg" nil
"base64"
"attachment" nil)
("\\.ogg$"
"audio" "ogg" nil
"base64"
"attachment" nil)
("\\.ogg$"
"audio" "vorbis" nil
"base64"
"attachment" nil)
("\\.mpg\\|\\.mpeg$"
"video" "mpeg" nil
"base64"
"attachment" nil)
("\\.mp4\\|\\.m4v$"
"video" "mp4" nil
"base64"
"attachment" nil)
("\\.qt$\\|\\.mov$"
"video" "quicktime" nil
"base64"
"attachment" nil)
("\\.flv$"
"video" "x-flv" nil
"base64"
"attachment" nil)
("\\.swf$"
"application" "x-shockwave-flash" nil
"base64"
"attachment" nil)
;; Compressed files
("\\.tar\\.gz$"
"application" "octet-stream" (("type" . "tar+gzip"))
"base64"
"attachment" nil)
("\\.tgz$"
"application" "octet-stream" (("type" . "tar+gzip"))
"base64"
"attachment" nil)
("\\.tar\\.Z$"
"application" "octet-stream" (("type" . "tar+compress"))
"base64"
"attachment" nil)
("\\.taz$"
"application" "octet-stream" (("type" . "tar+compress"))
"base64"
"attachment" nil)
("\\.gz$"
"application" "octet-stream" (("type" . "gzip"))
"base64"
"attachment" nil)
("\\.Z$"
"application" "octet-stream" (("type" . "compress"))
"base64"
"attachment" nil)
("\\.lzh$"
"application" "octet-stream" (("type" . "lha"))
"base64"
"attachment" nil)
("\\.zip$"
"application" "zip" nil
"base64"
"attachment" nil)
("\\.7z$"
"application" "x-7z-compressed" nil
"base64"
"attachment" nil)
("winmail\\.dat$"
"application" "ms-tnef" nil
"base64"
"attachment" nil)
;; Rest
(".*"
"application" "octet-stream" nil
nil
"attachment" nil))))
"*Alist of file name, types, parameters, and default encoding.
If encoding is nil, it is determined from its contents."
:type `(repeat
(list regexp
;; primary-type
(choice :tag "Primary-Type"
,@(nconc (mapcar (lambda (cell)
(list 'item (car cell)))
mime-content-types)
'(string)))
;; subtype
(choice :tag "Sub-Type"
,@(nconc
(apply #'nconc
(mapcar (lambda (cell)
(mapcar (lambda (cell)
(list 'item (car cell)))
(cdr cell)))
mime-content-types))
'(string)))
;; parameters
(repeat :tag "Parameters of Content-Type field"
(cons string (choice string symbol)))
;; content-transfer-encoding
(choice :tag "Encoding"
,@(cons
'(const nil)
(mapcar (lambda (cell)
(list 'item cell))
(mime-encoding-list))))
;; disposition-type
(choice :tag "Disposition-Type"
(item nil)
(item "inline")
(item "attachment")
string)
;; parameters
(repeat :tag "Parameters of Content-Disposition field"
(cons string (choice string symbol)))))
:group 'mime-edit)
(defvar mime-edit-debug nil)
;;; @@ about charset, encoding and transfer-level
;;;
(defvar mime-charset-type-list
'((us-ascii 7 nil)
(iso-8859-1 8 "quoted-printable")
(iso-8859-2 8 "quoted-printable")
(iso-8859-3 8 "quoted-printable")
(iso-8859-4 8 "quoted-printable")
(iso-8859-5 8 "quoted-printable")
(koi8-r 8 "quoted-printable")
(iso-8859-7 8 "quoted-printable")
(iso-8859-8 8 "quoted-printable")
(iso-8859-9 8 "quoted-printable")
(iso-8859-14 8 "quoted-printable")
(iso-8859-15 8 "quoted-printable")
(iso-2022-jp 7 "base64")
(iso-2022-jp-3 7 "base64")
(iso-2022-kr 7 "base64")
(euc-kr 8 "base64")
(cn-gb 8 "base64")
(gb2312 8 "base64")
(cn-big5 8 "base64")
(big5 8 "base64")
(shift_jis 8 "base64")
(tis-620 8 "base64")
(iso-2022-jp-2 7 "base64")
(iso-2022-int-1 7 "base64")))
(defvar mime-transfer-level 7
"*A number of network transfer level. It should be 7 or bigger.")
(make-variable-buffer-local 'mime-transfer-level)
(defsubst mime-encoding-name (transfer-level &optional not-omit)
(cond ((> transfer-level 8) "binary")
((= transfer-level 8) "8bit")
(not-omit "7bit")))
(defvar mime-transfer-level-string
(mime-encoding-name mime-transfer-level 'not-omit)
"A string formatted version of mime-transfer-level")
(make-variable-buffer-local 'mime-transfer-level-string)
;;; @@ about content transfer encoding
(defvar mime-content-transfer-encoding-priority-list
'(nil "8bit" "binary"))
;;; @@ about message inserting
;;;
(defvar mime-edit-yank-ignored-field-list
'("Received" "Approved" "Path" "Replied" "Status"
"Xref" "X-UIDL" "X-Filter" "X-Gnus-.*" "X-VM-.*")
"Delete these fields from original message when it is inserted
as message/rfc822 part.
Each elements are regexp of field-name.")
(defvar mime-edit-yank-ignored-field-regexp
(concat "^"
(apply (function regexp-or) mime-edit-yank-ignored-field-list)
":"))
(defvar mime-edit-message-inserter-alist nil)
(defvar mime-edit-mail-inserter-alist nil)
;;; @@ about message splitting
;;;
(defcustom mime-edit-split-message nil
"*Split large message if it is non-nil."
:group 'mime-edit
:type 'boolean)
(defcustom mime-edit-message-default-max-lines 1000
"*Default maximum lines of a message."
:group 'mime-edit
:type 'integer)
(defcustom mime-edit-message-max-lines-alist
'((news-reply-mode . 500))
"Alist of major-mode vs maximum lines of a message.
If it is not specified for a major-mode,
`mime-edit-message-default-max-lines' is used."
:group 'mime-edit
:type 'list)
(defconst mime-edit-split-ignored-field-regexp
"\\(^Content-\\|^Subject:\\|^Mime-Version:\\|^Message-Id:\\)")
(defcustom mime-edit-split-blind-field-regexp
"\\(^[BDFbdf]cc:\\|^cc:[ \t]*$\\)"
"*Regular expression to match field-name to be ignored when split sending."
:group 'mime-edit
:type 'regexp)
(defvar mime-edit-split-message-sender-alist nil)
(defvar mime-edit-news-reply-mode-server-running nil)
;;; @@ about PGP/MIME
;;;
(defgroup mime-edit-pgp nil
"MIME edit mode (PGP/MIME)"
:group 'mime-edit)
(defcustom mime-edit-pgp-verbose nil
"If non-nil, ask the user about the current operation more verbosely."
:group 'mime-edit-pgp
:type 'boolean)
(defcustom mime-edit-pgp-signers nil
"A list of your own key ID which will be preferredly used to sign a message."
:group 'mime-edit-pgp
:type '(repeat (string :tag "Key ID")))
(defcustom mime-edit-pgp-encrypt-to-self t
"If t, add your own key ID to recipient list when encryption."
:group 'mime-edit-pgp
:type 'boolean)
(defcustom mime-edit-pgp-filtered-validities
'(invalid disabled revoked expired never)
"A list of keys's validities which are not used for signing and encrypting."
:group 'mime-edit-pgp
:type
'(choice
(const nil :tag "Any keys are used.")
(repeat (choice (const unknow)
(const invalid)
(const disabled)
(const revoked)
(const expired)
(const none)
(const undefined)
(const never)
(const marginal)
(const full)
(const ultimate)))))
;;; @@ about tag
;;;
(defconst mime-edit-single-part-tag-regexp
"--[[][[]\\([^]]*\\)]\\([[]\\([^]]*\\)]\\|\\)]"
"*Regexp of MIME tag in the form of [[CONTENT-TYPE][ENCODING]].")
(defconst mime-edit-quoted-single-part-tag-regexp
(concat "- " (substring mime-edit-single-part-tag-regexp 1)))
(defconst mime-edit-multipart-beginning-regexp "--<<\\([^<>]+\\)>>-{\n")
(defconst mime-edit-multipart-end-regexp "--}-<<\\([^<>]+\\)>>\n")
(defconst mime-edit-beginning-tag-regexp
(regexp-or mime-edit-single-part-tag-regexp
mime-edit-multipart-beginning-regexp))
(defconst mime-edit-end-tag-regexp
(regexp-or mime-edit-single-part-tag-regexp
mime-edit-multipart-end-regexp))
(defconst mime-edit-tag-regexp
(regexp-or mime-edit-single-part-tag-regexp
mime-edit-multipart-beginning-regexp
mime-edit-multipart-end-regexp))
(defvar mime-tag-format "--[[%s]]"
"*Control-string making a MIME tag.")
(defvar mime-tag-format-with-encoding "--[[%s][%s]]"
"*Control-string making a MIME tag with encoding.")
;;; @@ multipart boundary
;;;
(defvar mime-multipart-boundary "Multipart"
"*Boundary of a multipart message.")
;;; @@ optional header fields
;;;
(defvar mime-edit-insert-user-agent-field t
"*If non-nil, insert User-Agent header field.")
(defvar mime-edit-user-agent-value
(concat (mime-product-name mime-user-interface-product)
"/"
(mapconcat #'number-to-string
(mime-product-version mime-user-interface-product) ".")
" ("
(mime-product-code-name mime-user-interface-product)
") "
(mime-product-name mime-library-product)
"/"
(mapconcat #'number-to-string
(mime-product-version mime-library-product) ".")
" ("
(mime-product-code-name mime-library-product)
") "
(if (fboundp 'apel-version)
(concat (apel-version) " "))
(if (boundp 'epg-version-number)
(concat "EasyPG/" epg-version-number " "))
(let ((ver (if (and (not (boundp 'emacs-build-number))
(string-match "\\.[0-9]+$" emacs-version))
(substring emacs-version 0 (match-beginning 0))
emacs-version)))
(concat "Emacs/" ver " (" system-configuration ")"
(if (boundp 'mule-version)
(concat " MULE/" mule-version)))))
"Body of User-Agent field.
If variable `mime-edit-insert-user-agent-field' is not nil, it is
inserted into message header.")
;;; @ constants
;;;
(defconst mime-tspecials-regexp "[][()<>@,;:\\\"/?.= \t]"
"*Specify MIME tspecials.
Tspecials means any character that matches with it in header must be quoted.")
(defconst mime-edit-mime-version-value
(concat "1.0 (generated by " mime-edit-version ")")
"MIME version number.")
(defconst mime-edit-mime-version-field-for-message/partial
(concat "MIME-Version:"
(mime-encode-field-body
(concat " 1.0 (split by " mime-edit-version ")\n")
"MIME-Version"))
"MIME version field for message/partial.")
;;; @ keymap and menu
;;;
(defvar mime-edit-mode-flag nil)
(make-variable-buffer-local 'mime-edit-mode-flag)
(defvar mime-edit-mode-entity-prefix "\C-c\C-x"
"Keymap prefix for MIME-Edit mode commands to insert entity or set status.")
(defvar mime-edit-mode-entity-map (make-sparse-keymap)
"Keymap for MIME-Edit mode commands to insert entity or set status.")
(define-key mime-edit-mode-entity-map "\C-t" 'mime-edit-insert-text)
(define-key mime-edit-mode-entity-map "\C-i" 'mime-edit-insert-file)
(define-key mime-edit-mode-entity-map "i" 'mime-edit-insert-file-as-text)
(define-key mime-edit-mode-entity-map "\C-e" 'mime-edit-insert-external)
(define-key mime-edit-mode-entity-map "\C-v" 'mime-edit-insert-voice)
(define-key mime-edit-mode-entity-map "\C-y" 'mime-edit-insert-message)
(define-key mime-edit-mode-entity-map "\C-m" 'mime-edit-insert-mail)
(define-key mime-edit-mode-entity-map "\C-w" 'mime-edit-insert-signature)
(define-key mime-edit-mode-entity-map "\C-s" 'mime-edit-insert-signature)
(define-key mime-edit-mode-entity-map "\C-k" 'mime-edit-insert-key)
(define-key mime-edit-mode-entity-map "t" 'mime-edit-insert-tag)
(define-key mime-edit-mode-entity-map "7" 'mime-edit-set-transfer-level-7bit)
(define-key mime-edit-mode-entity-map "8" 'mime-edit-set-transfer-level-8bit)
(define-key mime-edit-mode-entity-map "/" 'mime-edit-set-split)
(define-key mime-edit-mode-entity-map "s" 'mime-edit-set-sign)
(define-key mime-edit-mode-entity-map "v" 'mime-edit-set-sign)
(define-key mime-edit-mode-entity-map "e" 'mime-edit-set-encrypt)
(define-key mime-edit-mode-entity-map "h" 'mime-edit-set-encrypt)
(define-key mime-edit-mode-entity-map "p" 'mime-edit-preview-message)
(define-key mime-edit-mode-entity-map "\C-z" 'mime-edit-exit)
(define-key mime-edit-mode-entity-map "?" 'mime-edit-help)
(defvar mime-edit-mode-enclosure-prefix "\C-c\C-m"
"Keymap prefix for MIME-Edit mode commands about enclosure.")
(defvar mime-edit-mode-enclosure-map (make-sparse-keymap)
"Keymap for MIME-Edit mode commands about enclosure.")
(define-key mime-edit-mode-enclosure-map
"\C-a" 'mime-edit-enclose-alternative-region)
(define-key mime-edit-mode-enclosure-map
"\C-p" 'mime-edit-enclose-parallel-region)
(define-key mime-edit-mode-enclosure-map
"\C-m" 'mime-edit-enclose-mixed-region)
(define-key mime-edit-mode-enclosure-map
"\C-d" 'mime-edit-enclose-digest-region)
(define-key mime-edit-mode-enclosure-map
"\C-s" 'mime-edit-enclose-pgp-signed-region)
(define-key mime-edit-mode-enclosure-map
"\C-e" 'mime-edit-enclose-pgp-encrypted-region)
(define-key mime-edit-mode-enclosure-map
"s" 'mime-edit-enclose-smime-signed-region)
(define-key mime-edit-mode-enclosure-map
"e" 'mime-edit-enclose-smime-encrypted-region)
(define-key mime-edit-mode-enclosure-map
"\C-q" 'mime-edit-enclose-quote-region)
(defvar mime-edit-mode-map (make-sparse-keymap)
"Keymap for MIME-Edit mode commands.")
(define-key mime-edit-mode-map
mime-edit-mode-entity-prefix mime-edit-mode-entity-map)
(define-key mime-edit-mode-map
mime-edit-mode-enclosure-prefix mime-edit-mode-enclosure-map)
(defconst mime-edit-menu-title "MIME-Edit")
(defconst mime-edit-menu-list
'((mime-help "Describe MIME editor mode" mime-edit-help)
(file "Insert File" mime-edit-insert-file)
(file-as-text "Insert File as text" mime-edit-insert-file-as-text)
(external "Insert External" mime-edit-insert-external)
(voice "Insert Voice" mime-edit-insert-voice)
(message "Insert Message" mime-edit-insert-message)
(mail "Insert Mail" mime-edit-insert-mail)
(signature "Insert Signature" mime-edit-insert-signature)
(text "Insert Text" mime-edit-insert-text)
(tag "Insert Tag" mime-edit-insert-tag)
(alternative "Enclose as alternative"
mime-edit-enclose-alternative-region)
(parallel "Enclose as parallel" mime-edit-enclose-parallel-region)
(mixed "Enclose as serial" mime-edit-enclose-mixed-region)
(digest "Enclose as digest" mime-edit-enclose-digest-region)
(signed "Enclose as signed" mime-edit-enclose-pgp-signed-region)
(encrypted "Enclose as encrypted" mime-edit-enclose-pgp-encrypted-region)
(quote "Verbatim region" mime-edit-enclose-quote-region)
(key "Insert Public Key" mime-edit-insert-key)
(split "Set splitting" mime-edit-set-split)
(sign "PGP sign" mime-edit-set-sign)
(encrypt "PGP encrypt" mime-edit-set-encrypt)
(preview "Preview Message" mime-edit-preview-message)
(level "Toggle transfer-level" mime-edit-toggle-transfer-level))
"MIME-edit menubar entry.")
(define-key mime-edit-mode-map [menu-bar mime-edit]
(cons mime-edit-menu-title
(make-sparse-keymap mime-edit-menu-title)))
(mapc (lambda (item)
(define-key mime-edit-mode-map
(vector 'menu-bar 'mime-edit (car item))
(cons (nth 1 item) (nth 2 item))))
(reverse mime-edit-menu-list))
;;; @ functions
;;;
(defvar mime-edit-touched-flag nil)
;;;###autoload
(defun mime-edit-mode ()
"MIME minor mode for editing the tagged MIME message.
In this mode, basically, the message is composed in the tagged MIME
format. The message tag looks like:
--[[text/plain; charset=ISO-2022-JP][7bit]]
The tag specifies the MIME content type, subtype, optional parameters
and transfer encoding of the message following the tag. Messages
without any tag are treated as `text/plain' by default. Charset and
transfer encoding are automatically defined unless explicitly
specified. Binary messages such as audio and image are usually
hidden. The messages in the tagged MIME format are automatically
translated into a MIME compliant message when exiting this mode.
Available charsets depend on Emacs version being used. The following
lists the available charsets of each emacs.
Without mule: US-ASCII and ISO-8859-1 (or other charset) are available.
With mule: US-ASCII, ISO-8859-* (except for ISO-8859-5), KOI8-R,
ISO-2022-JP, ISO-2022-JP-2, EUC-KR, CN-GB-2312,
CN-BIG5 and ISO-2022-INT-1 are available.
ISO-2022-JP-2 and ISO-2022-INT-1 charsets used in mule is expected to
be used to represent multilingual text in intermixed manner. Any
languages that has no registered charset are represented as either
ISO-2022-JP-2 or ISO-2022-INT-1 in mule.
If you want to use non-ISO-8859-1 charset in Emacs 19 or XEmacs
without mule, please set variable `default-mime-charset'. This
variable must be symbol of which name is a MIME charset.
If you want to add more charsets in mule, please set variable
`charsets-mime-charset-alist'. This variable must be alist of which
key is list of charset and value is symbol of MIME charset. If name
of coding-system is different as MIME charset, please set variable
`mime-charset-coding-system-alist'. This variable must be alist of
which key is MIME charset and value is coding-system.
Following commands are available in addition to major mode commands:
\[make single part\]
\\[mime-edit-insert-text] insert a text message.
\\[mime-edit-insert-file] insert a (binary) file.
\\[mime-eidt-insert-file-as-text] insert a text file.
\\[mime-edit-insert-external] insert a reference to external body.
\\[mime-edit-insert-voice] insert a voice message.
\\[mime-edit-insert-message] insert a mail or news message.
\\[mime-edit-insert-mail] insert a mail message.
\\[mime-edit-insert-signature] insert a signature file at end.
\\[mime-edit-insert-key] insert PGP public key.
\\[mime-edit-insert-tag] insert a new MIME tag.
\[make enclosure (maybe multipart)\]
\\[mime-edit-enclose-alternative-region] enclose as multipart/alternative.
\\[mime-edit-enclose-parallel-region] enclose as multipart/parallel.
\\[mime-edit-enclose-mixed-region] enclose as multipart/mixed.
\\[mime-edit-enclose-digest-region] enclose as multipart/digest.
\\[mime-edit-enclose-pgp-signed-region] enclose as PGP signed.
\\[mime-edit-enclose-pgp-encrypted-region] enclose as PGP encrypted.
\\[mime-edit-enclose-quote-region] enclose as verbose mode
(to avoid to expand tags)
\[other commands\]
\\[mime-edit-set-transfer-level-7bit] set transfer-level as 7.
\\[mime-edit-set-transfer-level-8bit] set transfer-level as 8.
\\[mime-edit-set-split] set message splitting mode.
\\[mime-edit-set-sign] set PGP-sign mode.
\\[mime-edit-set-encrypt] set PGP-encryption mode.
\\[mime-edit-preview-message] preview editing MIME message.
\\[mime-edit-exit] exit and translate into a MIME
compliant message.
\\[mime-edit-help] show this help.
\\[mime-edit-maybe-translate] exit and translate if in MIME mode,
then split.
Additional commands are available in some major modes:
C-c C-c exit, translate and run the original command.
C-c C-s exit, translate and run the original command.
The following is a message example written in the tagged MIME format.
TABs at the beginning of the line are not a part of the message:
This is a conventional plain text. It should be translated
into text/plain.
--[[text/plain]]
This is also a plain text. But, it is explicitly specified as
is.
--[[text/plain; charset=ISO-8859-1]]
This is also a plain text. But charset is specified as
iso-8859-1.
¡Hola! Buenos dÃas. ¿Cómo está usted?
--[[text/enriched]]
This is a <bold>enriched text</bold>.
--[[image/gif][base64]]...image encoded in base64 here...
--[[audio/basic][base64]]...audio encoded in base64 here...
User customizable variables (not documented all of them):
mime-edit-prefix
Specifies a key prefix for MIME minor mode commands.
mime-ignore-preceding-spaces
Preceding white spaces in a message body are ignored if non-nil.
mime-ignore-trailing-spaces
Trailing white spaces in a message body are ignored if non-nil.
mime-auto-hide-body
Hide a non-textual body message encoded in base64 after insertion
if non-nil.
mime-transfer-level
A number of network transfer level. It should be bigger than 7.
If you are in 8bit-through environment, please set 8.
mime-edit-voice-recorder
Specifies a function to record a voice message and encode it.
The function `mime-edit-voice-recorder-for-sun' is for Sun
SparcStations.
mime-edit-mode-hook
Turning on MIME mode calls the value of mime-edit-mode-hook, if
it is non-nil.
mime-edit-translate-hook
The value of mime-edit-translate-hook is called just before translating
the tagged MIME format into a MIME compliant message if it is
non-nil. If the hook call the function mime-edit-insert-signature,
the signature file will be inserted automatically.
mime-edit-exit-hook
Turning off MIME mode calls the value of mime-edit-exit-hook, if it is
non-nil."
(interactive)
(if mime-edit-mode-flag
(mime-edit-exit)
(if mime-edit-touched-flag
(mime-edit-again)
(make-local-variable 'mime-edit-touched-flag)
(setq mime-edit-touched-flag t)
(turn-on-mime-edit))))
(set-alist 'minor-mode-alist
'mime-edit-mode-flag
'((" MIME-Edit " mime-transfer-level-string)))
(set-alist 'minor-mode-map-alist
'mime-edit-mode-flag
mime-edit-mode-map)
;;;###autoload
(defun turn-on-mime-edit ()
"Unconditionally turn on MIME-Edit mode."
(interactive)
(if mime-edit-mode-flag
(error "You are already editing a MIME message.")
(setq mime-edit-mode-flag t)
;; Set transfer level into mode line
;;
(setq mime-transfer-level-string
(mime-encoding-name mime-transfer-level 'not-omit))
(force-mode-line-update)
(make-local-variable 'paragraph-start)
(setq paragraph-start
(regexp-or mime-edit-single-part-tag-regexp
paragraph-start))
(make-local-variable 'paragraph-separate)
(setq paragraph-separate
(regexp-or mime-edit-single-part-tag-regexp
paragraph-separate))
(run-hooks 'mime-edit-mode-hook)
(message
"%s"
(substitute-command-keys
"Type \\[mime-edit-exit] to exit MIME mode, and type \\[mime-edit-help] to get help."))))
;;;###autoload
(defalias 'edit-mime 'turn-on-mime-edit) ; for convenience
(defun mime-edit-exit (&optional nomime no-error)
"Translate the tagged MIME message into a MIME compliant message.
With no argument encode a message in the buffer into MIME, otherwise
just return to previous mode."
(interactive "P")
(if (not mime-edit-mode-flag)
(if (null no-error)
(error "You aren't editing a MIME message."))
(if (not nomime)
(progn
(run-hooks 'mime-edit-translate-hook)
(mime-edit-translate-buffer)))
;; Restore previous state.
(setq mime-edit-mode-flag nil)
(set-buffer-modified-p (buffer-modified-p))
(run-hooks 'mime-edit-exit-hook)
(message "Exit MIME editor mode.")))
(defun mime-edit-maybe-translate ()
(interactive)
(mime-edit-exit nil t)
(call-interactively 'mime-edit-maybe-split-and-send))
(defun mime-edit-help ()
"Show help message about MIME mode."
(interactive)
(with-output-to-temp-buffer "*Help*"
(princ "MIME editor mode:\n")
(princ (documentation 'mime-edit-mode))
(help-print-return-message)))
(defun mime-edit-insert-text (&optional subtype)
"Insert a text message.
Charset is automatically obtained from the `charsets-mime-charset-alist'.
If optional argument SUBTYPE is not nil, text/SUBTYPE tag is inserted."
(interactive)
(let ((ret (mime-edit-insert-tag "text" subtype nil)))
(when ret
(if (looking-at mime-edit-single-part-tag-regexp)
(progn
;; Make a space between the following message.
(insert "\n")
(forward-char -1)))
(if (member (cadr ret) '("enriched"))
(enriched-mode t)
(enriched-mode -1)))))
(defun mime-edit-insert-file-filename (file)
(std11-wrap-as-quoted-string (file-name-nondirectory file)))
(defun mime-edit-insert-file-charset (file &optional verbose)
(let ((charset (with-temp-buffer
(insert-file-contents file)
(coding-system-to-mime-charset last-coding-system-used))))
(when charset
(setq charset (symbol-name charset)))
(when verbose
(setq charset
(completing-read
(apply 'concat "What charset: "
(when charset `("(default " ,charset ") ")))
(mapcar (lambda (elt) (cons (symbol-name elt) nil))
(mime-charset-list))
nil nil nil nil charset)))
(unless (string= charset "") charset)))
(defun mime-edit-insert-file-parameters (parameters file &optional verbose)
(let (attribute value strings)
(while parameters
(setq attribute (caar parameters)
value (cdar parameters))
(cond
((eq value 'file)
(setq value (mime-edit-insert-file-filename file)))
((eq value 'charset)
(setq value (mime-edit-insert-file-charset file verbose))))
(when value
(if (symbolp value) (setq value (symbol-name value)))
(setq strings (nconc strings (list "; " attribute "=" value))))
(setq parameters (cdr parameters)))
(apply 'concat strings)))
(defun mime-edit-insert-file (file &optional verbose)
"Insert a message from a file."
(interactive "fInsert file as MIME message: \nP")
(let* ((guess (mime-find-file-type file))
(type (nth 0 guess))
(subtype (nth 1 guess))
(parameters (nth 2 guess))
(encoding (nth 3 guess))
(disposition-type (nth 4 guess))
(disposition-params (nth 5 guess)))
(setq verbose (if (called-interactively-p 'interactive)
(null (eq (null verbose)
(null mime-edit-insert-file-confirm)))
verbose))
(if verbose
(setq type (mime-prompt-for-type type)
subtype (mime-prompt-for-subtype type subtype)
encoding (mime-prompt-for-encoding encoding)))
(setq parameters
(concat
(when (consp parameters)
(mime-edit-insert-file-parameters parameters file verbose))
(when disposition-type
(concat "\n" "Content-Disposition: " disposition-type
(mime-edit-insert-file-parameters
disposition-params file verbose)))))
(mime-edit-insert-tag type subtype parameters)
(mime-edit-insert-binary-file file encoding)))
(defun mime-edit-insert-file-as-text (file &optional verbose)
"Insert a text from a file. This function decodes inserted file and
does not define Content-Transfer-Encoding: header and charset parameter."
(interactive "fInsert file as text: \nP")
(let* ((guess (mime-find-file-type file))
(type "text")
(subtype (if (equal (nth 0 guess) "text") (nth 1 guess) "plain"))
(parameters (nth 2 guess))
(disposition-type (nth 4 guess))
(disposition-params (nth 5 guess)))
(setq verbose (if (called-interactively-p 'interactive)
(null (eq (null verbose)
(null mime-edit-insert-file-confirm)))
verbose))
(if verbose
(setq subtype (mime-prompt-for-subtype type subtype)))
(setq parameters
(concat
(when (consp parameters)
(mime-edit-insert-file-parameters
(remove (assoc "charset" parameters) parameters) file verbose))
(when disposition-type
(concat
"\n" "Content-Disposition: " disposition-type
(mime-edit-insert-file-parameters
(remove (assoc "charset" disposition-params) disposition-params)
file verbose)))))
(mime-edit-insert-tag type subtype parameters)
(mime-edit-insert-text-file file)))
(defun mime-edit-insert-external ()
"Insert a reference to external body."
(interactive)
(mime-edit-insert-tag "message" "external-body" nil ";\n\t")
;;(forward-char -1)
;;(insert "Content-Description: " (read-string "Content-Description: ") "\n")
;;(forward-line 1)
(let* ((pritype (mime-prompt-for-type))
(subtype (mime-prompt-for-subtype pritype))
(parameters (mime-prompt-for-parameters pritype subtype ";\n\t")))
(and pritype
subtype
(insert "Content-Type: "
pritype "/" subtype (or parameters "") "\n")))
(if (and (not (eobp))
(not (looking-at mime-edit-single-part-tag-regexp)))
(insert (mime-make-text-tag) "\n")))
(defun mime-edit-insert-voice ()
"Insert a voice message."
(interactive)
(let ((encoding (mime-prompt-for-encoding)))
(mime-edit-insert-tag "audio" "basic" nil)
(mime-edit-define-encoding encoding)
(save-restriction
(narrow-to-region (1- (point))(point))
(unwind-protect
(funcall mime-edit-voice-recorder encoding)
(progn
(insert "\n")
(invisible-region (point-min)(point-max))
(goto-char (point-max)))))))
(autoload 'mime-edit-insert-signature "mime-signature" nil t)
;; Insert a new tag around a point.
(defun mime-edit-insert-tag (&optional pritype subtype parameters delimiter)
"Insert new MIME tag and return a list of PRITYPE, SUBTYPE, and PARAMETERS.
If nothing is inserted, return nil."
(interactive)
(let ((p (point)))
(mime-edit-goto-tag)
(if (and (re-search-forward mime-edit-tag-regexp nil t)
(< (match-beginning 0) p)
(< p (match-end 0)))
(goto-char (match-beginning 0))
(goto-char p)))
(let ((oldtag nil)
(newtag nil)
(current (point)))
(setq pritype
(or pritype
(mime-prompt-for-type)))
(setq subtype
(or subtype
(mime-prompt-for-subtype pritype)))
(setq parameters
(or parameters
(mime-prompt-for-parameters pritype subtype delimiter)))
;; Make a new MIME tag.
(setq newtag (mime-make-tag pritype subtype parameters))
;; Find an current MIME tag.
(setq oldtag
(save-excursion
(if (mime-edit-goto-tag)
(buffer-substring (match-beginning 0) (match-end 0))
;; Assume content type is 'text/plan'.
(mime-make-tag "text" "plain"))))
;; We are only interested in TEXT.
(if (and oldtag
(not (mime-test-content-type
(mime-edit-get-contype oldtag) "text")))
(setq oldtag nil))
;; Make a new tag.
(if (or (not oldtag) ;Not text
(or mime-ignore-same-text-tag
(not (string-equal oldtag newtag))))
(progn
;; Mark the beginning of the tag for convenience.
(push-mark (point) 'nomsg)
(insert newtag "\n")
(list pritype subtype parameters) ;New tag is created.
)
;; Restore previous point.
(goto-char current)
nil ;Nothing is created.
)))
(defun mime-edit-insert-binary-file (file &optional encoding)
"Insert binary FILE at point.
Optional argument ENCODING specifies an encoding method such as base64."
(setq encoding (or encoding "base64"))
(let* ((tagend (1- (point))) ;End of the tag
(hide-p (and mime-auto-hide-body
(stringp encoding)
(not
(let ((en (downcase encoding)))
(or (string-equal en "7bit")
(string-equal en "8bit")
(string-equal en "binary")))))))
(save-restriction
(narrow-to-region tagend (point))
(mime-insert-encoded-file file encoding)
(if hide-p
(progn
(invisible-region (point-min) (point-max))
(goto-char (point-max)))
(goto-char (point-max))))
(or hide-p
(looking-at mime-edit-tag-regexp)
(= (point)(point-max))
(mime-edit-insert-tag "text" "plain"))
;; Define encoding even if it is 7bit.
(if (stringp encoding)
(save-excursion
(goto-char tagend) ; Make sure which line the tag is on.
(mime-edit-define-encoding encoding)))))
(defun mime-edit-insert-text-file (file &optional _encoding)
"Insert text FILE at point.
Optional argument ENCODING is ignored."
(let ((tagend (1- (point)))) ;End of the tag
(save-restriction
(narrow-to-region tagend (point))
(insert-file-contents file)
(goto-char (point-max)))
(or (looking-at mime-edit-tag-regexp)
(= (point)(point-max))
(mime-edit-insert-tag "text" "plain"))))
;; Commands work on a current message flagment.
(defun mime-edit-goto-tag ()
"Search for the beginning of the tagged MIME message."
(let ((current (point)))
(if (looking-at mime-edit-tag-regexp)
t
;; At first, go to the end.
(cond ((re-search-forward mime-edit-beginning-tag-regexp nil t)
(goto-char (1- (match-beginning 0))) ;For multiline tag
)
(t
(goto-char (point-max))))
;; Then search for the beginning.
(re-search-backward mime-edit-end-tag-regexp nil t)
(or (looking-at mime-edit-beginning-tag-regexp)
;; Restore previous point.
(progn
(goto-char current)
nil)))))
(defun mime-edit-content-beginning ()
"Return the point of the beginning of content."
(save-excursion
(let ((beg (save-excursion
(beginning-of-line) (point))))
(if (mime-edit-goto-tag)
(let ((top (point)))
(goto-char (match-end 0))
(if (and (= beg top)
(= (following-char) ?\^M))
(point)
(forward-line 1)
(point)))
;; Default text/plain tag.
(goto-char (point-min))
(re-search-forward
(concat "\n" (regexp-quote mail-header-separator)
(if mime-ignore-preceding-spaces
"[ \t\n]*\n" "\n")) nil 'move)
(point)))))
(defun mime-edit-content-end ()
"Return the point of the end of content."
(save-excursion
(if (mime-edit-goto-tag)
(progn
(goto-char (match-end 0))
(if (invisible-p (point))
(next-visible-point (point))
;; Move to the end of this text.
(if (re-search-forward mime-edit-tag-regexp nil 'move)
;; Don't forget a multiline tag.
(goto-char (match-beginning 0)))
(point)))
;; Assume the message begins with text/plain.
(goto-char (mime-edit-content-beginning))
(if (re-search-forward mime-edit-tag-regexp nil 'move)
;; Don't forget a multiline tag.
(goto-char (match-beginning 0)))
(point))))
(defun mime-edit-define-charset (charset)
"Set charset of current tag to CHARSET."
(save-excursion
(if (mime-edit-goto-tag)
(let ((tag (buffer-substring (match-beginning 0) (match-end 0))))
(delete-region (match-beginning 0) (match-end 0))
(insert
(mime-create-tag
(mime-edit-set-parameter
(mime-edit-get-contype tag)
"charset"
(let ((comment (get charset 'mime-charset-comment)))
(if comment
(concat (upcase (symbol-name charset)) " (" comment ")")
(upcase (symbol-name charset)))))
(mime-edit-get-encoding tag)))))))
(defun mime-edit-define-encoding (encoding)
"Set encoding of current tag to ENCODING."
(save-excursion
(if (mime-edit-goto-tag)
(let ((tag (buffer-substring (match-beginning 0) (match-end 0))))
(delete-region (match-beginning 0) (match-end 0))
(insert (mime-create-tag (mime-edit-get-contype tag) encoding))))))
(defun mime-edit-choose-charset ()
"Choose charset of a text following current point."
(detect-mime-charset-region (point) (mime-edit-content-end)))
(defun mime-make-text-tag (&optional subtype)
"Make a tag for a text after current point.
Subtype of text type can be specified by an optional argument SUBTYPE.
Otherwise, it is obtained from mime-content-types."
(let* ((pritype "text")
(subtype (or subtype
(car (car (cdr (assoc pritype mime-content-types)))))))
;; Charset should be defined later.
(mime-make-tag pritype subtype)))
;; Tag handling functions
(defun mime-make-tag (pritype subtype &optional parameters encoding)
"Make a tag of MIME message of PRITYPE, SUBTYPE and optional PARAMETERS."
(mime-create-tag (concat pritype "/" subtype parameters)
encoding))
(defun mime-create-tag (contype &optional encoding)
"Make a tag with CONTENT-TYPE and optional ENCODING."
(format (if encoding mime-tag-format-with-encoding mime-tag-format)
contype encoding))
(defun mime-edit-get-contype (tag)
"Return Content-Type (including parameters) of TAG."
(and (stringp tag)
(or (string-match mime-edit-single-part-tag-regexp tag)
(string-match mime-edit-multipart-beginning-regexp tag)
(string-match mime-edit-multipart-end-regexp tag))
(substring tag (match-beginning 1) (match-end 1))))
(defun mime-edit-get-encoding (tag)
"Return encoding of TAG."
(and (stringp tag)
(string-match mime-edit-single-part-tag-regexp tag)
(match-beginning 3)
(not (= (match-beginning 3) (match-end 3)))
(substring tag (match-beginning 3) (match-end 3))))
(defun mime-get-parameter (contype parameter)
"For given CONTYPE return value for PARAMETER.
Nil if no such parameter."
(if (string-match
(concat
";[ \t\n]*"
(regexp-quote parameter)
"[ \t\n]*=[ \t\n]*\\([^\" \t\n;]*\\|\"[^\"]*\"\\)\\([ \t\n]*;\\|$\\)")
contype)
(substring contype (match-beginning 1) (match-end 1))
nil ;No such parameter
))
(defun mime-edit-set-parameter (contype parameter value)
"For given CONTYPE set PARAMETER to VALUE."
(let (ctype opt-fields)
(if (string-match "\n[^ \t\n\r]+:" contype)
(setq ctype (substring contype 0 (match-beginning 0))
opt-fields (substring contype (match-beginning 0)))
(setq ctype contype))
(if (string-match
(concat
";[ \t\n]*\\("
(regexp-quote parameter)
"[ \t\n]*=[ \t\n]*\\([^\" \t\n;]*\\|\"[^\"]*\"\\)\\)[ \t\n]*\\(;\\|$\\)")
ctype)
;; Change value
(concat (substring ctype 0 (match-beginning 1))
parameter "=" value
(substring ctype (match-end 1))
opt-fields)
(concat ctype "; " parameter "=" value opt-fields)
)))
(defun mime-strip-parameters (contype)
"Return primary content-type and subtype without parameters for CONTYPE."
(if (string-match "^[ \t]*\\([^; \t\n]*\\)" contype)
(substring contype (match-beginning 1) (match-end 1)) nil))
(defun mime-test-content-type (contype type &optional subtype)
"Test if CONTYPE is a TYPE and an optional SUBTYPE."
(and (stringp contype)
(stringp type)
(string-match
(concat "^[ \t]*" (downcase type) "/" (downcase (or subtype "")))
(downcase contype))))
;; Basic functions
(defun mime-find-file-type (file)
"Guess Content-Type, subtype, and parameters from FILE."
(let ((guess nil)
(guesses mime-file-types))
(while (and (not guess) guesses)
(if (string-match (car (car guesses)) file)
(setq guess (cdr (car guesses))))
(setq guesses (cdr guesses)))
guess))
(defun mime-prompt-for-type (&optional default)
"Ask for Content-type."
(let (type)
;; Repeat until primary content type is specified.
(while (string=
(setq type
(completing-read
(apply 'concat "What content type: "
(when default `("(default " ,default ") ")))
mime-content-types
nil
'require-match ;Type must be specified.
nil
nil
default))
""))
type))
(defun mime-prompt-for-subtype (type &optional default)
"Ask for subtype of media-type TYPE."
(let ((subtypes (cdr (assoc type mime-content-types))))
(or (and default
(assoc default subtypes))
(setq default (car (car subtypes))))
;; default must be non-empty string.
(completing-read
(apply 'concat "What content subtype: "
(when default `("(default " ,default ") ")))
subtypes
nil
'require-match ;Subtype must be specified.
nil
nil
default)))
(defun mime-prompt-for-parameters (pritype subtype &optional delimiter)
"Ask for Content-type parameters of Content-Type PRITYPE and SUBTYPE.
Optional DELIMITER specifies parameter delimiter (';' by default)."
(let* ((delimiter (or delimiter "; "))
(parameters
(mapconcat
(function identity)
(delq nil
(mime-prompt-for-parameters-1
(cdr (assoc subtype
(cdr (assoc pritype mime-content-types))))))
delimiter)))
(if (and (stringp parameters)
(not (string-equal parameters "")))
(concat delimiter parameters)
"" ;"" if no parameters
)))
(defun mime-prompt-for-parameters-1 (optlist)
(apply (function append)
(mapcar (function mime-prompt-for-parameter) optlist)))
(defun mime-prompt-for-parameter (parameter)
"Ask for PARAMETER.
Parameter must be '(PROMPT CHOICE1 (CHOICE2...))."
(let* ((prompt (car parameter))
(choices (mapcar (lambda (e)
(if (consp e) e (list e)))
(cdr parameter)))
(default (car (car choices)))
(answer nil))
(setq answer
(if choices
(completing-read
(apply 'concat "What " prompt ": "
(unless (string-equal default "")
`("(default " ,default ") ")))
choices nil nil nil nil default)
(read-string (concat "What " prompt ": "))))
(cons (if (and answer
(not (string-equal answer "")))
(concat prompt "="
;; Note: control characters ignored!
(if (string-match mime-tspecials-regexp answer)
(concat "\"" answer "\"") answer)))
(mime-prompt-for-parameters-1 (cdr (assoc answer (cdr parameter)))))))
(defun mime-prompt-for-encoding (&optional default)
"Ask for Content-Transfer-Encoding."
(let (encoding)
(while (string=
(setq encoding
(completing-read
(apply 'concat "What transfer encoding: "
(when default `("(default " ,default ") ")))
(mime-encoding-alist)
nil
t
nil
nil
default))
""))
encoding))
;;; @ Translate the tagged MIME messages into a MIME compliant message.
;;;
(defvar mime-edit-translate-buffer-hook
'(mime-edit-pgp-enclose-buffer
mime-edit-translate-body
mime-edit-translate-header))
(defun mime-edit-translate-header ()
"Encode the message header into network representation."
(mime-encode-header-in-buffer 'code-conversion)
(run-hooks 'mime-edit-translate-header-hook))
(defun mime-edit-translate-buffer ()
"Encode the tagged MIME message in current buffer in MIME compliant message."
(interactive)
(undo-boundary)
(let ((modified-p (buffer-modified-p)))
(condition-case error
(save-excursion
(set-buffer-modified-p nil)
(run-hooks 'mime-edit-translate-buffer-hook)
(set-buffer-modified-p (or (buffer-modified-p) modified-p)))
((error quit)
(if mime-edit-debug
(set-buffer-modified-p (or (buffer-modified-p) modified-p))
(when (buffer-modified-p)
(condition-case nil
(undo)
(error nil))
(set-buffer-modified-p modified-p)))
(message "Translation failed")
(signal (car error) (cdr error))))))
(defun mime-edit-find-inmost ()
(goto-char (point-min))
(if (re-search-forward mime-edit-multipart-beginning-regexp nil t)
(let ((bb (match-beginning 0))
(be (match-end 0))
(type (buffer-substring (match-beginning 1)(match-end 1)))
end-exp eb)
(setq end-exp (format "--}-<<%s>>\n" type))
(widen)
(if (re-search-forward end-exp nil t)
(setq eb (match-beginning 0))
(setq eb (point-max)))
(narrow-to-region be eb)
(goto-char be)
(if (re-search-forward mime-edit-multipart-beginning-regexp nil t)
(progn
(narrow-to-region (match-beginning 0)(point-max))
(mime-edit-find-inmost))
(widen)
(list type bb be eb)))))
(defun mime-edit-process-multipart-1 (boundary)
(let ((ret (mime-edit-find-inmost)))
(if ret
(let ((type (car ret))
(bb (nth 1 ret))(be (nth 2 ret))
(eb (nth 3 ret)))
(narrow-to-region bb eb)
(delete-region bb be)
(setq bb (point-min))
(setq eb (point-max))
(widen)
(goto-char eb)
(if (looking-at mime-edit-multipart-end-regexp)
(let ((beg (match-beginning 0))
(end (match-end 0)))
(delete-region beg end)
(or (looking-at mime-edit-beginning-tag-regexp)
(looking-at mime-edit-multipart-end-regexp)
(eobp)
(insert (mime-make-text-tag) "\n"))))
(cond ((string-equal type "quote")
(mime-edit-enquote-region bb eb))
((string-equal type "pgp-signed")
(mime-edit-sign-pgp-mime bb eb boundary))
((string-equal type "pgp-encrypted")
(mime-edit-encrypt-pgp-mime bb eb boundary))
((string-equal type "smime-signed")
(mime-edit-sign-smime bb eb boundary))
((string-equal type "smime-encrypted")
(mime-edit-encrypt-smime bb eb boundary))
(t
(setq boundary
(nth 2 (mime-edit-translate-region bb eb
boundary t)))
(goto-char bb)
(insert
(format "--[[multipart/%s;
boundary=\"%s\"][7bit]]\n"
type boundary))))
boundary))))
(defun mime-edit-enquote-region (beg end)
(save-excursion
(save-restriction
(narrow-to-region beg end)
(goto-char beg)
(while (re-search-forward mime-edit-single-part-tag-regexp nil t)
(let ((tag (buffer-substring (match-beginning 0)(match-end 0))))
(replace-match (concat "- " (substring tag 1))))))))
(defun mime-edit-dequote-region (beg end)
(save-excursion
(save-restriction
(narrow-to-region beg end)
(goto-char beg)
(while (re-search-forward
mime-edit-quoted-single-part-tag-regexp nil t)
(let ((tag (buffer-substring (match-beginning 0)(match-end 0))))
(replace-match (concat "-" (substring tag 2))))))))
(defun mime-edit-delete-trailing-whitespace ()
(save-match-data
(save-excursion
(goto-char (point-min))
(while (re-search-forward "[ \t]+$" nil t)
(delete-region (match-beginning 0) (match-end 0))))))
(defun mime-edit-pgp-keys-valid-key (key-list usage)
"Return the first valid key for USAGE from KEY-LIST or nil
if there is no valid key.
KEY-LIST is a list of epg key object.
Secret key list couldn't be evaluated appropriately.
USAGE is a symbol denoting the intended usage."
(catch 'found
(while key-list
(dolist (subkey (epg-key-sub-key-list (car key-list)))
(when (and (memq usage (epg-sub-key-capability subkey))
;; Validity of a secret key could not be gettable.
(epg-sub-key-validity subkey)
(not (memq (epg-sub-key-validity subkey)
mime-edit-pgp-filtered-validities)))
(throw 'found (car key-list))))
(setq key-list (cdr key-list)))))
(defun mime-edit-pgp-get-signers (context)
(let ((signer (cadr (std11-extract-address-components
(or (save-restriction
(widen)
(std11-field-body "From" mail-header-separator))
""))))
keys default-keys)
(setq signer (and signer (concat "<" signer ">")))
(if mime-edit-pgp-verbose
(epa-select-keys
context
"\
Select keys for signing.
If no one is selected, default secret key is used. "
(delq nil (cons signer mime-edit-pgp-signers))
t)
(setq keys (epg-list-keys context signer))
(when mime-edit-pgp-signers
(setq default-keys
(apply #'nconc (mapcar (lambda (name)
(epg-list-keys context name))
mime-edit-pgp-signers)))
(setq keys
(catch 'found
(mapc (lambda (key)
(and key
(member key keys)
(throw 'found (list key))))
default-keys)
(delq nil (nconc keys default-keys)))))
(list (mime-edit-pgp-keys-valid-key keys 'sign)))))
(unless-broken ccl-usable
(define-ccl-program mime-edit-normalize-eol-crlf
'(2
((r1 = 0)
(loop (read r0)
(if (r0 == ?\n)
(if (r1 != ?\r)
(write ?\r)))
(r1 = r0)
(write-repeat r0))))))
(defun mime-edit-sign-pgp-mime (beg end boundary)
(save-excursion
(save-restriction
(let* ((ret (let ((mime-transfer-level 7))
(narrow-to-region beg end)
(mime-edit-translate-region beg end boundary)))
(ctype (car ret))
(encoding (nth 1 ret))
(pgp-boundary (concat "pgp-sign-" boundary))
(context (epg-make-context))
signature micalg)
(mime-edit-delete-trailing-whitespace) ; RFC3156
(goto-char beg)
(insert (format "Content-Type: %s\n" ctype))
(if encoding
(insert (format "Content-Transfer-Encoding: %s\n" encoding)))
(insert "\n")
(epg-context-set-armor context t)
(epg-context-set-textmode context nil)
(epg-context-set-signers
context
(mime-edit-pgp-get-signers context))
(setq signature
(epg-sign-string
context
(if-broken ccl-usable
(let ((index (goto-char (point-min)))
plain)
(while (re-search-forward "\r?\n" nil t)
(setq plain (cons "\r\n"
(cons (buffer-substring
index (match-beginning 0))
plain))
index (match-end 0)))
(apply 'concat (nreverse
(cons (buffer-substring index (point-max))
plain))))
(ccl-execute-on-string
'mime-edit-normalize-eol-crlf
(make-vector 9 0) (buffer-string)))
'detached))
(setq micalg (epg-new-signature-digest-algorithm
(car (epg-context-result-for context 'sign))))
(goto-char beg)
(insert (format "--[[multipart/signed;
boundary=\"%s\"%s;
protocol=\"application/pgp-signature\"][7bit]]
--%s
"
pgp-boundary
(if micalg
(concat "; micalg=pgp-"
(downcase
(cdr (assq micalg
epg-digest-algorithm-alist))))
"")
pgp-boundary))
(goto-char (point-max))
(insert (format "\n--%s
Content-Type: application/pgp-signature
Content-Transfer-Encoding: 7bit
Content-Description: OpenPGP Digital Signature
" pgp-boundary))
(insert signature)
(goto-char (point-max))
(insert (format "\n--%s--\n" pgp-boundary))))))
(defun mime-edit-text-coding ()
(save-excursion
(let* ((tag
;; Get tag string and set point to the beginnig of
;; the content.
(or (and (re-search-backward
mime-edit-single-part-tag-regexp nil t)
(goto-char (match-end 0))
(buffer-substring (match-beginning 0) (match-end 0)))
(progn (goto-char (point-min))
(re-search-forward
(concat "\n" (regexp-quote mail-header-separator)
(if mime-ignore-preceding-spaces
"[ \t\n]*\n" "\n")) nil t)
(mime-make-text-tag))))
(contype (mime-edit-get-contype tag))
(charset (mime-get-parameter contype "charset")))
(setq charset (if charset (intern (downcase charset))
(mime-edit-choose-charset)))
(mime-charset-to-coding-system charset))))
(defun mime-edit-sign-pgp-nonmime (start end signers mode)
"Sign the current region between START and END by SIGNERS keys selected.
Appropriate coding system is selected automatically.
When called interactively, current mime part is signed."
(interactive
(progn
(let ((mime-edit-pgp-verbose
(or current-prefix-arg mime-edit-pgp-verbose))
(context (epg-make-context epa-protocol)))
(list (mime-edit-content-beginning)
(mime-edit-content-end)
(mime-edit-pgp-get-signers context)
(if mime-edit-pgp-verbose
(epa--read-signature-type)
'clear)))))
(setq epa-last-coding-system-specified (mime-edit-text-coding))
(epa-sign-region start end signers mode))
(defun mime-edit-encrypt-pgp-nonmime (start end recipients sign signers)
"Encrypt the current region between START and END for RECIPIENTS.
Appropriate coding system is selected automatically.
When called interactively, current mime part is encrypted.
When SIGN is non-nil, also sign by SIGNERS keys selected."
(interactive
(let ((mime-edit-pgp-verbose
(or current-prefix-arg mime-edit-pgp-verbose))
(context (epg-make-context epa-protocol))
sign)
(list (mime-edit-content-beginning)
(mime-edit-content-end)
(epa-select-keys context
"Select recipients for encryption.
If no one is selected, symmetric encryption will be performed. ")
(setq sign (if mime-edit-pgp-verbose (y-or-n-p "Sign? ")))
(if sign
(epa-select-keys context
"Select keys for signing. ")))))
(setq epa-last-coding-system-specified (mime-edit-text-coding))
(epa-encrypt-region start end recipients sign signers))
(defvar mime-edit-encrypt-recipient-fields-list '("From" "To" "cc"))
(defun mime-edit-make-encrypt-recipient-header ()
(let ((config (epg-configuration))
(field-names (mapcar 'downcase
mime-edit-encrypt-recipient-fields-list))
header recipients name value)
(save-excursion
(save-restriction
(std11-narrow-to-header mail-header-separator)
(goto-char (point-min))
(while (re-search-forward
(concat "^\\(" std11-field-name-regexp "\\):[ \t]*") nil t)
(when (member (downcase (match-string 1)) field-names)
(setq name (buffer-substring-no-properties
(match-beginning 1) (match-end 1))
value (buffer-substring-no-properties
(match-end 0) (std11-field-end)))
(when (and (stringp value) (null (string-equal value "")))
(setq header (cons (format "%s: %s\n" name value) header))
(when (or mime-edit-pgp-encrypt-to-self
(null (string-equal (downcase name) "from")))
(setq recipients (cons (mapcar
'std11-address-string
(std11-parse-addresses-string value))
recipients))))))))
(cons (apply #'nconc
(mapcar (lambda (recipient)
(or (epg-expand-group config recipient)
(list (concat "<" recipient ">"))))
(apply #'nconc recipients)))
(apply #'concat (nreverse header)))))
(defcustom mime-edit-encrypt-pgp-ignore-missing-keys 'ask
"Define the behavior when no available key for recipient was found.
When value is ask, you are prompted whether proceed.
When value is nil, quit encryption and an an error is signaled.
When value is other non-nil, show only message and proceed."
:group 'mime-edit-pgp
:type '(choice
(const :tag "Ask user" ask)
(const :tag "Show message and proceed" t)
(const :tag "Stop encryption and raise error" nil)))
(defun mime-edit-encrypt-pgp-recipients-keys (context recipients)
(delq
nil
(mapcar
(lambda (name)
(or (mime-edit-pgp-keys-valid-key
(epg-list-keys context name) 'encrypt)
(cond
((eq mime-edit-encrypt-pgp-ignore-missing-keys 'ask)
(unless (y-or-n-p
(format
"No available encryption key for %s, proceed? " name))
(signal 'epg-error '(quit))))
(mime-edit-encrypt-pgp-ignore-missing-keys
(message "No available encryption key for %s" name)
(sit-for 1)
nil)
(t
(error "No available encryption key for %s" name)))))
recipients)))
(defun mime-edit-encrypt-pgp-mime (beg end boundary)
(save-excursion
(save-restriction
(let* ((ret (mime-edit-make-encrypt-recipient-header))
(recipients (car ret))
(header (cdr ret)))
(narrow-to-region beg end)
(let* ((ret
(mime-edit-translate-region beg end boundary))
(ctype (car ret))
(encoding (nth 1 ret))
(pgp-boundary (concat "pgp-" boundary))
(context (epg-make-context))
cipher)
(goto-char beg)
(insert header)
(insert (format "Content-Type: %s\n" ctype))
(if encoding
(insert (format "Content-Transfer-Encoding: %s\n" encoding)))
(insert "\n")
(mime-encode-header-in-buffer)
(epg-context-set-armor context t)
(setq recipients
(if mime-edit-pgp-verbose
(epa-select-keys context "\
Select recipients for encryption.
If no one is selected, symmetric encryption will be performed. "
recipients)
(mime-edit-encrypt-pgp-recipients-keys context recipients)))
(setq cipher
(epg-encrypt-string
context
(buffer-substring (point-min) (point-max))
recipients))
(delete-region (point-min)(point-max))
(goto-char beg)
(insert (format "--[[multipart/encrypted;
boundary=\"%s\";
protocol=\"application/pgp-encrypted\"][7bit]]
--%s
Content-Type: application/pgp-encrypted
Version: 1
--%s
Content-Type: application/octet-stream
Content-Transfer-Encoding: 7bit
" pgp-boundary pgp-boundary pgp-boundary))
(insert cipher)
(goto-char (point-max))
(insert (format "\n--%s--\n" pgp-boundary)))))))
(defun mime-edit-convert-lbt-string (string)
(let (inhibit-eol-conversion)
(encode-coding-string string 'raw-text-dos)))
(defun mime-edit-sign-smime (beg end boundary)
(save-excursion
(save-restriction
(let* ((from (std11-field-body "From" mail-header-separator))
(ret (progn
(narrow-to-region beg end)
(mime-edit-translate-region beg end boundary)))
(ctype (car ret))
(encoding (nth 1 ret))
(smime-boundary (concat "smime-sign-" boundary))
(context (epg-make-context 'CMS))
signature micalg)
(goto-char beg)
(insert (format "Content-Type: %s\n" ctype))
(if encoding
(insert (format "Content-Transfer-Encoding: %s\n" encoding)))
(insert "\n")
(epg-context-set-signers
context
(epa-select-keys
context
"\
Select keys for signing.
If no one is selected, default secret key is used. "
(if from
(list (nth 1 (std11-extract-address-components from))))
t))
(setq signature
(epg-sign-string context
(mime-edit-convert-lbt-string
(buffer-substring (point-min) (point-max)))
'detached))
(setq micalg (epg-new-signature-digest-algorithm
(car (epg-context-result-for context 'sign))))
(goto-char beg)
(insert (format "--[[multipart/signed;
boundary=\"%s\"%s;
protocol=\"application/pkcs7-signature\"][7bit]]
--%s
"
smime-boundary
(if micalg
(concat "; micalg="
(downcase
(cdr (assq micalg
epg-digest-algorithm-alist))))
"")
smime-boundary))
(goto-char (point-max))
(insert (format "\n--%s
Content-Type: application/pkcs7-signature; name=smime.p7s
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=smime.p7s
Content-Description: S/MIME Digital Signature
" smime-boundary)
(base64-encode-string signature))))))
(defun mime-edit-encrypt-smime (beg end boundary)
(save-excursion
(save-restriction
(let* ((ret (mime-edit-make-encrypt-recipient-header))
(recipients (car ret))
(header (cdr ret)))
(narrow-to-region beg end)
(let* ((ret
(mime-edit-translate-region beg end boundary))
(ctype (car ret))
(encoding (nth 1 ret))
(context (epg-make-context 'CMS))
cipher)
(goto-char beg)
(insert header)
(insert (format "Content-Type: %s\n" ctype))
(if encoding
(insert (format "Content-Transfer-Encoding: %s\n" encoding)))
(insert "\n")
(mime-encode-header-in-buffer)
(setq cipher
(epg-encrypt-string
context
(buffer-substring (point-min) (point-max))
(epa-select-keys
context
"\
Select recipients for encryption.
If no one is selected, symmetric encryption will be performed. "
recipients)))
(delete-region (point-min)(point-max))
(goto-char beg)
(insert (format "--[[application/pkcs7-mime;
smime-type=enveloped-data;
name=smime.p7m
Content-Disposition: attachment; filename=smime.p7m][base64]]
")
(base64-encode-string cipher)))))))
(defsubst replace-space-with-underline (str)
(mapconcat (lambda (arg)
(list
(if (eq arg ?\ )
?_
arg))) str nil))
(defun mime-edit-make-boundary ()
(concat mime-multipart-boundary "_"
(replace-space-with-underline (current-time-string))))
(defun mime-edit-translate-body ()
"Encode the tagged MIME body in current buffer in MIME compliant message."
(interactive)
(save-excursion
(let ((boundary (mime-edit-make-boundary))
(i 1)
ret)
(while (mime-edit-process-multipart-1
(format "%s-%d" boundary i))
(setq i (1+ i)))
(save-restriction
;; We are interested in message body.
(let* ((beg
(progn
(goto-char (point-min))
(re-search-forward
(concat "\n" (regexp-quote mail-header-separator)
(if mime-ignore-preceding-spaces
"[ \t\n]*\n" "\n")) nil 'move)
(point)))
(end
(progn
(goto-char (point-max))
(and mime-ignore-trailing-spaces
(re-search-backward "[^ \t\n]\n" beg t)
(forward-char 1))
(point))))
(setq ret (mime-edit-translate-region
beg end
(format "%s-%d" boundary i)))))
(mime-edit-dequote-region (point-min)(point-max))
(let ((contype (car ret)) ;Content-Type
(encoding (nth 1 ret)) ;Content-Transfer-Encoding
)
;; Insert User-Agent field
(and mime-edit-insert-user-agent-field
(or (mail-position-on-field "User-Agent")
(insert mime-edit-user-agent-value)))
;; Make primary MIME headers.
(or (mail-position-on-field "MIME-Version")
(insert mime-edit-mime-version-value))
;; Remove old Content-Type and other fields.
(save-restriction
(goto-char (point-min))
(search-forward (concat "\n" mail-header-separator "\n") nil t)
(narrow-to-region (point-min) (point))
(goto-char (point-min))
(mime-delete-field "Content-Type")
(mime-delete-field "Content-Transfer-Encoding"))
;; Then, insert Content-Type and Content-Transfer-Encoding fields.
(mail-position-on-field "Content-Type")
(insert contype)
(if encoding
(progn
(mail-position-on-field "Content-Transfer-Encoding")
(insert encoding)))))))
(defun mime-edit-translate-single-part-tag (boundary &optional prefix)
"Translate single-part-tag to MIME header."
(if (re-search-forward mime-edit-single-part-tag-regexp nil t)
(let* ((beg (match-beginning 0))
(end (match-end 0))
(tag (buffer-substring beg end)))
(delete-region beg end)
(let ((contype (mime-edit-get-contype tag))
(encoding (mime-edit-get-encoding tag)))
(insert (or prefix "") "--" boundary "\n")
(save-restriction
(narrow-to-region (point)(point))
(insert "Content-Type: " contype "\n")
(if encoding
(insert "Content-Transfer-Encoding: " encoding "\n"))
(mime-encode-header-in-buffer))
(cons (and contype
(downcase contype))
(and encoding
(downcase encoding)))))))
(defun mime-edit-translate-region (beg end &optional boundary multipart)
(or boundary
(setq boundary (mime-edit-make-boundary)))
(save-excursion
(save-restriction
(narrow-to-region beg end)
(let ((tag nil) ;MIME tag
(contype nil) ;Content-Type
(encoding nil) ;Content-Transfer-Encoding
(nparts 0)) ;Number of body parts
;; Normalize the body part by inserting appropriate message
;; tags for every message contents.
(mime-edit-normalize-body)
;; Counting the number of Content-Type.
(goto-char (point-min))
(while (re-search-forward mime-edit-single-part-tag-regexp nil t)
(setq nparts (1+ nparts)))
;; Begin translation.
(cond
((and (<= nparts 1)(not multipart))
;; It's a singular message.
(goto-char (point-min))
(while (re-search-forward
mime-edit-single-part-tag-regexp nil t)
(setq tag
(buffer-substring (match-beginning 0) (match-end 0)))
(delete-region (match-beginning 0) (1+ (match-end 0)))
(setq contype (mime-edit-get-contype tag))
(setq encoding (mime-edit-get-encoding tag))))
(t
;; It's a multipart message.
(goto-char (point-min))
(let ((prio mime-content-transfer-encoding-priority-list)
part-info nprio)
(when (setq part-info
(mime-edit-translate-single-part-tag boundary))
(and (setq nprio (member (cdr part-info) prio))
(setq prio nprio))
(while (setq part-info
(mime-edit-translate-single-part-tag boundary "\n"))
(and (setq nprio (member (cdr part-info) prio))
(setq prio nprio))))
;; Define Content-Type as "multipart/mixed".
(setq contype
(concat "multipart/mixed;\n boundary=\"" boundary "\""))
(setq encoding (car prio))
;; Insert the trailer.
(goto-char (point-max))
(insert "\n--" boundary "--\n"))))
(list contype encoding boundary nparts)))))
(defun mime-edit-normalize-body ()
"Normalize the body part by inserting appropriate message tags."
;; Insert the first MIME tags if necessary.
(goto-char (point-min))
(if (not (looking-at mime-edit-single-part-tag-regexp))
(insert (mime-make-text-tag) "\n"))
;; Check each tag, and add new tag or correct it if necessary.
(goto-char (point-min))
(while (re-search-forward mime-edit-single-part-tag-regexp nil t)
(let* ((tag (buffer-substring (match-beginning 0) (match-end 0)))
(contype (mime-edit-get-contype tag))
(charset (mime-get-parameter contype "charset"))
(encoding (mime-edit-get-encoding tag)))
;; Remove extra whitespaces after the tag.
(if (looking-at "[ \t]+$")
(delete-region (match-beginning 0) (match-end 0)))
(let ((beg (point))
(end (mime-edit-content-end)))
(if (= end (point-max))
nil
(goto-char end)
(or (looking-at mime-edit-beginning-tag-regexp)
(eobp)
(insert (mime-make-text-tag) "\n")))
(visible-region beg end)
(goto-char beg))
(cond
((mime-test-content-type contype "message")
;; Content-type "message" should be sent as is.
(forward-line 1))
((mime-test-content-type contype "text")
;; Define charset for text.
(setq charset
(cond
;; charset is explicitly defined.
(charset
(intern (downcase charset)))
;; Encoded (inserted text file).
(encoding
(let* ((string
(mime-decode-string
(buffer-substring (point) (mime-edit-content-end))
encoding))
(coding (detect-coding-string string t)))
(or (coding-system-to-mime-charset coding)
(detect-mime-charset-string string))))
;; Inputted directly or reeditting.
(t
(mime-edit-choose-charset))))
(mime-edit-define-charset charset)
(cond ((string-equal contype "text/x-rot13-47-48")
(save-excursion
(forward-line)
(mule-caesar-region (point) (mime-edit-content-end))))
((string-equal contype "text/enriched")
(save-excursion
(let ((beg (progn
(forward-line)
(point)))
(end (mime-edit-content-end)))
;; Patch for hard newlines
;; (save-excursion
;; (goto-char beg)
;; (while (search-forward "\n" end t)
;; (put-text-property (match-beginning 0)
;; (point)
;; 'hard t)))
;; End patch for hard newlines
(enriched-encode beg end nil)
(goto-char beg)
(if (search-forward "\n\n")
(delete-region beg (match-end 0)))))))
;; Point is now on current tag.
;; Define encoding and encode text if necessary.
(or encoding ;Encoding is not specified.
(let* ((encoding
(let (bits conv)
(let ((ret (cdr (assq charset mime-charset-type-list))))
(if ret
(setq bits (car ret)
conv (nth 1 ret))
(setq bits 8
conv "quoted-printable")))
(if (<= bits mime-transfer-level)
(mime-encoding-name bits)
conv)))
(beg (mime-edit-content-beginning)))
(encode-mime-charset-region beg (mime-edit-content-end)
charset)
;; Protect "From " in beginning of line
(save-restriction
(narrow-to-region beg (mime-edit-content-end))
(goto-char beg)
(let (case-fold-search)
(if (re-search-forward "^From " nil t)
(unless encoding
(if (memq charset '(iso-2022-jp
iso-2022-jp-2
iso-2022-int-1
x-ctext))
(while (progn
(replace-match "\e(BFrom ")
(re-search-forward "^From " nil t)))
(setq encoding "quoted-printable"))))))
;; canonicalize line break code
(or (member encoding '(nil "7bit" "8bit" "quoted-printable"))
(save-restriction
(narrow-to-region beg (mime-edit-content-end))
(goto-char beg)
(while (re-search-forward "\\(\\=\\|[^\r]\\)\n" nil t)
;; In a certain period, `replace-match' with "\\N"
;; converted 8-bit characters into multibyte string,
;; but it has been fixed at 2004-01-15.
;;(replace-match "\\1\r\n"))))
(backward-char 1)
(insert "\r")
(forward-char 1))))
(goto-char beg)
(mime-encode-region beg (mime-edit-content-end)
(or encoding "7bit"))
(mime-edit-define-encoding encoding)))
(goto-char (mime-edit-content-end)))
((null encoding) ;Encoding is not specified.
;; Application, image, audio, video, and any other
;; unknown content-type without encoding should be
;; encoded.
(let* ((encoding "base64") ;Encode in BASE64 by default.
(beg (mime-edit-content-beginning))
(end (mime-edit-content-end)))
(mime-encode-region beg end encoding)
(mime-edit-define-encoding encoding))
(forward-line 1))))))
(defun mime-delete-field (field)
"Delete header FIELD."
(let ((regexp (format "^%s:[ \t]*" field)))
(goto-char (point-min))
(while (re-search-forward regexp nil t)
(delete-region (match-beginning 0)
(1+ (std11-field-end))))))
;;;
;;; Platform dependent functions
;;;
;; Sun implementations
(defun mime-edit-voice-recorder-for-sun (encoding)
"Record voice in a buffer using Sun audio device,
and insert data encoded as ENCODING."
(message "Start the recording on %s. Type C-g to finish the recording..."
(system-name))
(mime-insert-encoded-file "/dev/audio" encoding))
;;; @ Other useful commands.
;;;
;; Message forwarding commands as content-type "message/rfc822".
(defun mime-edit-insert-message (&optional message)
(interactive)
(let ((inserter (cdr (assq major-mode mime-edit-message-inserter-alist))))
(if (and inserter (fboundp inserter))
(progn
(mime-edit-insert-tag "message" "rfc822")
(funcall inserter message))
(message "Sorry, I don't have message inserter for your MUA."))))
(defun mime-edit-insert-mail (&optional message)
(interactive)
(let ((inserter (cdr (assq major-mode mime-edit-mail-inserter-alist))))
(if (and inserter (fboundp inserter))
(progn
(mime-edit-insert-tag "message" "rfc822")
(funcall inserter message))
(message "Sorry, I don't have mail inserter for your MUA."))))
(defun mime-edit-inserted-message-filter ()
(save-excursion
(save-restriction
(let ((header-start (point))
(case-fold-search t)
beg end)
;; for Emacs 18
;; (if (re-search-forward "^$" (marker-position (mark-marker)))
(if (re-search-forward "^$" (mark t))
(narrow-to-region header-start (match-beginning 0)))
(goto-char header-start)
(while (and (re-search-forward
mime-edit-yank-ignored-field-regexp nil t)
(setq beg (match-beginning 0))
(setq end (1+ (std11-field-end))))
(delete-region beg end))))))
;;; @ multipart enclosure
;;;
(defun mime-edit-enclose-region-internal (type beg end)
(save-excursion
(goto-char beg)
(save-restriction
(narrow-to-region beg end)
(insert (format "--<<%s>>-{\n" type))
(goto-char (point-max))
(insert (format "--}-<<%s>>\n" type))
(goto-char (point-max)))
(or (looking-at mime-edit-beginning-tag-regexp)
(eobp)
(insert (mime-make-text-tag) "\n"))))
(defun mime-edit-enclose-quote-region (beg end)
(interactive "*r")
(mime-edit-enclose-region-internal 'quote beg end))
(defun mime-edit-enclose-mixed-region (beg end)
(interactive "*r")
(mime-edit-enclose-region-internal 'mixed beg end))
(defun mime-edit-enclose-parallel-region (beg end)
(interactive "*r")
(mime-edit-enclose-region-internal 'parallel beg end))
(defun mime-edit-enclose-digest-region (beg end)
(interactive "*r")
(mime-edit-enclose-region-internal 'digest beg end))
(defun mime-edit-enclose-alternative-region (beg end)
(interactive "*r")
(mime-edit-enclose-region-internal 'alternative beg end))
(defun mime-edit-enclose-pgp-signed-region (beg end)
(interactive "*r")
(mime-edit-enclose-region-internal 'pgp-signed beg end))
(defun mime-edit-enclose-pgp-encrypted-region (beg end)
(interactive "*r")
(mime-edit-enclose-region-internal 'pgp-encrypted beg end))
(defun mime-edit-enclose-smime-signed-region (beg end)
(interactive "*r")
(mime-edit-enclose-region-internal 'smime-signed beg end))
(defun mime-edit-enclose-smime-encrypted-region (beg end)
(interactive "*r")
(mime-edit-enclose-region-internal 'smime-encrypted beg end))
(defun mime-edit-insert-key (&optional _arg)
"Insert a pgp public key."
(interactive "P")
(mime-edit-insert-tag "application" "pgp-keys")
(mime-edit-define-encoding "7bit")
(let ((context (epg-make-context)))
(epg-context-set-armor context t)
(insert (epg-export-keys-to-string
context (epa-select-keys context "Select keys for export. "))))
(if (and (not (eobp))
(not (looking-at mime-edit-single-part-tag-regexp)))
(insert (mime-make-text-tag) "\n")))
;;; @ flag setting
;;;
(defun mime-edit-set-split (arg)
(interactive
(list
(y-or-n-p "Do you want to enable split? ")))
(setq mime-edit-split-message arg)
(if arg
(message "This message is enabled to split.")
(message "This message is not enabled to split.")))
(defun mime-edit-toggle-transfer-level (&optional transfer-level)
"Toggle transfer-level is 7bit or 8bit through.
Optional TRANSFER-LEVEL is a number of transfer-level, 7 or 8."
(interactive)
(if (numberp transfer-level)
(setq mime-transfer-level transfer-level)
(if (< mime-transfer-level 8)
(setq mime-transfer-level 8)
(setq mime-transfer-level 7)))
(message (format "Current transfer-level is %d bit"
mime-transfer-level))
(setq mime-transfer-level-string
(mime-encoding-name mime-transfer-level 'not-omit))
(force-mode-line-update))
(defun mime-edit-set-transfer-level-7bit ()
(interactive)
(mime-edit-toggle-transfer-level 7))
(defun mime-edit-set-transfer-level-8bit ()
(interactive)
(mime-edit-toggle-transfer-level 8))
;;; @ pgp
;;;
(defvar mime-edit-pgp-processing nil)
(make-variable-buffer-local 'mime-edit-pgp-processing)
(defun mime-edit-set-sign (arg)
(interactive
(list
(y-or-n-p "Do you want to sign? ")))
(if arg
(progn
(or (memq 'sign mime-edit-pgp-processing)
(setq mime-edit-pgp-processing
(nconc mime-edit-pgp-processing
(copy-sequence '(sign)))))
(message "This message will be signed."))
(setq mime-edit-pgp-processing
(delq 'sign mime-edit-pgp-processing))
(message "This message will not be signed.")))
(defun mime-edit-set-encrypt (arg)
(interactive
(list
(y-or-n-p "Do you want to encrypt? ")))
(if arg
(progn
(or (memq 'encrypt mime-edit-pgp-processing)
(setq mime-edit-pgp-processing
(nconc mime-edit-pgp-processing
(copy-sequence '(encrypt)))))
(message "This message will be encrypted."))
(setq mime-edit-pgp-processing
(delq 'encrypt mime-edit-pgp-processing))
(message "This message will not be encrypted.")))
(defun mime-edit-pgp-enclose-buffer ()
(let ((beg (save-excursion
(goto-char (point-min))
(if (search-forward (concat "\n" mail-header-separator "\n"))
(match-end 0)))))
(when beg
(if (memq 'sign mime-edit-pgp-processing)
(mime-edit-enclose-pgp-signed-region beg (point-max)))
(if (memq 'encrypt mime-edit-pgp-processing)
(mime-edit-enclose-pgp-encrypted-region beg (point-max))))))
;;; @ split
;;;
(defun mime-edit-insert-partial-header (fields subject
id number total separator)
(insert fields)
(insert (format "Subject: %s (%d/%d)\n" subject number total))
(insert mime-edit-mime-version-field-for-message/partial)
(insert (format "\
Content-Type: message/partial; id=%s; number=%d; total=%d\n%s\n"
id number total separator)))
(defun mime-edit-split-and-send
(&optional cmd lines mime-edit-message-max-length)
(interactive)
(or lines
(setq lines
(count-lines (point-min) (point-max))))
(or mime-edit-message-max-length
(setq mime-edit-message-max-length
(or (cdr (assq major-mode mime-edit-message-max-lines-alist))
mime-edit-message-default-max-lines)))
(let ((separator mail-header-separator)
(id (concat "\""
(replace-space-with-underline (current-time-string))
"@" (system-name) "\"")))
(run-hooks 'mime-edit-before-split-hook)
(let ((the-buf (current-buffer))
(copy-buf (get-buffer-create " *Original Message*"))
(header (std11-header-string-except
mime-edit-split-ignored-field-regexp separator))
(subject (mail-fetch-field "subject"))
(total (+ (/ lines mime-edit-message-max-length)
(if (> (mod lines mime-edit-message-max-length) 0)
1)))
(command
(or cmd
(cdr
(assq major-mode
mime-edit-split-message-sender-alist))
(lambda ()
(interactive)
(error "Split sender is not specified for `%s'." major-mode))))
(mime-edit-partial-number 1)
data)
(with-current-buffer copy-buf
(erase-buffer)
(insert-buffer-substring the-buf)
(goto-char (point-min))
(save-restriction
(if (re-search-forward
(concat "^" (regexp-quote separator) "$") nil t)
(let ((he (match-beginning 0)))
(replace-match "")
(narrow-to-region (point-min) he)))
(goto-char (point-min))
(while (re-search-forward mime-edit-split-blind-field-regexp nil t)
(delete-region (match-beginning 0)
(1+ (std11-field-end))))))
(while (< mime-edit-partial-number total)
(erase-buffer)
(with-current-buffer copy-buf
(setq data (buffer-substring
(point-min)
(progn
(goto-char (point-min))
(forward-line (1- mime-edit-message-max-length))
(point))))
(delete-region (point-min)(point)))
(mime-edit-insert-partial-header
header subject id mime-edit-partial-number total separator)
(insert data)
(save-excursion
(message (format "Sending %d/%d..."
mime-edit-partial-number total))
(call-interactively command)
(message (format "Sending %d/%d...done"
mime-edit-partial-number total)))
(setq mime-edit-partial-number
(1+ mime-edit-partial-number)))
(erase-buffer)
(with-current-buffer copy-buf
(setq data (buffer-string))
(erase-buffer))
(mime-edit-insert-partial-header
header subject id mime-edit-partial-number total separator)
(insert data)
(save-excursion
(message (format "Sending %d/%d..."
mime-edit-partial-number total))
(message (format "Sending %d/%d...done"
mime-edit-partial-number total))))))
(defun mime-edit-maybe-split-and-send (&optional cmd)
(interactive)
(run-hooks 'mime-edit-before-send-hook)
(let ((mime-edit-message-max-length
(or (cdr (assq major-mode mime-edit-message-max-lines-alist))
mime-edit-message-default-max-lines))
(lines (count-lines (point-min) (point-max))))
(if (and (> lines mime-edit-message-max-length)
mime-edit-split-message)
(mime-edit-split-and-send cmd lines mime-edit-message-max-length))))
;;; @ preview message
;;;
(defvar mime-edit-buffer nil) ; buffer local variable
(defvar mime-edit-temp-message-buffer nil) ; buffer local variable
(defun mime-edit-preview-message ()
"preview editing MIME message."
(interactive)
(let* ((str (buffer-string))
(separator mail-header-separator)
(the-buf (current-buffer))
(buf-name (buffer-name))
(temp-buf-name (concat "*temp-article:" buf-name "*"))
(buf (get-buffer temp-buf-name))
(pgp-processing mime-edit-pgp-processing))
(if buf
(progn
(switch-to-buffer buf)
(erase-buffer))
(setq buf (get-buffer-create temp-buf-name))
(switch-to-buffer buf))
(insert str)
(setq major-mode 'mime-temp-message-mode)
(make-local-variable 'mail-header-separator)
(setq mail-header-separator separator)
(make-local-variable 'mime-edit-buffer)
(setq mime-edit-buffer the-buf)
(setq mime-edit-pgp-processing pgp-processing)
(run-hooks 'mime-edit-translate-hook)
(condition-case error
(mime-edit-translate-buffer)
((error quit)
(switch-to-buffer the-buf)
(unless mime-edit-debug
(kill-buffer buf))
(signal (car error) (cdr error))))
(goto-char (point-min))
(if (re-search-forward
(concat "^" (regexp-quote separator) "$"))
(replace-match ""))
(mime-view-buffer)
(make-local-variable 'mime-edit-temp-message-buffer)
(setq mime-edit-temp-message-buffer buf)))
(defun mime-edit-quitting-method ()
"Quitting method for mime-view."
(let* ((temp mime-edit-temp-message-buffer)
buf)
(mime-preview-kill-buffer)
(set-buffer temp)
(setq buf mime-edit-buffer)
(kill-buffer temp)
(switch-to-buffer buf)))
(set-alist 'mime-preview-quitting-method-alist
'mime-temp-message-mode
#'mime-edit-quitting-method)
;;; @ edit again
;;;
(defvar mime-edit-again-ignored-field-regexp
(concat "^\\(" "Content-.*\\|Mime-Version"
(if mime-edit-insert-user-agent-field "\\|User-Agent")
"\\):")
"Regexp for deleted header fields when `mime-edit-again' is called.")
(defsubst eliminate-top-spaces (string)
"Eliminate top sequence of space or tab in STRING."
(if (string-match "^[ \t]+" string)
(substring string (match-end 0))
string))
(defun mime-edit-decode-multipart-in-buffer (content-type not-decode-text)
(let* ((subtype
(or
(cdr (assoc (mime-content-type-parameter content-type "protocol")
'(("application/pgp-encrypted" . pgp-encrypted)
("application/pgp-signature" . pgp-signed))))
(mime-content-type-subtype content-type)))
(boundary (mime-content-type-parameter content-type "boundary"))
(boundary-pat (concat "\n--" (regexp-quote boundary) "[ \t]*\n")))
(re-search-forward boundary-pat nil t)
(let ((bb (match-beginning 0)) eb tag)
(setq tag (format "\n--<<%s>>-{\n" subtype))
(goto-char bb)
(insert tag)
(setq bb (+ bb (length tag)))
(re-search-forward
(concat "\n--" (regexp-quote boundary) "--[ \t]*\n")
nil t)
(setq eb (match-beginning 0))
(replace-match (format "--}-<<%s>>\n" subtype))
(save-restriction
(narrow-to-region bb eb)
(goto-char (point-min))
(while (re-search-forward boundary-pat nil t)
(let ((beg (match-beginning 0))
end)
(delete-region beg (match-end 0))
(save-excursion
(if (re-search-forward boundary-pat nil t)
(setq end (match-beginning 0))
(setq end (point-max)))
(save-restriction
(narrow-to-region beg end)
(cond
((eq subtype 'pgp-encrypted)
(when (progn
(goto-char (point-min))
(re-search-forward "^-+BEGIN PGP MESSAGE-+$"
nil t))
(insert (epg-decrypt-string
(epg-make-context)
(buffer-substring (match-beginning 0)
(point-max))))
(delete-region (point)(point-max))
(mime-edit-decode-message-in-buffer
nil not-decode-text)
(delete-region (goto-char (point-min))
(if (search-forward "\n\n" nil t)
(match-end 0)
(point-min)))
(goto-char (point-max))))
(t
(mime-edit-decode-message-in-buffer
(if (eq subtype 'digest)
(eval-when-compile
(make-mime-content-type 'message 'rfc822)))
not-decode-text)
(goto-char (point-max))))))))))
(goto-char (point-min))
(or (= (point-min) 1)
(delete-region (point-min)
(if (search-forward "\n\n" nil t)
(match-end 0)
(point-min))))))
(defun mime-edit-decode-single-part-in-buffer
(content-type not-decode-text &optional content-disposition)
(let* ((type (mime-content-type-primary-type content-type))
(subtype (mime-content-type-subtype content-type))
(ctype (format "%s/%s" type subtype))
charset
(pstr
(let ((bytes (+ 14 (length ctype))))
(mapconcat
(lambda (attr)
(if (string= (car attr) "charset")
(progn
(setq charset (cdr attr))
nil)
(let*
((str
(concat
(car attr)
"="
(if (string= "name"
(car attr))
(std11-wrap-as-quoted-string
(eword-decode-and-unfold-unstructured-field-body
(cdr attr)))
(cdr attr))))
(bs (length str)))
(setq bytes (+ bytes bs 2))
(if (< bytes 76)
(concat "; " str)
(setq bytes (+ bs 1))
(concat ";\n " str)
))))
(mime-content-type-parameters content-type) nil)))
encoding
encoded
(limit (save-excursion
(if (search-forward "\n\n" nil t)
(1- (point)))))
(disposition-type
(mime-content-disposition-type content-disposition))
(disposition-str
(if disposition-type
(let ((bytes (+ 21 (length (format "%s" disposition-type)))))
(mapconcat (lambda (attr)
(let* ((str (concat
(car attr)
"="
(if (string-equal "filename"
(car attr))
(std11-wrap-as-quoted-string
(eword-decode-and-unfold-unstructured-field-body
(cdr attr)))
(cdr attr))))
(bs (length str)))
(setq bytes (+ bytes bs 2))
(if (< bytes 76)
(concat "; " str)
(setq bytes (+ bs 1))
(concat ";\n " str)
)))
(mime-content-disposition-parameters
content-disposition)
nil)))))
(if disposition-type
(setq pstr (format "%s\nContent-Disposition: %s%s"
pstr disposition-type disposition-str)))
(mapc (lambda (field)
(save-excursion
(when (re-search-forward (concat "^" field ":") limit t)
(setq pstr (concat
pstr "\n" field ": "
(eliminate-top-spaces
(std11-unfold-string
(buffer-substring (match-end 0)
(std11-field-end limit)))))))))
'("Content-Id" "Content-Language" "Content-Translation-Type"))
(save-excursion
(if (re-search-forward
"^Content-Transfer-Encoding:" limit t)
(let ((beg (match-beginning 0))
(hbeg (match-end 0))
(end (std11-field-end limit)))
(setq encoding
(downcase
(eliminate-top-spaces
(std11-unfold-string
(buffer-substring hbeg end)))))
(if (or charset (eq type 'text))
(progn
(delete-region beg (1+ end))
(goto-char (point-min))
(if (search-forward "\n\n" nil t)
(progn
(mime-decode-region
(match-end 0)(point-max) encoding)
(setq encoded t
encoding nil))))))))
(if (and (eq type 'text)
(or encoded (not not-decode-text)))
(progn
(save-excursion
(goto-char (point-min))
(while (re-search-forward "\r\n" nil t)
(replace-match "\n")))
(decode-mime-charset-region (point-min)(point-max)
(or charset default-mime-charset))))
(let ((he (if (re-search-forward "^$" nil t)
(match-end 0)
(point-min))))
(if (and (eq type 'text)
(eq subtype 'x-rot13-47-48))
(mule-caesar-region he (point-max)))
(if (= (point-min) 1)
(progn
(goto-char he)
(insert "\n"
(mime-create-tag
(format "%s/%s%s" type subtype pstr) encoding)))
(delete-region (point-min) he)
(insert
(mime-create-tag (format "%s/%s%s" type subtype pstr)
encoding))))))
;;;###autoload
(defun mime-edit-decode-message-in-buffer (&optional default-content-type
not-decode-text)
(save-excursion
(goto-char (point-min))
(let ((ctl (or (mime-read-Content-Type)
default-content-type)))
(if ctl
(let ((type (mime-content-type-primary-type ctl)))
(cond
((and (eq type 'application)
(eq (mime-content-type-subtype ctl) 'pgp-signature))
(delete-region (point-min)(point-max)))
((eq type 'multipart)
(mime-edit-decode-multipart-in-buffer ctl not-decode-text))
(t
(mime-edit-decode-single-part-in-buffer
ctl not-decode-text (mime-read-Content-Disposition)))))
(or not-decode-text
(decode-mime-charset-region (point-min) (point-max)
default-mime-charset)))
(if (= (point-min) 1)
(progn
(save-restriction
(std11-narrow-to-header)
(goto-char (point-min))
(while (re-search-forward
mime-edit-again-ignored-field-regexp nil t)
(delete-region (match-beginning 0) (1+ (std11-field-end)))))
(mime-decode-header-in-buffer (not not-decode-text)))))))
;;;###autoload
(defun mime-edit-again (&optional not-decode-text no-separator not-turn-on)
"Convert current buffer to MIME-Edit buffer and turn on MIME-Edit mode.
Content-Type and Content-Transfer-Encoding header fields will be
converted to MIME-Edit tags."
(interactive)
(goto-char (point-min))
(if (search-forward
(concat "\n" (regexp-quote mail-header-separator) "\n")
nil t)
(replace-match "\n\n"))
(mime-edit-decode-message-in-buffer nil not-decode-text)
(goto-char (point-min))
(or no-separator
(and (re-search-forward "^$")
(replace-match mail-header-separator)))
(or not-turn-on
(turn-on-mime-edit)))
;;; @ end
;;;
(provide 'mime-edit)
(run-hooks 'mime-edit-load-hook)
;;; mime-edit.el ends here
0707010000000F000081A4000003E80000006400000001627140E500001998000000000000000000000000000000000000002C00000000semi-1.14.6+239+gb1c245b81715/mime-image.el;;; mime-image.el --- mime-view filter to display images -*- lexical-binding: t -*-
;; Copyright (C) 1995,1996,1997,1998 MORIOKA Tomohiko
;; Copyright (C) 1996 Dan Rich
;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Dan Rich <drich@morpheus.corp.sgi.com>
;; Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
;; Katsumi Yamaoka <yamaoka@jpl.org>
;; Created: 1995/12/15
;; Renamed: 1997/2/21 from tm-image.el
;; Keywords: image, picture, X-Face, MIME, multimedia, mail, news
;; This file is part of SEMI (Showy Emacs MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU XEmacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Commentary:
;; If you use this program with MULE, please install
;; etl8x16-bitmap.bdf font included in tl package.
;;; Code:
(require 'mime-view)
(require 'alist)
(require 'path-util)
(defsubst mime-image-normalize-xbm-buffer ()
(save-excursion
(let ((case-fold-search t) width height)
(goto-char (point-min))
(or (re-search-forward "_width[\t ]+\\([0-9]+\\)" nil t)
(error "!! Illegal xbm file format in the buffer: %s"
(current-buffer)))
(setq width (string-to-number (match-string 1)))
(goto-char (point-min))
(or (re-search-forward "_height[\t ]+\\([0-9]+\\)" nil t)
(error "!! Illegal xbm file format in the buffer: %s"
(current-buffer)))
(setq height (string-to-number (match-string 1)))
(goto-char (point-min))
(re-search-forward "0x[0-9a-f][0-9a-f],")
(delete-region (point-min) (match-beginning 0))
(goto-char (point-min))
(while (re-search-forward "[\n\r\t ,;}]" nil t)
(replace-match ""))
(goto-char (point-min))
(while (re-search-forward "0x" nil t)
(replace-match "\\x" nil t))
(goto-char (point-min))
(insert "(" (number-to-string width) " "
(number-to-string height) " \"")
(goto-char (point-max))
(insert "\")")
(goto-char (point-min))
(read (current-buffer)))))
(defcustom mime-image-max-height nil
"*Max displayed image height of attachment image to a message.
It has effect only when imagemagick or image scaling support is
available.
When value is floating-point, it indicates ratio
to `(frame-pixel-width)'.
When `mime-image-normalize-xbm' is non-nil, original size is
always used for xbm image."
:group 'mime-view
:type '(choice (const :tag "Use original size" nil)
(float :tag "Ratio to frame width")
(integer :tag "Specify in pixel")))
(defcustom mime-image-max-width nil
"*Max displayed image width of attachment image to a message.
It has effect only when imagemagick or image scaling support is
available.
When value is floating-point number, it indicates ratio
to `(frame-pixel-height)'.
When `mime-image-normalize-xbm' is non-nil, original size is
always used for xbm image."
:group 'mime-view
:type '(choice (const :tag "Use original size" nil)
(float :tag "Ratio to frame height")
(integer :tag "Specify in pixel")))
(defcustom mime-image-normalize-xbm t
"*When non-nil, build binary xbm image to display.
Furthermore, image scaling for xbm image is disabled."
:group 'mime-view
:type 'boolean)
(defalias 'mime-image-type-available-p 'image-type-available-p)
(defun mime-image-create
(file-or-data &optional type data-p &rest props)
(let* ((scale-p (and (fboundp 'image-transforms-p)
(memq 'scale (image-transforms-p))))
(imagemagick
(and (null scale-p)
(or mime-image-max-height mime-image-max-width)
(image-type-available-p 'imagemagick)
(fboundp 'imagemagick-filter-types)
(member (downcase (symbol-name type))
(mapcar (lambda (e) (downcase (symbol-name e)))
(imagemagick-filter-types)))))
height width)
(when (and mime-image-normalize-xbm data-p (eq type 'xbm))
(with-temp-buffer
(insert file-or-data)
(setq file-or-data
(mime-image-normalize-xbm-buffer)))
(setq width (car file-or-data)
height (nth 1 file-or-data)
file-or-data (nth 2 file-or-data)))
(setq props
(nconc (and width `(:width ,width))
(and height `(:height ,height))
(and (or scale-p imagemagick)
mime-image-max-width
`(:max-width
,(if (integerp mime-image-max-width)
mime-image-max-width
(floor (* (frame-pixel-width)
mime-image-max-width)))))
(and (or scale-p imagemagick)
mime-image-max-height
`(:max-height
,(if (integerp mime-image-max-height)
mime-image-max-height
(floor (* (frame-pixel-height)
mime-image-max-height)))))
props))
(cond
(imagemagick
(apply #'create-image file-or-data 'imagemagick data-p props))
(t
(apply #'create-image file-or-data type data-p props)))))
(defalias 'mime-image-insert 'insert-image)
(defvar mime-image-format-alist
'((image jpeg jpeg)
(image gif gif)
(image tiff tiff)
(image x-tiff tiff)
(image xbm xbm)
(image x-xbm xbm)
(image x-xpixmap xpm)
(image png png)))
(dolist (rule mime-image-format-alist)
(when (mime-image-type-available-p (nth 2 rule))
(ctree-set-calist-strictly
'mime-preview-condition
(list (cons 'type (car rule))(cons 'subtype (nth 1 rule))
'(body . visible)
(cons 'body-presentation-method #'mime-display-image)
(cons 'image-format (nth 2 rule))))))
;;; @ content filter for images
;;;
;; (for XEmacs 19.12 or later)
(defun mime-display-image (entity situation)
(message "Decoding image...")
(condition-case err
(let ((format (cdr (assq 'image-format situation)))
image)
(setq image
(mime-image-create (mime-entity-content entity)
format 'data))
(if (null image)
(message "Invalid glyph!")
(save-excursion
(mime-image-insert image)
(insert "\n")
(message "Decoding image...done"))))
(error nil err)))
;;; @ end
;;;
(provide 'mime-image)
;;; mime-image.el ends here
07070100000010000081A4000003E80000006400000001627140E5000006EB000000000000000000000000000000000000002A00000000semi-1.14.6+239+gb1c245b81715/mime-mac.el;;; mime-mac.el --- Playback processing module for Mac OS X -*- lexical-binding: t -*-
;; Copyright (C) 2010 Free Software Foundation, Inc.
;; Author: MORIOKA Tomohiko <tomo@m17n.org>
;; Keywords: MIME, multimedia, mail, news
;; This file is part of SEMI (Secretariat of Emacs MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Code:
(require 'mime-play)
(defun mime-mac-save-and-play-with-open (entity situation)
(let ((filename
(mime-save-content entity situation)))
(call-process "open" nil nil nil filename)))
(defun mime-mac-save-and-play-with-preview (entity situation)
(let ((filename
(mime-save-content entity situation)))
(call-process "open" nil nil nil
"-a" "/Applications/Preview.app"
filename)))
;; (mime-add-condition
;; 'action
;; '((type . application)
;; (method . mime-mac-save-and-play-with-open))
;; 'strict)
;; (mime-add-condition
;; 'action
;; '((type . application)(subtype . pdf)
;; (method . mime-mac-save-and-play-with-preview))
;; 'strict)
;;; @ end
;;;
(provide 'mime-mac)
;;; mime-mac.el ends here
07070100000011000081A4000003E80000006400000001627140E500000C7B000000000000000000000000000000000000002E00000000semi-1.14.6+239+gb1c245b81715/mime-partial.el;;; mime-partial.el --- Grabbing all MIME "message/partial"s. -*- lexical-binding: t -*-
;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc.
;; Author: OKABE Yasuo @ Kyoto University
;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Keywords: message/partial, MIME, multimedia, mail, news
;; This file is part of SEMI (Suite of Emacs MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Code:
(require 'mime-view)
(require 'mime-play)
(defun mime-combine-message/partial-pieces-automatically (entity situation)
"Internal method for mime-view to combine message/partial messages
automatically."
(interactive)
(let* ((id (cdr (assoc "id" situation)))
(target (cdr (assq 'major-mode situation)))
(subject-buf (eval (cdr (assq 'summary-buffer-exp situation))))
(mother (current-buffer))
subject-id
(root-dir (expand-file-name
(concat "m-prts-" (user-login-name))
temporary-file-directory))
(request-partial-message-method
(cdr (assq 'request-partial-message-method situation)))
full-file)
(setq root-dir (concat root-dir "/" (replace-as-filename id)))
(setq full-file (concat root-dir "/FULL"))
(if (null target)
(error "%s is not supported. Sorry." target))
;; if you can't parse the subject line, try simple decoding method
(if (or (file-exists-p full-file)
(not (y-or-n-p "Merge partials?")))
(mime-store-message/partial-piece entity situation)
(setq subject-id (mime-entity-read-field entity 'Subject))
(if (string-match "[0-9\n]+" subject-id)
(setq subject-id (substring subject-id 0 (match-beginning 0))))
;; Do not use `with-current-buffer'. Inner save-excursion(),
;; the current buffer may be accessed.
(save-excursion
(set-buffer subject-buf)
(while (search-backward subject-id nil t))
(catch 'tag
(while t
(let* ((message
;; request message at the cursor in Subject buffer.
(save-window-excursion
(funcall request-partial-message-method)))
(situation (mime-entity-situation message))
(the-id (cdr (assoc "id" situation))))
(when (string= the-id id)
(with-current-buffer mother
(mime-store-message/partial-piece message situation))
(if (file-exists-p full-file)
(throw 'tag nil)))
(if (not (progn
(end-of-line)
(search-forward subject-id nil t)))
(error "not found")))))))))
;;; @ end
;;;
(provide 'mime-partial)
(run-hooks 'mime-partial-load-hook)
;;; mime-partial.el ends here
07070100000012000081A4000003E80000006400000001627140E5000039BF000000000000000000000000000000000000002A00000000semi-1.14.6+239+gb1c245b81715/mime-pgp.el;;; mime-pgp.el --- mime-view internal methods for EasyPG. -*- lexical-binding: t -*-
;; Copyright (C) 1995,1996,1997,1998,1999,2000 Free Software Foundation, Inc.
;; Author: MORIOKA Tomohiko <tomo@m17n.org>
;; Daiki Ueno <ueno@unixuser.org>
;; Kazuhiro Ito <kzhr@d1.dion.ne.jp>
;; Created: 1995/12/7
;; Renamed: 1997/2/27 from tm-pgp.el
;; Renamed: 2010/11/27 from mime-pgp.el in emiko-epg
;; Renamed: 2012/10/05 from mime-epg.el
;; Keywords: PGP, security, MIME, multimedia, mail, news
;; This file is part of SEMI (Secure Emacs MIME Interface).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Commentary:
;;; Code:
(require 'mime-parse)
(require 'mime-play)
(require 'epg)
(require 'epa)
(eval-when-compile (require 'mmgeneric))
;;; @ Internal functions
(eval-and-compile
(defun mime-pgp-concurrency-available-p ()
(and (fboundp 'make-mutex)
(fboundp 'with-mutex)
(fboundp 'make-thread)
(fboundp 'thread-signal)))
(defcustom mime-pgp-use-concurrency
(and (mime-pgp-concurrency-available-p)
;; The feature may make Emacs crash on Windows.
(null (memq system-type '(windows-nt)))
;; Emacs's concurrency feature seems to be unstable on earlier version.
(>= emacs-major-version 28))
"When non-nil, use concurrency feature for inline verifying if available."
:group 'mime-view
:type 'boolean)
(if (mime-pgp-concurrency-available-p)
(progn
(defalias 'mime-pgp-make-mutex 'make-mutex)
(defalias 'mime-pgp-with-mutex 'with-mutex))
(defalias 'mime-pgp-make-mutex 'ignore)
(defmacro mime-pgp-with-mutex (_mutex &rest body)
`(progn ,@body))
))
;; I'm not sure epg-* functions are thread safe.
(defvar mime-pgp-mutex (mime-pgp-make-mutex "MIME-PGP"))
(defun mime-pgp-maybe-remove-cr (string)
;; Remove CRs if header contains CR.
(if (string-match "\\`.*\r\n" string)
(let (inhibit-eol-conversion)
(decode-coding-string string 'raw-text-dos))
string))
(defun mime-pgp-decrypt-string (context cipher)
(mime-pgp-maybe-remove-cr
(mime-pgp-with-mutex mime-pgp-mutex
(epg-decrypt-string context cipher))))
(defun mime-pgp-verify-string (context cipher)
(mime-pgp-maybe-remove-cr
(mime-pgp-with-mutex mime-pgp-mutex
(epg-verify-string context cipher))))
(defun mime-pgp-verify-result-to-string (context)
(let ((result (epg-context-result-for context 'verify)))
(unless (stringp result)
(setq result (epg-verify-result-to-string result)))
(when (> (length result) 0)
(unless (string-equal (substring result -1) "\n")
(setq result (concat result "\n"))))
result))
(defun mime-pgp-pkcs7-decrypt-enveloped-data (context content)
(let (result)
(condition-case error
(setq result (decode-coding-string
(mime-pgp-decrypt-string context content)
'raw-text))
(error (setq result error)))
result))
(autoload 'mime-edit-make-boundary "mime-edit")
(defun mime-pgp-pkcs7-verify-signed-data (context content)
(let (result)
(if (condition-case error
(setq result (decode-coding-string
(mime-pgp-verify-string context content)
'raw-text))
(error (setq result error) nil))
(let ((boundary (concat "PKCS7--" (mime-edit-make-boundary))))
(concat "Content-Type: multipart/mixed;\n"
" boundary=\"" boundary "\"\n"
"Content-Transfer-Encoding: 7bit\n\n"
"--" boundary "\n"
result
"--" boundary "\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n\n"
(encode-coding-string
(mime-pgp-verify-result-to-string context) 'utf-8)
"--" boundary "--\n"))
result)))
(defun mime-pgp-smime-type-from-situation (situation)
(let ((type (cdr (assoc "smime-type" situation))))
(if type
(intern (downcase type))
'enveloped-data)))
(defun mime-pgp-entity-string (entity)
(with-temp-buffer
(buffer-disable-undo)
(set-buffer-multibyte nil)
(mime-insert-entity entity)
(buffer-string)))
;;; @ Internal method for multipart/signed
(defun mime-verify-multipart/signed (entity situation)
"Internal method to verify multipart/signed."
(mime-play-entity
(nth 1 (mime-entity-children entity)) ; entity-info of signature
(list (assq 'mode situation)) ; play-mode
))
;;; @ Internal method for multipart/encrypted
(defun mime-display-multipart/pgp-encrypted (entity situation)
(let ((original-major-mode-cell (assq 'major-mode situation))
(default-situation
(cdr (assq 'childrens-situation situation)))
child-situation)
(unless mime-pgp-decrypt-when-preview
(insert "This part is encrypted.\n"))
(when original-major-mode-cell
(setq default-situation
(cons original-major-mode-cell default-situation)))
(mapc
(lambda (child)
(setq child-situation
(mime-find-entity-preview-situation child default-situation))
(if (and (eq (cdr (assq 'type child-situation)) 'application)
(eq (cdr (assq 'subtype child-situation)) 'pgp-encrypted))
(mime-display-entity
child (put-alist 'body mime-pgp-decrypt-when-preview
(copy-alist child-situation)))
(when mime-view-multipart/related-show-all-children
(mime-display-entity
child (put-alist 'body 'invisible (copy-alist child-situation))))))
(mime-entity-children entity))))
;;; @ Internal method for application/*-signature
(defun mime-verify-application/*-signature-internal (entity _situation)
(let* ((mother (mime-entity-parent entity))
(orig-entity (car (mime-entity-children mother)))
(protocol (cdr (assoc "protocol" (mime-entity-parameters mother))))
context)
(if (null protocol)
"No protocol is specified."
(setq context
(epg-make-context
(cond
((equal protocol "application/pgp-signature")
'OpenPGP)
((string-match
"\\`application/\\(x-\\)?pkcs7-signature\\'" protocol)
'CMS))))
(if (null context)
(format "Unknown protocol: %s." protocol)
(let ((signature (mime-entity-content entity))
(text (let (inhibit-eol-conversion)
(encode-coding-string
(mime-pgp-entity-string orig-entity) 'raw-text-dos))))
(mime-pgp-with-mutex mime-pgp-mutex
(epg-verify-string context signature text)))
(epg-context-result-for context 'verify)))))
(defun mime-verify-application/*-signature (entity situation)
(let ((verify-result
(mime-verify-application/*-signature-internal entity situation))
window)
(cond
((stringp verify-result)
(mime-show-echo-buffer verify-result))
((> (length verify-result) 1)
(mime-show-echo-buffer (epg-verify-result-to-string verify-result)))
(verify-result
(epa-display-info (epg-verify-result-to-string verify-result))
(when (and epa-popup-info-window
(setq window (get-buffer-window epa-info-buffer)))
(select-window window))))))
(defun mime-preview-application/*-signature(entity situation)
(let ((string "Verifying...\n")
(unique (concat (number-to-string (point))
"-" (number-to-string (random)))))
(set-text-properties 0 (length string) `(mime-pgp-entity ,unique) string)
(insert string)
(let ((fn
`(lambda ()
(let ((verify-result
(condition-case error
(mime-verify-application/*-signature-internal
',entity ',situation)
(error (format "Verification failed, %s" error))
(quit (format "Verification quitted")))))
(unless (stringp verify-result)
(setq verify-result
(epg-verify-result-to-string verify-result)))
(when (> (length verify-result) 0)
(unless (string-equal (substring verify-result -1) "\n")
(setq verify-result (concat verify-result "\n")))
(let ((point (point-min))
props)
(while (and point
(setq point (next-single-property-change
point 'mime-pgp-entity)))
(setq props (text-properties-at point))
(when (eq (plist-get props 'mime-pgp-entity) ,unique)
(set-text-properties
0 (length verify-result) props verify-result)
(save-excursion
(goto-char point)
(let ((inhibit-read-only t))
(delete-region
point (or (next-single-property-change
point 'mime-pgp-entity)
(point-max)))
(insert verify-result)))
(setq point nil)))))))))
(if (and mime-pgp-use-concurrency
(mime-pgp-concurrency-available-p))
(make-thread fn)
(funcall fn)))))
;;; @ Internal method for application/pgp-encrypted
(defun mime-decrypt-application/pgp-encrypted (entity _situation)
(let* ((mother (mime-entity-parent entity))
(encrypted-entity (nth 1 (mime-entity-children mother)))
(p-win (or (get-buffer-window (current-buffer))
(get-largest-window)))
(new-name
(format "%s-%s" (buffer-name) (mime-entity-number entity)))
(mother (current-buffer))
(preview-buffer (concat "*Preview-" (buffer-name) "*"))
representation-type message-buf context plain)
(set-buffer (setq message-buf (get-buffer-create new-name)))
(erase-buffer)
(mime-insert-entity encrypted-entity)
(goto-char (point-min))
(setq context (epg-make-context)
plain (decode-coding-string
(mime-pgp-decrypt-string
context
(buffer-substring (point-min)(point-max)))
'raw-text))
(delete-region (point-min)(point-max))
(insert plain)
(setq representation-type 'binary
major-mode 'mime-show-message-mode)
(save-window-excursion
(mime-view-buffer nil preview-buffer mother
nil representation-type)
(make-local-variable 'mime-view-temp-message-buffer)
(setq mime-view-temp-message-buffer message-buf))
(set-window-buffer p-win preview-buffer)))
(defvar mime-pgp-decrypted-buffers nil)
(defun mime-pgp-kill-decrypted-buffers ()
(mapc (lambda (buffer)
(when (bufferp buffer)
(kill-buffer buffer)))
mime-pgp-decrypted-buffers))
(defun mime-pgp-register-decrypted-buffer (buffer)
(add-hook 'kill-buffer-hook 'mime-pgp-kill-decrypted-buffers nil t)
(make-local-variable 'mime-pgp-decrypted-buffers)
(add-to-list 'mime-pgp-decrypted-buffers buffer))
;; Imported and modified from Wanderlust.
(defun mime-preview-application/pgp-encrypted (entity _situation)
(let (p buffer decrypted-entity result)
(goto-char (setq p (point-max)))
(save-restriction
(narrow-to-region p p)
(setq buffer (generate-new-buffer (concat mime-temp-buffer-name "PGP*")))
(if (null (stringp
(setq result (mime-pgp-pkcs7-decrypt-enveloped-data
(epg-make-context)
(mime-pgp-entity-string
(nth 1 (mime-entity-children
(mime-entity-parent entity))))))))
(insert (format "%s" (cdr result)))
(with-current-buffer buffer
(require 'mmbuffer)
(insert result)
(setq decrypted-entity
(mime-parse-message
(mm-expand-class-name 'buffer)
nil entity (mime-entity-node-id entity))
buffer-read-only t))
(mime-pgp-register-decrypted-buffer buffer)
(mime-display-entity
decrypted-entity nil '((header . visible)
(body . visible)
(entity-button . invisible)))))))
;;; @ Internal method for application/pgp-keys
(defun mime-add-application/pgp-keys (entity _situation)
(when (y-or-n-p "Do you want to import PGP keys? ")
(let ((context (epg-make-context))
result window)
(epg-import-keys-from-string context (mime-entity-content entity))
(when (setq result (epg-context-result-for context 'import))
(epa-display-info (epg-import-result-to-string result))
(when (and epa-popup-info-window
(setq window (get-buffer-window epa-info-buffer)))
(select-window window))))))
;;; @ Internal method for application/pkcs7-mime
(defun mime-view-application/pkcs7-mime (entity situation)
(let ((smime-type (mime-pgp-smime-type-from-situation situation))
(p-win (or (get-buffer-window (current-buffer))
(get-largest-window)))
(new-name
(format "%s-%s" (buffer-name) (mime-entity-number entity)))
(mother (current-buffer))
(preview-buffer (concat "*Preview-" (buffer-name) "*"))
(context (epg-make-context 'CMS))
message-buf result fn)
(setq fn
(cdr
(assq smime-type
'((signed-data . mime-pgp-pkcs7-verify-signed-data)
(enveloped-data . mime-pgp-pkcs7-decrypt-enveloped-data)))))
(unless fn
(error "Unsupported smime-type (%s)" smime-type))
(if (null (stringp (setq result (funcall fn context
(mime-entity-content entity)))))
(signal (car result) (cdr result))
(set-buffer (setq message-buf (get-buffer-create new-name)))
(let ((inhibit-read-only t)
buffer-read-only)
(set-buffer-multibyte nil)
(erase-buffer)
(insert result)
(setq major-mode 'mime-show-message-mode)
(save-window-excursion
(mime-view-buffer nil preview-buffer mother nil 'binary)
(make-local-variable 'mime-view-temp-message-buffer)
(setq mime-view-temp-message-buffer message-buf))
(set-window-buffer p-win preview-buffer)))))
(defun mime-preview-application/pkcs7-mime (entity situation)
(let ((smime-type (mime-pgp-smime-type-from-situation situation))
(context (epg-make-context 'CMS))
p buffer decrypted-entity result fn)
(setq fn
(cdr
(assq smime-type
'((signed-data . mime-pgp-pkcs7-verify-signed-data)
(enveloped-data . mime-pgp-pkcs7-decrypt-enveloped-data)))))
(if (null fn)
(insert "Unsupported smime-type (" smime-type ")\n")
(goto-char (setq p (point-max)))
(save-restriction
(narrow-to-region p p)
(if (null (stringp (setq result
(funcall fn context
(mime-entity-content entity)))))
(insert (format "%s" (cdr result)))
(setq buffer (generate-new-buffer
(concat mime-temp-buffer-name "PKCS7*")))
(with-current-buffer buffer
(require 'mmbuffer)
(set-buffer-multibyte nil)
(insert result)
(setq decrypted-entity
(mime-parse-message
(mm-expand-class-name 'buffer)
nil entity (mime-entity-node-id-internal entity))
buffer-read-only t))
(mime-pgp-register-decrypted-buffer buffer)
(mime-display-entity
decrypted-entity nil '((header . invisible)
(body . visible)
(entity-button . invisible))))))))
;;; @ end
;;;
(provide 'mime-pgp)
(run-hooks 'mime-pgp-load-hook)
;;; mime-pgp.el ends here
07070100000013000081A4000003E80000006400000001627140E50000432F000000000000000000000000000000000000002B00000000semi-1.14.6+239+gb1c245b81715/mime-play.el;;; mime-play.el --- Playback processing module for mime-view.el -*- lexical-binding: t -*-
;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003,
;; 2004, 2010 Free Software Foundation, Inc.
;; Author: MORIOKA Tomohiko <tomo@m17n.org>
;; Created: 1995/9/26 (separated from tm-view.el)
;; Renamed: 1997/2/21 from tm-play.el
;; Keywords: MIME, multimedia, mail, news
;; This file is part of SEMI (Secretariat of Emacs MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Code:
(require 'mime-view)
(require 'alist)
(require 'filename)
(defvar bbdb-buffer-name)
(defcustom mime-save-directory "~/"
"*Name of the directory where MIME entity will be saved in.
If t, it means current directory."
:group 'mime-view
:type '(choice (const :tag "Current directory" t)
(directory)))
(defcustom mime-play-delete-file-immediately t
"If non-nil, delete played file immediately."
:group 'mime-view
:type 'boolean)
(defvar mime-play-find-every-situations t
"*Find every available situations if non-nil.")
(defvar mime-play-messages-coding-system nil
"Coding system to be used for external MIME playback method.")
;;; @ content decoder
;;;
;;;###autoload
(defun mime-preview-play-current-entity (&optional ignore-examples mode)
"Play current entity.
It decodes current entity to call internal or external method. The
method is selected from variable `mime-acting-condition'.
If IGNORE-EXAMPLES (C-u prefix) is specified, this function ignores
`mime-acting-situation-example-list'.
If MODE is specified, play as it. Default MODE is \"play\"."
(interactive "P")
(let ((entity (get-text-property (point) 'mime-view-entity)))
(if entity
(let ((situation
(get-text-property (point) 'mime-view-situation)))
(or mode
(setq mode "play"))
(setq situation
(if (assq 'mode situation)
(put-alist 'mode mode (copy-alist situation))
(cons (cons 'mode mode)
situation)))
(if ignore-examples
(setq situation
(cons (cons 'ignore-examples ignore-examples)
situation)))
(mime-play-entity entity situation)))))
;;;###autoload
(defun mime-play-entity (entity &optional situation ignored-method)
"Play entity specified by ENTITY.
It decodes the entity to call internal or external method. The method
is selected from variable `mime-acting-condition'. If MODE is
specified, play as it. Default MODE is \"play\"."
(let ((ret
(mime-unify-situations (mime-entity-situation entity situation)
mime-acting-condition
mime-acting-situation-example-list
'method ignored-method
mime-play-find-every-situations))
method)
(setq mime-acting-situation-example-list (cdr ret)
ret (car ret))
(cond ((cdr ret)
(setq ret (mime-select-menu-alist
"Methods"
(mapcar (lambda (situation)
(cons
(format "%s"
(cdr (assq 'method situation)))
situation))
ret)))
(setq ret (mime-sort-situation ret))
(add-to-list 'mime-acting-situation-example-list (cons ret 0)))
(t
(setq ret (car ret))))
(setq method (cdr (assq 'method ret)))
(cond ((and (symbolp method)
(fboundp method))
(funcall method entity ret))
((stringp method)
(mime-activate-mailcap-method entity ret))
;; ((and (listp method)(stringp (car method)))
;; (mime-activate-external-method entity ret)
;; )
(t
(mime-show-echo-buffer "No method are specified for %s\n"
(mime-type/subtype-string
(cdr (assq 'type situation))
(cdr (assq 'subtype situation))))
(if (y-or-n-p "Do you want to save current entity to disk?")
(mime-save-content entity situation))))))
;;; @ external decoder
;;;
(defvar mime-mailcap-method-filename-alist nil)
(defun mime-activate-mailcap-method (entity situation)
(let ((method (cdr (assoc 'method situation)))
(name (mime-entity-safe-filename entity)))
(setq name (expand-file-name (if (and name (not (string= name "")))
name
(make-temp-name "EMI"))
(make-temp-file "EMI" 'directory)))
(mime-write-entity-content entity name)
(message "External method is starting...")
(let ((process
(let ((command
(mime-format-mailcap-command
method
(cons (cons 'filename name) situation)))
(coding-system-for-read mime-play-messages-coding-system)
process-connection-type)
(start-process command mime-echo-buffer-name
shell-file-name shell-command-switch command))))
(set-alist 'mime-mailcap-method-filename-alist process name)
(set-process-sentinel process 'mime-mailcap-method-sentinel))))
(defun mime-mailcap-method-sentinel (process event)
(when mime-play-delete-file-immediately
(let ((file (cdr (assq process mime-mailcap-method-filename-alist))))
(when (file-exists-p file)
(ignore-errors
(delete-file file)
(delete-directory (file-name-directory file)))))
(remove-alist 'mime-mailcap-method-filename-alist process))
(message "%s %s" process event))
(defun mime-mailcap-delete-played-files ()
(dolist (elem mime-mailcap-method-filename-alist)
(when (file-exists-p (cdr elem))
(ignore-errors
(delete-file (cdr elem))
(delete-directory (file-name-directory (cdr elem)))))))
(add-hook 'kill-emacs-hook 'mime-mailcap-delete-played-files)
(defvar mime-echo-window-is-shared-with-bbdb
(module-installed-p 'bbdb)
"*If non-nil, mime-echo window is shared with BBDB window.")
(defvar mime-echo-window-height
(lambda () (/ (window-height) 5))
"*Size of mime-echo window.
It allows function or integer. If it is function,
`mime-show-echo-buffer' calls it to get height of mime-echo window.
Otherwise `mime-show-echo-buffer' uses it as height of mime-echo
window.")
(defun mime-show-echo-buffer (&rest forms)
"Show mime-echo buffer to display MIME-playing information."
(get-buffer-create mime-echo-buffer-name)
(let ((the-win (selected-window))
(win (get-buffer-window mime-echo-buffer-name)))
(unless win
(unless (and mime-echo-window-is-shared-with-bbdb
(condition-case nil
(setq win (get-buffer-window bbdb-buffer-name))
(error nil)))
(select-window (get-buffer-window (or mime-preview-buffer
(current-buffer))))
(setq win (split-window-vertically
(- (window-height)
(if (functionp mime-echo-window-height)
(funcall mime-echo-window-height)
mime-echo-window-height)))))
(set-window-buffer win mime-echo-buffer-name))
(select-window win)
(goto-char (point-max))
(if forms
(let ((buffer-read-only nil))
(insert (apply (function format) forms))))
(select-window the-win)))
;;; @ file name
;;;
(defvar mime-view-file-name-char-regexp "[A-Za-z0-9+_-]")
(defvar mime-view-file-name-regexp-1
(concat mime-view-file-name-char-regexp "+\\."
mime-view-file-name-char-regexp "+"))
(defvar mime-view-file-name-regexp-2
(concat (regexp-* mime-view-file-name-char-regexp)
"\\(\\." mime-view-file-name-char-regexp "+\\)*"))
(defun mime-entity-safe-filename (entity)
(let ((filename
(or (mime-entity-filename entity)
(let ((subj
(or (mime-entity-read-field entity 'Content-Description)
(mime-entity-read-field entity 'Subject))))
(if (and subj
(or (string-match mime-view-file-name-regexp-1 subj)
(string-match mime-view-file-name-regexp-2 subj)))
(substring subj (match-beginning 0)(match-end 0)))))))
(if filename
(replace-as-filename filename))))
;;; @ file extraction
;;;
(defun mime-save-content (entity _situation)
(let ((name (or (mime-entity-safe-filename entity)
(format "%s" (mime-entity-media-type entity))))
(dir (if (eq t mime-save-directory)
default-directory
mime-save-directory))
filename)
(setq filename (read-file-name
(concat "File name: (default "
(file-name-nondirectory name) ") ")
dir
(concat (file-name-as-directory dir)
(file-name-nondirectory name))))
(if (file-directory-p filename)
(setq filename (concat (file-name-as-directory filename)
(file-name-nondirectory name))))
(if (file-exists-p filename)
(or (yes-or-no-p (format "File %s exists. Save anyway? " filename))
(error "")))
(mime-write-entity-content entity (expand-file-name filename))
filename))
;;; @ file detection
;;;
(defvar mime-magic-type-alist
'(("^\377\330\377[\340\356]..JFIF" image jpeg)
("^\211PNG" image png)
("^GIF8[79]" image gif)
("^II\\*\000" image tiff)
("^MM\000\\*" image tiff)
("^MThd" audio midi)
("^\000\000\001\263" video mpeg))
"*Alist of regexp about magic-number vs. corresponding media-types.
Each element looks like (REGEXP TYPE SUBTYPE).
REGEXP is a regular expression to match against the beginning of the
content of entity.
TYPE is symbol to indicate primary type of media-type.
SUBTYPE is symbol to indicate subtype of media-type.")
(defun mime-detect-content (entity situation)
(let (type subtype)
(let ((mdata (mime-entity-content entity))
(rest mime-magic-type-alist))
(while (not (let ((cell (car rest)))
(if cell
(if (string-match (car cell) mdata)
(setq type (nth 1 cell)
subtype (nth 2 cell)))
t)))
(setq rest (cdr rest))))
(setq situation (del-alist 'method (copy-alist situation)))
(mime-play-entity entity
(if type
(put-alist 'type type
(put-alist 'subtype subtype
situation))
situation)
'mime-detect-content)))
;;; @ mail/news message
;;;
(defvar mime-view-temp-message-buffer nil) ; buffer local variable
(defun mime-preview-quitting-method-for-mime-show-message-mode ()
"Quitting method for mime-view.
It is registered to variable `mime-preview-quitting-method-alist'."
(let ((mother mime-mother-buffer)
(win-conf mime-preview-original-window-configuration))
(if (buffer-live-p mime-view-temp-message-buffer)
(kill-buffer mime-view-temp-message-buffer))
(mime-preview-kill-buffer)
(set-window-configuration win-conf)
(pop-to-buffer mother)))
(defun mime-view-message/rfc822 (entity _situation)
(let* ((new-name
(format "%s-%s" (buffer-name) (mime-entity-number entity)))
(mother (current-buffer))
(children (car (mime-entity-children entity)))
(preview-buffer
(mime-display-message
children new-name mother nil
(cdr (assq 'major-mode
(get-text-property (point) 'mime-view-situation))))))
(or (get-buffer-window preview-buffer)
(let ((m-win (get-buffer-window mother)))
(if m-win
(set-window-buffer m-win preview-buffer)
(switch-to-buffer preview-buffer))))))
;;; @ message/partial
;;;
(defun mime-require-safe-directory (dir)
"Create a directory DIR safely.
The permission of the created directory becomes `700' (for the owner only).
If the directory already exists and is writable by other users, an error
occurs."
(let ((attr (file-attributes dir))
(orig-modes (default-file-modes)))
(if (and attr (eq (car attr) t)) ; directory already exists.
(unless (or (memq system-type '(windows-nt ms-dos OS/2 emx))
(and (eq (nth 2 attr) (user-real-uid))
(eq (file-modes dir) 448)))
(error "Invalid owner or permission for %s" dir))
(unwind-protect
(progn
(set-default-file-modes 448)
(make-directory dir))
(set-default-file-modes orig-modes)))))
(defun mime-store-message/partial-piece (entity cal)
(let ((root-dir
(expand-file-name
(concat "m-prts-" (user-login-name)) temporary-file-directory))
(id (cdr (assoc "id" cal)))
(number (cdr (assoc "number" cal)))
(total (cdr (assoc "total" cal)))
file
(mother (current-buffer))
(orig-modes (default-file-modes)))
(mime-require-safe-directory root-dir)
(or (file-exists-p root-dir)
(unwind-protect
(progn
(set-default-file-modes 448)
(make-directory root-dir))
(set-default-file-modes orig-modes)))
(setq id (replace-as-filename id))
(setq root-dir (concat root-dir "/" id))
(or (file-exists-p root-dir)
(unwind-protect
(progn
(set-default-file-modes 448)
(make-directory root-dir))
(set-default-file-modes orig-modes)))
(setq file (concat root-dir "/FULL"))
(if (file-exists-p file)
(let ((full-buf (get-buffer-create "FULL"))
(pwin (or (get-buffer-window mother)
(get-largest-window)))
pbuf)
(save-window-excursion
(set-buffer full-buf)
(erase-buffer)
(binary-insert-encoded-file file)
(setq major-mode 'mime-show-message-mode)
(mime-view-buffer (current-buffer) nil mother)
(setq pbuf (current-buffer))
(make-local-variable 'mime-view-temp-message-buffer)
(setq mime-view-temp-message-buffer full-buf))
(set-window-buffer pwin pbuf)
(select-window pwin))
(setq file (concat root-dir "/" number))
(mime-write-entity-body entity file)
(let ((total-file (concat root-dir "/CT")))
(setq total
(if total
(progn
(or (file-exists-p total-file)
(with-current-buffer
(get-buffer-create mime-temp-buffer-name)
(erase-buffer)
(insert total)
(write-region (point-min)(point-max) total-file)
(kill-buffer (current-buffer))))
(string-to-number total))
(and (file-exists-p total-file)
(with-current-buffer (find-file-noselect total-file)
(prog1
(and (re-search-forward "[0-9]+" nil t)
(string-to-number
(buffer-substring (match-beginning 0)
(match-end 0))))
(kill-buffer (current-buffer))))))))
(if (and total (> total 0)
(>= (length (directory-files root-dir nil "^[0-9]+$" t))
total))
(catch 'tag
(with-current-buffer (get-buffer-create mime-temp-buffer-name)
(erase-buffer)
(let ((i 1))
(while (<= i total)
(setq file (concat root-dir "/" (int-to-string i)))
(or (file-exists-p file)
(throw 'tag nil))
(binary-insert-encoded-file file)
(goto-char (point-max))
(setq i (1+ i))))
(binary-write-decoded-region
(point-min)(point-max)
(expand-file-name "FULL" root-dir))
(let ((i 1))
(while (<= i total)
(let ((file (format "%s/%d" root-dir i)))
(and (file-exists-p file)
(delete-file file)))
(setq i (1+ i))))
(let ((file (expand-file-name "CT" root-dir)))
(and (file-exists-p file)
(delete-file file)))
(let ((buf (current-buffer))
(pwin (or (get-buffer-window mother)
(get-largest-window)))
(pbuf (mime-display-message
(mime-open-entity 'buffer (current-buffer))
nil mother nil 'mime-show-message-mode)))
(with-current-buffer pbuf
(make-local-variable 'mime-view-temp-message-buffer)
(setq mime-view-temp-message-buffer buf))
(set-window-buffer pwin pbuf)
(select-window pwin))))))))
;;; @ message/external-body
;;;
(defvar mime-raw-dired-function
(if window-system
(function dired-other-frame)
(function mime-raw-dired-function-for-one-frame)))
(defun mime-raw-dired-function-for-one-frame (dir)
(let ((win (or (get-buffer-window mime-preview-buffer)
(get-largest-window))))
(select-window win)
(dired dir)))
(defun mime-view-message/external-anon-ftp (_entity cal)
(let* ((site (cdr (assoc "site" cal)))
(directory (cdr (assoc "directory" cal)))
(name (cdr (assoc "name" cal)))
(pathname (concat "/anonymous@" site ":" directory)))
(message "%s" (concat "Accessing " (expand-file-name name pathname) "..."))
(funcall mime-raw-dired-function pathname)
(goto-char (point-min))
(search-forward name)))
(defvar mime-raw-browse-url-function mime-browse-url-function)
(defun mime-view-message/external-url (_entity cal)
(let ((url (cdr (assoc "url" cal))))
(message "%s" (concat "Accessing " url "..."))
(funcall mime-raw-browse-url-function url)))
;;; @ rot13-47
;;;
(defun mime-view-caesar (entity _situation)
"Internal method for mime-view to display ROT13-47-48 message."
(let ((buf (get-buffer-create
(format "%s-%s" (buffer-name) (mime-entity-number entity)))))
(with-current-buffer buf
(setq buffer-read-only nil)
(erase-buffer)
(mime-insert-text-content entity)
(mule-caesar-region (point-min) (point-max))
(set-buffer-modified-p nil))
(let ((win (get-buffer-window (current-buffer))))
(or (eq (selected-window) win)
(select-window (or win (get-largest-window)))))
(view-buffer buf)
(goto-char (point-min))))
;;; @ end
;;;
(provide 'mime-play)
;;; mime-play.el ends here
07070100000014000081A4000003E80000006400000001627140E50000056F000000000000000000000000000000000000002C00000000semi-1.14.6+239+gb1c245b81715/mime-setup.el;;; mime-setup.el --- setup file for MIME viewer and composer. -*- lexical-binding: t -*-
;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc.
;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Keywords: MIME, multimedia, multilingual, mail, news
;; This file is part of SEMI (Setting for Emacs MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Code:
(load "mail-mime-setup")
(condition-case nil
(load "gnus-mime-setup")
(error (message "gnus-mime-setup is not found.")))
(condition-case nil
(load "emh-setup")
(error (message "emh-setup is not found.")))
;;; @ end
;;;
(provide 'mime-setup)
(run-hooks 'mime-setup-load-hook)
;;; mime-setup.el ends here
07070100000015000081A4000003E80000006400000001627140E5000009EA000000000000000000000000000000000000002A00000000semi-1.14.6+239+gb1c245b81715/mime-shr.el;;; mime-shr.el --- mime-view content filter using shr for html -*- lexical-binding: t -*-
;; Copyright (C) 2012 Kazuhiro Ito
;; Author: Kazuhiro Ito <kzhr@d1.dion.ne.jp>
;; Keywords: HTML, MIME, multimedia, mail, news
;; This file is part of SEMI (Suite of Emacs MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Code:
(eval-and-compile
(require 'shr nil t))
(require 'mime)
(defcustom mime-shr-blocked-images "."
"Images of which URLs match this regexp are blocked.
When nil, it means the value of shr-blocked-images is used."
:group 'mime-view
:type '(choice regexp (const nil)))
(defvar mime-shr-root-entity nil)
(make-variable-buffer-local 'mime-shr-root-entity)
(defun mime-shr-preview-text/html (entity _situation)
(let ((dom (with-temp-buffer
(mime-insert-text-content entity)
(libxml-parse-html-region (point-min) (point-max))))
(shr-content-function 'mime-shr-cid-retrieve)
(shr-blocked-images (or mime-shr-blocked-images
shr-blocked-images)))
(setq mime-shr-root-entity (mime-find-root-entity entity))
(save-restriction
;; shr-insert-document may insert document before current point.
;; Cf. https://github.com/wanderlust/semi/issues/11
(narrow-to-region (point-max) (point-max))
(shr-insert-document dom)))
;; Workaround to delete garbage overlay.
(let ((overlays (overlays-in (point-min) (point-max))))
(while overlays
(when (eq (overlay-start (car overlays))
(overlay-end (car overlays)))
(delete-overlay (car overlays)))
(setq overlays (cdr overlays)))))
(defun mime-shr-cid-retrieve (url)
(let ((entity (mime-find-entity-from-content-id
(mime-uri-parse-cid (concat "cid:" url))
mime-shr-root-entity)))
(when entity
(mime-entity-content entity))))
;;; @ end
;;;
(provide 'mime-shr)
;;; mime-shr.el ends here
07070100000016000081A4000003E80000006400000001627140E500001BE8000000000000000000000000000000000000003000000000semi-1.14.6+239+gb1c245b81715/mime-signature.el;;; mime-signature.el --- signature handling module for mime-edit -*- lexical-binding: t -*-
;; Copyright (C) 2013 Kazuhiro Ito
;; Author: Kazuhiro Ito <kzhr@d1.dion.ne.jp>
;; Keywords: MIME, mail, news
;; This file is part of SEMI (Showy Emacs MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU XEmacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Code:
(require 'mime-edit)
(defcustom mime-edit-signature-separator "\n-- \n"
"Separator between a message text and a signature. It should
start and must end with LF."
:group 'mime-edit
:type 'string)
(defcustom mime-edit-default-signature
(or (and (boundp 'signature-file-name)
signature-file-name)
(and (boundp 'mail-signature)
(cond ((stringp mail-signature)
(list (if (string-match
(concat
"^\n*"
(regexp-quote
(if (eq ?\n (string-to-char
mime-edit-signature-separator))
(substring mime-edit-signature-separator 1)
mime-edit-signature-separator)))
mail-signature)
(substring mail-signature (match-end 0))
mail-signature)))
((eq mail-signature t)
(and (boundp 'mail-signaute-file)
mail-signaute-file))
(t (list mail-signature))))
"~/.signature")
"Specify default signature.
It is string or list consists of strings and functions.
When it is string, indicate signature file name.
When it is list, each string and function's result are
inserted. Function is called with no argument and returns string
to be inserted."
:group 'mime-edit
:type '(choice (file :tag "Signature file name")
(repeat (choice
(string :tag "Inserting string")
(function :tag "Calling function")))))
(defcustom mime-edit-signature-position 'part
"Position for signature."
:group 'mime-edit
:type '(choice (const :tag "Anywhere" nil)
(const :tag "At the end of a part" part)
(const :tag "At the end of a message" message)))
(defcustom mime-edit-signature-file-prefix nil
"String containing optional prefix for the signature file names"
:group 'mime-edit
:type '(choice (const :tag "Undefine" nil) (string :tag "Define")))
(defcustom mime-edit-signature-alist nil
"Alist of the form to define inserted signature:
(((FIELDS . PATTERN) . SIGNATURE)
...)
FILEDS is a string or list of strings for searched field names.
PATTERN is a string or list of string or function. If any
PATTERN's string matchs with any content of FIELDS, SIGNATURE is
inserted. When PATTERN is function, it is called with two
arguments, field's content and corresponding SIGNATURE.
SIGNATURE is string or list of strings and functions.
When SIGNATURE is string, it indicate signature file suffix.
Actual file name is generated by concatenating with
`mime-edit-signature-file-prefix'.
When SIGNATURE is list, each string and function's result is
inserted. Function is called no argument and returns string to
be inserted."
:group 'mime-edit
:type '(choice
(const :tag "Not define" nil)
(repeat :tag "Define"
(cons
(cons (string :tag "Field name")
(choice (function :tag "File name suffix returning function")
(regexp :tag "Single regexp")
(repeat :tag "Multiple regexp" regexp)))
(choice (string :tag "Signature file name suffix")
(repeat (choice
(string :tag "Inserting string")
(function :tag "Calling function"))))))))
(defun mime-edit-signature-guess ()
;; Guess signature from current buffer and `mime-edit-signature-alist'.
;; return signature to be inserted.
(save-excursion
(save-restriction
(std11-narrow-to-header)
(let ((alist mime-edit-signature-alist)
cell fields value field signature tmp)
(setq signature
(catch 'found
(while alist
(setq cell (car alist)
fields (caar cell)
value (cdar cell))
(when (stringp fields) (setq fields (list fields)))
(while fields
(setq field (std11-fetch-field (car fields)))
(cond
((functionp value)
(when (setq tmp (apply value field (cdr cell)))
(throw 'found tmp)))
((stringp field)
(when (stringp value) (setq value (list value)))
(setq tmp value)
(while tmp
(when (string-match (car tmp) field)
(throw 'found (cdr cell)))
(setq tmp (cdr tmp)))))
(setq fields (cdr fields)))
(setq alist (cdr alist)))))
(or (and (stringp signature)
(concat mime-edit-signature-file-prefix signature))
signature
mime-edit-default-signature)))))
(defun mime-edit-signature-insert-plain (signature)
(if (stringp signature)
(insert-file-contents signature)
(while signature
(cond
((stringp (car signature))
(insert (car signature)))
((functionp (car signature))
(insert (funcall (car signature)))))
(setq signature (cdr signature))))
(unless (eq (preceding-char) ?\n)
(insert ?\n)))
(defun mime-edit-insert-signature ()
"Insert a signature."
(interactive)
(let ((point (point))
(signature (mime-edit-signature-guess))
start end text-part-p plain-signature-p)
(setq plain-signature-p
(or (null (stringp signature))
(let ((file-type (mime-find-file-type signature)))
(and (equal "text" (car file-type))
(equal "plain" (cadr file-type))))))
(when (eq mime-edit-signature-position 'message)
(goto-char (point-max)))
(re-search-backward mime-edit-tag-regexp nil 'move)
(setq start (point)
end (if (re-search-forward mime-edit-tag-regexp nil t)
(match-beginning 0)
(point-max)))
(when (> point end)
(setq start end
end (if (re-search-forward mime-edit-tag-regexp nil t)
(match-beginning 0)
(point-max))))
(goto-char start)
(setq text-part-p
(or (null (looking-at mime-edit-single-part-tag-regexp))
(string-match "^text/plain" (match-string 1))))
(goto-char (cond ((eq mime-edit-signature-position 'message)
(point-max))
((eq mime-edit-signature-position 'part)
end)
(t
point)))
(unless (and text-part-p plain-signature-p)
(unless (eq (preceding-char) ?\n) (insert ?\n))
(mime-edit-insert-tag "text" "plain"))
(if plain-signature-p
(progn
(unless (eq (preceding-char) ?\n) (insert ?\n))
(when (or mime-edit-signature-position
(eq end point))
(insert mime-edit-signature-separator))
(mime-edit-signature-insert-plain signature))
(mime-edit-insert-file signature))))
;;; @ end
;;;
(provide 'mime-signature)
;;; mime-signature.el ends here
07070100000017000081A4000003E80000006400000001627140E500008278000000000000000000000000000000000000002B00000000semi-1.14.6+239+gb1c245b81715/mime-tnef.el;;; mime-tnef.el --- mime-view content filter for ms-tnef -*- lexical-binding: t -*-
;; Copyright (C) 2015 Kazuhiro Ito
;; Author: Kazuhiro Ito <kzhr@d1.dion.ne.jp>
;; Keywords: MIME, multimedia, mail, news
;; This file is part of SEMI (Suite of Emacs MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Commentary:
;; mime-tnef.el can handle an application/ms-tnef attachment, usually
;; named winmail.dat. At present, mime-tnef.el provides access to
;; only attached files, not text. Most of algorithms, constants are
;; derived from TNEF, C program available at
;; https://github.com/verdammelt/tnef .
;;; Code:
(require 'mime)
(require 'mime-edit)
;;; Customizable variables
(defcustom mime-tnef-unicode-coding-system
(catch :found
(dolist (coding '(utf-16le utf-16-le-no-signature) nil)
(when (coding-system-p coding)
(throw :found coding))))
"Coding system for Windows uniode string."
:group 'mime-view
:type 'coding-system)
;;; Internal constants
(defconst mime-tnef-lvl-types-table
'((1 . message)
(2 . attachment)))
(defconst mime-tnef-names-table
'((0 . OWNER) ;; #x0000
(1 . SENTFOR) ;; #x0001
(2 . DELEGATE) ;; #x0002
(6 . DATESTART) ;; #x0006
(7 . DATEEND) ;; #x0007
(8 . AIDOWNER) ;; #x0008
(9 . REQUESTRES) ;; #x0009
(32768 . FROM) ;; #x8000
(32772 . SUBJECT) ;; #x8004
(32773 . DATESENT) ;; #x8005
(32774 . DATERECD) ;; #x8006
(32775 . MESSAGESTATUS) ;; #x8007
(32776 . MESSAGECLASS) ;; #x8008
(32777 . MESSAGEID) ;; #x8009
(32778 . PARENTID) ;; #x800a
(32779 . CONVERSATIONID) ;; #x800b
(32780 . BODY) ;; #x800c
(32781 . PRIORITY) ;; #x800d
(32783 . ATTACHDATA) ;; #x800f
(32784 . ATTACHTITLE) ;; #x8010
(32785 . ATTACHMETAFILE) ;; #x8011
(32786 . ATTACHCREATEDATE) ;; #x8012
(32787 . ATTACHMODIFYDATE) ;; #x8013
(32800 . DATEMODIFY) ;; #x8020
(36865 . ATTACHTRANSPORTFILENAME) ;; #x9001
(36866 . ATTACHRENDDATA) ;; #x9002
(36867 . MAPIPROPS) ;; #x9003
(36868 . RECIPTABLE) ;; #x9004
(36869 . ATTACHMENT) ;; #x9005
(36870 . TNEFVERSION) ;; #x9006
(36871 . OEMCODEPAGE) ;; #x9007
(36872 . ORIGNINALMESSAGECLASS) ;; #x9008
))
(defconst mime-tnef-types-table
'((0 . TRIPLES) ;; #x0000
(1 . STRING) ;; #x0001
(2 . TEXT) ;; #x0002
(3 . DATE) ;; #x0003
(4 . SHORT) ;; #x0004
(5 . LONG) ;; #x0005
(6 . BYTE) ;; #x0006
(7 . WORD) ;; #x0007
(8 . DWORD) ;; #x0008
(9 . MAX) ;; #x0009
))
(defconst mime-tnef-mapi-names-table
'((1 . ACKNOWLEDGEMENT_MODE) ;; #x0001
(2 . ALTERNATE_RECIPIENT_ALLOWED) ;; #x0002
(3 . AUTHORIZING_USERS) ;; #x0003
(4 . AUTO_FORWARD_COMMENT) ;; #x0004
(5 . AUTO_FORWARDED) ;; #x0005
(6 . CONTENT_CONFIDENTIALITY_ALGORITHM_ID) ;; #x0006
(7 . CONTENT_CORRELATOR) ;; #x0007
(8 . CONTENT_IDENTIFIER) ;; #x0008
(9 . CONTENT_LENGTH) ;; #x0009
(10 . CONTENT_RETURN_REQUESTED) ;; #x000A
(11 . CONVERSATION_KEY) ;; #x000B
(12 . CONVERSION_EITS) ;; #x000C
(13 . CONVERSION_WITH_LOSS_PROHIBITED) ;; #x000D
(14 . CONVERTED_EITS) ;; #x000E
(15 . DEFERRED_DELIVERY_TIME) ;; #x000F
(16 . DELIVER_TIME) ;; #x0010
(17 . DISCARD_REASON) ;; #x0011
(18 . DISCLOSURE_OF_RECIPIENTS) ;; #x0012
(19 . DL_EXPANSION_HISTORY) ;; #x0013
(20 . DL_EXPANSION_PROHIBITED) ;; #x0014
(21 . EXPIRY_TIME) ;; #x0015
(22 . IMPLICIT_CONVERSION_PROHIBITED) ;; #x0016
(23 . IMPORTANCE) ;; #x0017
(24 . IPM_ID) ;; #x0018
(25 . LATEST_DELIVERY_TIME) ;; #x0019
(26 . MESSAGE_CLASS) ;; #x001A
(27 . MESSAGE_DELIVERY_ID) ;; #x001B
(30 . MESSAGE_SECURITY_LABEL) ;; #x001E
(31 . OBSOLETED_IPMS) ;; #x001F
(32 . ORIGINALLY_INTENDED_RECIPIENT_NAME) ;; #x0020
(33 . ORIGINAL_EITS) ;; #x0021
(34 . ORIGINATOR_CERTIFICATE) ;; #x0022
(35 . ORIGINATOR_DELIVERY_REPORT_REQUESTED) ;; #x0023
(36 . ORIGINATOR_RETURN_ADDRESS) ;; #x0024
(37 . PARENT_KEY) ;; #x0025
(38 . PRIORITY) ;; #x0026
(39 . ORIGIN_CHECK) ;; #x0027
(40 . PROOF_OF_SUBMISSION_REQUESTED) ;; #x0028
(41 . READ_RECEIPT_REQUESTED) ;; #x0029
(42 . RECEIPT_TIME) ;; #x002A
(43 . RECIPIENT_REASSIGNMENT_PROHIBITED) ;; #x002B
(44 . REDIRECTION_HISTORY) ;; #x002C
(45 . RELATED_IPMS) ;; #x002D
(46 . ORIGINAL_SENSITIVITY) ;; #x002E
(47 . LANGUAGES) ;; #x002F
(48 . REPLY_TIME) ;; #x0030
(49 . REPORT_TAG) ;; #x0031
(50 . REPORT_TIME) ;; #x0032
(51 . RETURNED_IPM) ;; #x0033
(52 . SECURITY) ;; #x0034
(53 . INCOMPLETE_COPY) ;; #x0035
(54 . SENSITIVITY) ;; #x0036
(55 . SUBJECT) ;; #x0037
(56 . SUBJECT_IPM) ;; #x0038
(57 . CLIENT_SUBMIT_TIME) ;; #x0039
(58 . REPORT_NAME) ;; #x003A
(59 . SENT_REPRESENTING_SEARCH_KEY) ;; #x003B
(60 . X400_CONTENT_TYPE) ;; #x003C
(61 . SUBJECT_PREFIX) ;; #x003D
(62 . NON_RECEIPT_REASON) ;; #x003E
(63 . RECEIVED_BY_ENTRYID) ;; #x003F
(64 . RECEIVED_BY_NAME) ;; #x0040
(65 . SENT_REPRESENTING_ENTRYID) ;; #x0041
(66 . SENT_REPRESENTING_NAME) ;; #x0042
(67 . RCVD_REPRESENTING_ENTRYID) ;; #x0043
(68 . RCVD_REPRESENTING_NAME) ;; #x0044
(69 . REPORT_ENTRYID) ;; #x0045
(70 . READ_RECEIPT_ENTRYID) ;; #x0046
(71 . MESSAGE_SUBMISSION_ID) ;; #x0047
(72 . PROVIDER_SUBMIT_TIME) ;; #x0048
(73 . ORIGINAL_SUBJECT) ;; #x0049
(74 . DISC_VAL) ;; #x004A
(75 . ORIG_MESSAGE_CLASS) ;; #x004B
(76 . ORIGINAL_AUTHOR_ENTRYID) ;; #x004C
(77 . ORIGINAL_AUTHOR_NAME) ;; #x004D
(78 . ORIGINAL_SUBMIT_TIME) ;; #x004E
(79 . REPLY_RECIPIENT_ENTRIES) ;; #x004F
(80 . REPLY_RECIPIENT_NAMES) ;; #x0050
(81 . RECEIVED_BY_SEARCH_KEY) ;; #x0051
(82 . RCVD_REPRESENTING_SEARCH_KEY) ;; #x0052
(83 . READ_RECEIPT_SEARCH_KEY) ;; #x0053
(84 . REPORT_SEARCH_KEY) ;; #x0054
(85 . ORIGINAL_DELIVERY_TIME) ;; #x0055
(86 . ORIGINAL_AUTHOR_SEARCH_KEY) ;; #x0056
(87 . MESSAGE_TO_ME) ;; #x0057
(88 . MESSAGE_CC_ME) ;; #x0058
(89 . MESSAGE_RECIP_ME) ;; #x0059
(90 . ORIGINAL_SENDER_NAME) ;; #x005A
(91 . ORIGINAL_SENDER_ENTRYID) ;; #x005B
(92 . ORIGINAL_SENDER_SEARCH_KEY) ;; #x005C
(93 . ORIGINAL_SENT_REPRESENTING_NAME) ;; #x005D
(94 . ORIGINAL_SENT_REPRESENTING_ENTRYID) ;; #x005E
(95 . ORIGINAL_SENT_REPRESENTING_SEARCH_KEY) ;; #x005F
(96 . START_DATE) ;; #x0060
(97 . END_DATE) ;; #x0061
(98 . OWNER_APPT_ID) ;; #x0062
(99 . RESPONSE_REQUESTED) ;; #x0063
(100 . SENT_REPRESENTING_ADDRTYPE) ;; #x0064
(101 . SENT_REPRESENTING_EMAIL_ADDRESS) ;; #x0065
(102 . ORIGINAL_SENDER_ADDRTYPE) ;; #x0066
(103 . ORIGINAL_SENDER_EMAIL_ADDRESS) ;; #x0067
(104 . ORIGINAL_SENT_REPRESENTING_ADDRTYPE) ;; #x0068
(105 . ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS) ;; #x0069
(112 . CONVERSATION_TOPIC) ;; #x0070
(113 . CONVERSATION_INDEX) ;; #x0071
(114 . ORIGINAL_DISPLAY_BCC) ;; #x0072
(115 . ORIGINAL_DISPLAY_CC) ;; #x0073
(116 . ORIGINAL_DISPLAY_TO) ;; #x0074
(117 . RECEIVED_BY_ADDRTYPE) ;; #x0075
(118 . RECEIVED_BY_EMAIL_ADDRESS) ;; #x0076
(119 . RCVD_REPRESENTING_ADDRTYPE) ;; #x0077
(120 . RCVD_REPRESENTING_EMAIL_ADDRESS) ;; #x0078
(121 . ORIGINAL_AUTHOR_ADDRTYPE) ;; #x0079
(122 . ORIGINAL_AUTHOR_EMAIL_ADDRESS) ;; #x007A
(123 . ORIGINALLY_INTENDED_RECIP_ADDRTYPE) ;; #x007B
(124 . ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS) ;; #x007C
(125 . TRANSPORT_MESSAGE_HEADERS) ;; #x007D
(126 . DELEGATION) ;; #x007E
(127 . TNEF_CORRELATION_KEY) ;; #x007F
(4096 . BODY) ;; #x1000
(4097 . REPORT_TEXT) ;; #x1001
(4098 . ORIGINATOR_AND_DL_EXPANSION_HISTORY) ;; #x1002
(4099 . REPORTING_DL_NAME) ;; #x1003
(4100 . REPORTING_MTA_CERTIFICATE) ;; #x1004
(4102 . RTF_SYNC_BODY_CRC) ;; #x1006
(4103 . RTF_SYNC_BODY_COUNT) ;; #x1007
(4104 . RTF_SYNC_BODY_TAG) ;; #x1008
(4105 . RTF_COMPRESSED) ;; #x1009
(4112 . RTF_SYNC_PREFIX_COUNT) ;; #x1010
(4113 . RTF_SYNC_TRAILING_COUNT) ;; #x1011
(4114 . ORIGINALLY_INTENDED_RECIP_ENTRYID) ;; #x1012
(4115 . BODY_HTML) ;; #x1013
(4149 . SMTP_MESSAGE_ID) ;; #x1035
(3072 . CONTENT_INTEGRITY_CHECK) ;; #x0C00
(3073 . EXPLICIT_CONVERSION) ;; #x0C01
(3074 . IPM_RETURN_REQUESTED) ;; #x0C02
(3075 . MESSAGE_TOKEN) ;; #x0C03
(3076 . NDR_REASON_CODE) ;; #x0C04
(3077 . NDR_DIAG_CODE) ;; #x0C05
(3078 . NON_RECEIPT_NOTIFICATION_REQUESTED) ;; #x0C06
(3079 . DELIVERY_POINT) ;; #x0C07
(3080 . ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED) ;; #x0C08
(3081 . ORIGINATOR_REQUESTED_ALTERNATE_RECIPIENT) ;; #x0C09
(3082 . PHYSICAL_DELIVERY_BUREAU_FAX_DELIVERY) ;; #x0C0A
(3083 . PHYSICAL_DELIVERY_MODE) ;; #x0C0B
(3084 . PHYSICAL_DELIVERY_REPORT_REQUEST) ;; #x0C0C
(3085 . PHYSICAL_FORWARDING_ADDRESS) ;; #x0C0D
(3086 . PHYSICAL_FORWARDING_ADDRESS_REQUESTED) ;; #x0C0E
(3087 . PHYSICAL_FORWARDING_PROHIBITED) ;; #x0C0F
(3088 . PHYSICAL_RENDITION_ATTRIBUTES) ;; #x0C10
(3089 . PROOF_OF_DELIVERY) ;; #x0C11
(3090 . PROOF_OF_DELIVERY_REQUESTED) ;; #x0C12
(3091 . RECIPIENT_CERTIFICATE) ;; #x0C13
(3092 . RECIPIENT_NUMBER_FOR_ADVICE) ;; #x0C14
(3093 . RECIPIENT_TYPE) ;; #x0C15
(3094 . REGISTERED_MAIL_TYPE) ;; #x0C16
(3095 . REPLY_REQUESTED) ;; #x0C17
(3096 . REQUESTED_DELIVERY_METHOD) ;; #x0C18
(3097 . SENDER_ENTRYID) ;; #x0C19
(3098 . SENDER_NAME) ;; #x0C1A
(3099 . SUPPLEMENTARY_INFO) ;; #x0C1B
(3100 . TYPE_OF_MTS_USER) ;; #x0C1C
(3101 . SENDER_SEARCH_KEY) ;; #x0C1D
(3102 . SENDER_ADDRTYPE) ;; #x0C1E
(3103 . SENDER_EMAIL_ADDRESS) ;; #x0C1F
(3584 . CURRENT_VERSION) ;; #x0E00
(3585 . DELETE_AFTER_SUBMIT) ;; #x0E01
(3586 . DISPLAY_BCC) ;; #x0E02
(3587 . DISPLAY_CC) ;; #x0E03
(3588 . DISPLAY_TO) ;; #x0E04
(3589 . PARENT_DISPLAY) ;; #x0E05
(3590 . MESSAGE_DELIVERY_TIME) ;; #x0E06
(3591 . MESSAGE_FLAGS) ;; #x0E07
(3592 . MESSAGE_SIZE) ;; #x0E08
(3593 . PARENT_ENTRYID) ;; #x0E09
(3594 . SENTMAIL_ENTRYID) ;; #x0E0A
(3596 . CORRELATE) ;; #x0E0C
(3597 . CORRELATE_MTSID) ;; #x0E0D
(3598 . DISCRETE_VALUES) ;; #x0E0E
(3599 . RESPONSIBILITY) ;; #x0E0F
(3600 . SPOOLER_STATUS) ;; #x0E10
(3601 . TRANSPORT_STATUS) ;; #x0E11
(3602 . MESSAGE_RECIPIENTS) ;; #x0E12
(3603 . MESSAGE_ATTACHMENTS) ;; #x0E13
(3604 . SUBMIT_FLAGS) ;; #x0E14
(3605 . RECIPIENT_STATUS) ;; #x0E15
(3606 . TRANSPORT_KEY) ;; #x0E16
(3607 . MSG_STATUS) ;; #x0E17
(3608 . MESSAGE_DOWNLOAD_TIME) ;; #x0E18
(3609 . CREATION_VERSION) ;; #x0E19
(3610 . MODIFY_VERSION) ;; #x0E1A
(3611 . HASATTACH) ;; #x0E1B
(3612 . BODY_CRC) ;; #x0E1C
(3613 . NORMALIZED_SUBJECT) ;; #x0E1D
(3615 . RTF_IN_SYNC) ;; #x0E1F
(3616 . ATTACH_SIZE) ;; #x0E20
(3617 . ATTACH_NUM) ;; #x0E21
(3618 . PREPROCESS) ;; #x0E22
(3621 . ORIGINATING_MTA_CERTIFICATE) ;; #x0E25
(3622 . PROOF_OF_SUBMISSION) ;; #x0E26
(4095 . ENTRYID) ;; #x0FFF
(4094 . OBJECT_TYPE) ;; #x0FFE
(4093 . ICON) ;; #x0FFD
(4092 . MINI_ICON) ;; #x0FFC
(4091 . STORE_ENTRYID) ;; #x0FFB
(4090 . STORE_RECORD_KEY) ;; #x0FFA
(4089 . RECORD_KEY) ;; #x0FF9
(4088 . MAPPING_SIGNATURE) ;; #x0FF8
(4087 . ACCESS_LEVEL) ;; #x0FF7
(4086 . INSTANCE_KEY) ;; #x0FF6
(4085 . ROW_TYPE) ;; #x0FF5
(4084 . ACCESS) ;; #x0FF4
(12288 . ROWID) ;; #x3000
(12289 . DISPLAY_NAME) ;; #x3001
(12290 . ADDRTYPE) ;; #x3002
(12291 . EMAIL_ADDRESS) ;; #x3003
(12292 . COMMENT) ;; #x3004
(12293 . DEPTH) ;; #x3005
(12294 . PROVIDER_DISPLAY) ;; #x3006
(12295 . CREATION_TIME) ;; #x3007
(12296 . LAST_MODIFICATION_TIME) ;; #x3008
(12297 . RESOURCE_FLAGS) ;; #x3009
(12298 . PROVIDER_DLL_NAME) ;; #x300A
(12299 . SEARCH_KEY) ;; #x300B
(12300 . PROVIDER_UID) ;; #x300C
(12301 . PROVIDER_ORDINAL) ;; #x300D
(13057 . FORM_VERSION) ;; #x3301
(13058 . FORM_CLSID) ;; #x3302
(13059 . FORM_CONTACT_NAME) ;; #x3303
(13060 . FORM_CATEGORY) ;; #x3304
(13061 . FORM_CATEGORY_SUB) ;; #x3305
(13062 . FORM_HOST_MAP) ;; #x3306
(13063 . FORM_HIDDEN) ;; #x3307
(13064 . FORM_DESIGNER_NAME) ;; #x3308
(13065 . FORM_DESIGNER_GUID) ;; #x3309
(13066 . FORM_MESSAGE_BEHAVIOR) ;; #x330A
(13312 . DEFAULT_STORE) ;; #x3400
(13325 . STORE_SUPPORT_MASK) ;; #x340D
(13326 . STORE_STATE) ;; #x340E
(13328 . IPM_SUBTREE_SEARCH_KEY) ;; #x3410
(13329 . IPM_OUTBOX_SEARCH_KEY) ;; #x3411
(13330 . IPM_WASTEBASKET_SEARCH_KEY) ;; #x3412
(13331 . IPM_SENTMAIL_SEARCH_KEY) ;; #x3413
(13332 . MDB_PROVIDER) ;; #x3414
(13333 . RECEIVE_FOLDER_SETTINGS) ;; #x3415
(13791 . VALID_FOLDER_MASK) ;; #x35DF
(13792 . IPM_SUBTREE_ENTRYID) ;; #x35E0
(13794 . IPM_OUTBOX_ENTRYID) ;; #x35E2
(13795 . IPM_WASTEBASKET_ENTRYID) ;; #x35E3
(13796 . IPM_SENTMAIL_ENTRYID) ;; #x35E4
(13797 . VIEWS_ENTRYID) ;; #x35E5
(13798 . COMMON_VIEWS_ENTRYID) ;; #x35E6
(13799 . FINDER_ENTRYID) ;; #x35E7
(13824 . CONTAINER_FLAGS) ;; #x3600
(13825 . FOLDER_TYPE) ;; #x3601
(13826 . CONTENT_COUNT) ;; #x3602
(13827 . CONTENT_UNREAD) ;; #x3603
(13828 . CREATE_TEMPLATES) ;; #x3604
(13829 . DETAILS_TABLE) ;; #x3605
(13831 . SEARCH) ;; #x3607
(13833 . SELECTABLE) ;; #x3609
(13834 . SUBFOLDERS) ;; #x360A
(13835 . STATUS) ;; #x360B
(13836 . ANR) ;; #x360C
(13837 . CONTENTS_SORT_ORDER) ;; #x360D
(13838 . CONTAINER_HIERARCHY) ;; #x360E
(13839 . CONTAINER_CONTENTS) ;; #x360F
(13840 . FOLDER_ASSOCIATED_CONTENTS) ;; #x3610
(13841 . DEF_CREATE_DL) ;; #x3611
(13842 . DEF_CREATE_MAILUSER) ;; #x3612
(13843 . CONTAINER_CLASS) ;; #x3613
(13844 . CONTAINER_MODIFY_VERSION) ;; #x3614
(13845 . AB_PROVIDER_ID) ;; #x3615
(13846 . DEFAULT_VIEW_ENTRYID) ;; #x3616
(13847 . ASSOC_CONTENT_COUNT) ;; #x3617
(14080 . ATTACHMENT_X400_PARAMETERS) ;; #x3700
(14081 . ATTACH_DATA_OBJ) ;; #x3701
(14082 . ATTACH_ENCODING) ;; #x3702
(14083 . ATTACH_EXTENSION) ;; #x3703
(14084 . ATTACH_FILENAME) ;; #x3704
(14085 . ATTACH_METHOD) ;; #x3705
(14087 . ATTACH_LONG_FILENAME) ;; #x3707
(14088 . ATTACH_PATHNAME) ;; #x3708
(14089 . ATTACH_RENDERING) ;; #x3709
(14090 . ATTACH_TAG) ;; #x370A
(14091 . RENDERING_POSITION) ;; #x370B
(14092 . ATTACH_TRANSPORT_NAME) ;; #x370C
(14093 . ATTACH_LONG_PATHNAME) ;; #x370D
(14094 . ATTACH_MIME_TAG) ;; #x370E
(14095 . ATTACH_ADDITIONAL_INFO) ;; #x370F
(14096 . ATTACH_MIME_SEQUENCE) ;; #x3710
(14098 . ATTACH_CONTENT_ID) ;; #x3712
(14099 . ATTACH_CONTENT_LOCATION) ;; #x3713
(14100 . ATTACH_FLAGS) ;; #x3714
(14592 . DISPLAY_TYPE) ;; #x3900
(14594 . TEMPLATEID) ;; #x3902
(14596 . PRIMARY_CAPABILITY) ;; #x3904
(14847 . 7BIT_DISPLAY_NAME) ;; #x39FF
(14848 . ACCOUNT) ;; #x3A00
(14849 . ALTERNATE_RECIPIENT) ;; #x3A01
(14850 . CALLBACK_TELEPHONE_NUMBER) ;; #x3A02
(14851 . CONVERSION_PROHIBITED) ;; #x3A03
(14852 . DISCLOSE_RECIPIENTS) ;; #x3A04
(14853 . GENERATION) ;; #x3A05
(14854 . GIVEN_NAME) ;; #x3A06
(14855 . GOVERNMENT_ID_NUMBER) ;; #x3A07
(14856 . BUSINESS_TELEPHONE_NUMBER) ;; #x3A08
(14857 . HOME_TELEPHONE_NUMBER) ;; #x3A09
(14858 . INITIALS) ;; #x3A0A
(14859 . KEYWORD) ;; #x3A0B
(14860 . LANGUAGE) ;; #x3A0C
(14861 . LOCATION) ;; #x3A0D
(14862 . MAIL_PERMISSION) ;; #x3A0E
(14863 . MHS_COMMON_NAME) ;; #x3A0F
(14864 . ORGANIZATIONAL_ID_NUMBER) ;; #x3A10
(14865 . SURNAME) ;; #x3A11
(14866 . ORIGINAL_ENTRYID) ;; #x3A12
(14867 . ORIGINAL_DISPLAY_NAME) ;; #x3A13
(14868 . ORIGINAL_SEARCH_KEY) ;; #x3A14
(14869 . POSTAL_ADDRESS) ;; #x3A15
(14870 . COMPANY_NAME) ;; #x3A16
(14871 . TITLE) ;; #x3A17
(14872 . DEPARTMENT_NAME) ;; #x3A18
(14873 . OFFICE_LOCATION) ;; #x3A19
(14874 . PRIMARY_TELEPHONE_NUMBER) ;; #x3A1A
(14875 . BUSINESS2_TELEPHONE_NUMBER) ;; #x3A1B
(14876 . MOBILE_TELEPHONE_NUMBER) ;; #x3A1C
(14877 . RADIO_TELEPHONE_NUMBER) ;; #x3A1D
(14878 . CAR_TELEPHONE_NUMBER) ;; #x3A1E
(14879 . OTHER_TELEPHONE_NUMBER) ;; #x3A1F
(14880 . TRANSMITABLE_DISPLAY_NAME) ;; #x3A20
(14881 . PAGER_TELEPHONE_NUMBER) ;; #x3A21
(14882 . USER_CERTIFICATE) ;; #x3A22
(14883 . PRIMARY_FAX_NUMBER) ;; #x3A23
(14884 . BUSINESS_FAX_NUMBER) ;; #x3A24
(14885 . HOME_FAX_NUMBER) ;; #x3A25
(14886 . COUNTRY) ;; #x3A26
(14887 . LOCALITY) ;; #x3A27
(14888 . STATE_OR_PROVINCE) ;; #x3A28
(14889 . STREET_ADDRESS) ;; #x3A29
(14890 . POSTAL_CODE) ;; #x3A2A
(14891 . POST_OFFICE_BOX) ;; #x3A2B
(14892 . TELEX_NUMBER) ;; #x3A2C
(14893 . ISDN_NUMBER) ;; #x3A2D
(14894 . ASSISTANT_TELEPHONE_NUMBER) ;; #x3A2E
(14895 . HOME2_TELEPHONE_NUMBER) ;; #x3A2F
(14896 . ASSISTANT) ;; #x3A30
(14912 . SEND_RICH_INFO) ;; #x3A40
(14913 . WEDDING_ANNIVERSARY) ;; #x3A41
(14914 . BIRTHDAY) ;; #x3A42
(14915 . HOBBIES) ;; #x3A43
(14916 . MIDDLE_NAME) ;; #x3A44
(14917 . DISPLAY_NAME_PREFIX) ;; #x3A45
(14918 . PROFESSION) ;; #x3A46
(14919 . PREFERRED_BY_NAME) ;; #x3A47
(14920 . SPOUSE_NAME) ;; #x3A48
(14921 . COMPUTER_NETWORK_NAME) ;; #x3A49
(14922 . CUSTOMER_ID) ;; #x3A4A
(14923 . TTYTDD_PHONE_NUMBER) ;; #x3A4B
(14924 . FTP_SITE) ;; #x3A4C
(14925 . GENDER) ;; #x3A4D
(14926 . MANAGER_NAME) ;; #x3A4E
(14927 . NICKNAME) ;; #x3A4F
(14928 . PERSONAL_HOME_PAGE) ;; #x3A50
(14929 . BUSINESS_HOME_PAGE) ;; #x3A51
(14930 . CONTACT_VERSION) ;; #x3A52
(14931 . CONTACT_ENTRYIDS) ;; #x3A53
(14932 . CONTACT_ADDRTYPES) ;; #x3A54
(14933 . CONTACT_DEFAULT_ADDRESS_INDEX) ;; #x3A55
(14934 . CONTACT_EMAIL_ADDRESSES) ;; #x3A56
(14935 . COMPANY_MAIN_PHONE_NUMBER) ;; #x3A57
(14936 . CHILDRENS_NAMES) ;; #x3A58
(14937 . HOME_ADDRESS_CITY) ;; #x3A59
(14938 . HOME_ADDRESS_COUNTRY) ;; #x3A5A
(14939 . HOME_ADDRESS_POSTAL_CODE) ;; #x3A5B
(14940 . HOME_ADDRESS_STATE_OR_PROVINCE) ;; #x3A5C
(14941 . HOME_ADDRESS_STREET) ;; #x3A5D
(14942 . HOME_ADDRESS_POST_OFFICE_BOX) ;; #x3A5E
(14943 . OTHER_ADDRESS_CITY) ;; #x3A5F
(14944 . OTHER_ADDRESS_COUNTRY) ;; #x3A60
(14945 . OTHER_ADDRESS_POSTAL_CODE) ;; #x3A61
(14946 . OTHER_ADDRESS_STATE_OR_PROVINCE) ;; #x3A62
(14947 . OTHER_ADDRESS_STREET) ;; #x3A63
(14948 . OTHER_ADDRESS_POST_OFFICE_BOX) ;; #x3A64
(15616 . STORE_PROVIDERS) ;; #x3D00
(15617 . AB_PROVIDERS) ;; #x3D01
(15618 . TRANSPORT_PROVIDERS) ;; #x3D02
(15620 . DEFAULT_PROFILE) ;; #x3D04
(15621 . AB_SEARCH_PATH) ;; #x3D05
(15622 . AB_DEFAULT_DIR) ;; #x3D06
(15623 . AB_DEFAULT_PAB) ;; #x3D07
(15624 . FILTERING_HOOKS) ;; #x3D08
(15625 . SERVICE_NAME) ;; #x3D09
(15626 . SERVICE_DLL_NAME) ;; #x3D0A
(15627 . SERVICE_ENTRY_NAME) ;; #x3D0B
(15628 . SERVICE_UID) ;; #x3D0C
(15629 . SERVICE_EXTRA_UIDS) ;; #x3D0D
(15630 . SERVICES) ;; #x3D0E
(15631 . SERVICE_SUPPORT_FILES) ;; #x3D0F
(15632 . SERVICE_DELETE_FILES) ;; #x3D10
(15633 . AB_SEARCH_PATH_UPDATE) ;; #x3D11
(15634 . PROFILE_NAME) ;; #x3D12
(15872 . IDENTITY_DISPLAY) ;; #x3E00
(15873 . IDENTITY_ENTRYID) ;; #x3E01
(15874 . RESOURCE_METHODS) ;; #x3E02
(15875 . RESOURCE_TYPE) ;; #x3E03
(15876 . STATUS_CODE) ;; #x3E04
(15877 . IDENTITY_SEARCH_KEY) ;; #x3E05
(15878 . OWN_STORE_ENTRYID) ;; #x3E06
(15879 . RESOURCE_PATH) ;; #x3E07
(15880 . STATUS_STRING) ;; #x3E08
(15881 . X400_DEFERRED_DELIVERY_CANCEL) ;; #x3E09
(15882 . HEADER_FOLDER_ENTRYID) ;; #x3E0A
(15883 . REMOTE_PROGRESS) ;; #x3E0B
(15884 . REMOTE_PROGRESS_TEXT) ;; #x3E0C
(15885 . REMOTE_VALIDATE_OK) ;; #x3E0D
(16128 . CONTROL_FLAGS) ;; #x3F00
(16129 . CONTROL_STRUCTURE) ;; #x3F01
(16130 . CONTROL_TYPE) ;; #x3F02
(16131 . DELTAX) ;; #x3F03
(16132 . DELTAY) ;; #x3F04
(16133 . XPOS) ;; #x3F05
(16134 . YPOS) ;; #x3F06
(16135 . CONTROL_ID) ;; #x3F07
(16136 . INITIAL_DETAILS_PANE) ;; #x3F08
(26608 . ID_SECURE_MIN) ;; #x67F0
(26623 . ID_SECURE_MAX) ;; #x67FF
))
(defconst mime-tnef-mapi-types-table
'((0 . UNSPECIFIED) ;; #x0000
(1 . NULL) ;; #x0001
(2 . SHORT) ;; #x0002
(3 . INT) ;; #x0003
(4 . FLOAT) ;; #x0004
(5 . DOUBLE) ;; #x0005
(6 . CURRENCY) ;; #x0006
(7 . APPTIME) ;; #x0007
(10 . ERROR) ;; #x000a
(11 . BOOLEAN) ;; #x000b
(13 . OBJECT) ;; #x000d
(20 . INT8BYTE) ;; #x0014
(30 . STRING) ;; #x001e
(31 . UNICODE_STRING) ;; #x001f
(64 . SYSTIME) ;; #x0040
(72 . CLSID) ;; #x0048
(258 . BINARY) ;; #x0102
))
;;; Internal functions
(defmacro mime-tnef-byte (array idx)
`(logand (aref ,array ,idx) 255))
(defmacro mime-tnef-padded-length (l)
;; L must be integer.
`(* (/ (+ ,l 3) 4) 4))
(eval-and-compile
(defsubst mime-tnef-2bytes (array idx)
(+ (mime-tnef-byte array idx)
(* (mime-tnef-byte array (1+ idx)) 256)))
(defsubst mime-tnef-4bytes (array idx)
(+ (mime-tnef-byte array idx)
(* (mime-tnef-byte array (1+ idx)) 256)
(* (mime-tnef-byte array (+ idx 2)) 65536)
(* (mime-tnef-byte array (+ idx 3)) 16777216))))
;;; Debug
(defvar mime-tnef-debug nil)
(defun mime-tnef-debug (string &rest args)
(when mime-tnef-debug
(if args (apply #'message string args)
(message "%s" string))))
;;; TNEF element
(defun mime-tnef-element-start (element)
(cdr (assq 'start element)))
(defun mime-tnef-element-end (element)
(cdr (assq 'end element)))
(defun mime-tnef-element-name (element)
(cdr (assq 'name element)))
(defun mime-tnef-element-type (element)
(cdr (assq 'type element)))
;;; TNEF
(defun mime-tnef-parse (string)
(catch :done
(unless (and (> (length string) 6)
(equal (string-make-unibyte (substring string 0 4))
(string-make-unibyte "\x78\x9f\x3e\x22")))
(message "Input data does not seem to be MS-TNEF format")
(throw :done nil))
(mime-tnef-debug "TNEF Key: %04x\n" (mime-tnef-2bytes string 4))
(let ((length (length string))
(read 6)
result object
lvl-type name type
sum
start end data-length)
(while (< read length)
(setq lvl-type (mime-tnef-byte string read)
name (mime-tnef-2bytes string (1+ read))
type (mime-tnef-2bytes string (+ read 3))
data-length (mime-tnef-4bytes string (+ read 5))
start (+ read 9)
end (+ start data-length)
object `(
(lvl-type . ,(or (cdr (assq lvl-type
mime-tnef-lvl-types-table))
lvl-type))
(name . ,(or (cdr (assq name mime-tnef-names-table))
name))
(type . ,(or (cdr (assq type mime-tnef-types-table))
type))
(start . ,start)
(end . ,end)
;; (length . ,(mime-tnef-4bytes string (+ read 5)))
)
read (+ read data-length 9 2)
sum 0)
(dotimes (i data-length)
(setq sum (+ sum (mime-tnef-byte string (- read 3 i)))))
(unless (eq (mime-tnef-2bytes string (- read 2)) (% sum 65536))
(message "Checksum mismatch, TNEF may be corrupted"))
(setq result (cons object result)))
(cons (nreverse result) string))))
(defun mime-tnef-codepage (tnef)
(let ((elements (car tnef))
codepage)
(while elements
(if (eq (mime-tnef-element-name (car elements)) 'OEMCODEPAGE)
(setq codepage (mime-tnef-4bytes
(cdr tnef) (mime-tnef-element-start (car elements)))
elements nil)
(setq elements (cdr elements))))
(mime-tnef-debug "TNEF codepage is %d" codepage)
codepage))
(defun mime-tnef-coding-system (tnef)
(intern (format "cp%d" (mime-tnef-codepage tnef))))
(defun mime-tnef-decode-string (string tnef)
(let ((coding (mime-tnef-coding-system tnef)))
(decode-coding-string string
(if (coding-system-p coding)
coding
(detect-coding-string string t)))))
(defun mime-tnef-decode-unicode-string (string)
(decode-coding-string string (and mime-tnef-unicode-coding-system
(detect-coding-string string t))))
;;; MAPI
(defun mime-tnef-mapi-parse (element tnef)
(catch :done
(let* ((raw (cdr tnef))
(read (mime-tnef-element-start element))
(count (mime-tnef-4bytes raw read))
result)
(setq read (+ read 4))
(mime-tnef-debug "MAPI count is %d" count)
(dotimes (_i count)
(let ((type (mime-tnef-2bytes raw read))
(name (mime-tnef-2bytes raw (+ read 2)))
(multi 1))
(setq read (+ read 4))
(when (> (logand name 32768) 0) ;; #x8000
(mime-tnef-debug "MAPI element have GUID")
(let ((num (mime-tnef-4bytes raw (+ read 16))))
(mime-tnef-debug "MAPI number of GUID names is %d" num)
(if (zerop num)
(setq name (mime-tnef-2bytes raw (+ read 20))
read (+ read 24))
(setq read (+ read 20))
(dotimes (_i num)
(setq read (+ read 4
(mime-tnef-padded-length
(mime-tnef-4bytes raw (+ read)))))))))
(when (or (> (logand type 4096) 0) ;; #x1000
(memq (cdr (assq type mime-tnef-mapi-types-table))
'(STRING UNICODE_STRING OBJECT BINARY)))
(mime-tnef-debug "MAPI element have multi-values")
(setq multi (prog1 (mime-tnef-4bytes raw read)
(setq read (+ read 4)))
type (logand type 61439))) ;; #xefff
(setq type (or (cdr (assq type mime-tnef-mapi-types-table)) type)
name (or (cdr (assq name mime-tnef-mapi-names-table)) name))
(mime-tnef-debug
"MAPI %s (type %s), number of values is %d"
(if (integerp name) (format "%x" name) name) type multi)
(let (values)
(dotimes (_i multi)
(cond
((memq type '(SHORT BOOLEAN))
(setq values (cons (mime-tnef-2bytes raw read) values)
;; Padding 2 bytes.
read (+ read 4)))
((memq type '(INT FLOAT))
(setq values (cons (substring raw read (+ read 4)) values)
read (+ read 4)))
((memq type '(SYSTIME DOUBLE APPTIME CURRENCY INT8BYTE))
(setq values (cons (cons read (+ read 8)) values)
read (+ read 8)))
((eq type 'CLSID)
(setq values (cons (cons read (+ read 16)) values)
read (+ read 16)))
((memq type '(STRING UNICODE_STRING OBJECT BINARY))
(let ((length (mime-tnef-4bytes raw read)))
(unless (zerop length)
(setq values
(cons (cons
(+ read 4)
(+ read 4 length
(or (cdr (assq type
'((STRING . -1)
(UNICODE_STRING . -2))))
0)))
values)))
(setq read (+ read 4 (mime-tnef-padded-length length)))))
(t
(message "TNEF may be corrupted!!")
(throw :done (nreverse result)))))
(setq result
(cons `((name . ,name) (type . ,type) (values . ,values))
result)))))
(nreverse result))))
(defun mime-tnef-mapi-string (mapi-element tnef)
(let* ((value (cadr (assq 'values mapi-element)))
(string (substring (cdr tnef) (car value) (cdr value))))
(if (eq (cdr (assq 'type mapi-element)) 'UNICODE_STRING)
(mime-tnef-decode-unicode-string string)
(mime-tnef-decode-string string tnef))))
;;; files
(defun mime-tnef-files (tnef)
(let ((elements (car tnef))
files file type)
(while elements
(setq type (mime-tnef-element-name (car elements)))
(cond
((eq type 'ATTACHRENDDATA)
(when file
(setq files (cons file files)
file nil)))
((eq type 'ATTACHDATA)
(when (assq 'start file)
(mime-tnef-debug "Multiple ATTACHDATA for single ATTACHRENDDATA"))
(setq file (append
`(,(assq 'start (car elements))
,(assq 'end (car elements)))
(delq (assq 'start file)
(delq (assq 'end file) file)))))
((eq type 'ATTACHTITLE)
(unless (assq 'name file)
(let ((start (mime-tnef-element-start (car elements)))
(end (mime-tnef-element-end (car elements))))
(setq file
(cons `(name . ,(mime-tnef-decode-string
(substring (cdr tnef) start end) tnef))
file)))))
((eq type 'ATTACHMENT)
(let ((mapi (mime-tnef-mapi-parse (car elements) tnef)))
(while mapi
(let* ((elt (car mapi))
(name (cdr (assq 'name elt))))
(cond
((eq name 'ATTACH_LONG_FILENAME)
(setq file (append `((name . ,(mime-tnef-mapi-string elt tnef))
(longname . t))
(delq (assq 'longname file)
(delq (assq 'name file) file)))))
((eq name 'DISPLAY_NAME)
;; ATTACH_LONG_FILENAME is preferred.
(unless (assq 'longname file)
(setq file (cons `(name . ,(mime-tnef-mapi-string elt tnef))
(delq (assq 'name file) file)))))))
(setq mapi (cdr mapi))))))
(setq elements (cdr elements)))
(delq nil (nreverse (cons file files)))))
;;; MIME-view
(defun mime-tnef-insert-file-parameters (params file data)
(let (charset
result)
(dolist (elt params)
(setq result
(cons
(cons
(car elt)
(if (eq (cdr elt) 'charset)
(or charset
(let ((codings (detect-coding-string data)))
(while (and (null charset) codings)
(setq charset (coding-system-to-mime-charset
(car codings)))
(when charset
(setq charset (symbol-name charset)))
(setq codings (cdr codings)))
charset))
(cdr elt)))
result)))
(mime-edit-insert-file-parameters (nreverse result) file)))
(defun mime-tnef-insert-file (file data)
(let* ((guess (mime-find-file-type file))
(type (nth 0 guess))
(subtype (nth 1 guess))
(parameters (nth 2 guess))
(encoding "8bit")
(disposition-type (nth 4 guess))
(disposition-params (nth 5 guess)))
(setq parameters
(concat
(when (consp parameters)
(mime-tnef-insert-file-parameters parameters file data))
(when disposition-type
(concat "\n" "Content-Disposition: " disposition-type
(mime-edit-insert-file-parameters
disposition-params file)))))
(insert
;; multibyte buffer is needed for non-ASCII filename.
(with-temp-buffer
(mime-edit-insert-tag type subtype parameters)
(mime-edit-define-encoding encoding)
(goto-char (point-min))
(mime-tnef-translate-single-part-tag)
(buffer-string)))
(insert data "\n")))
(defun mime-tnef-translate-single-part-tag ()
(if (re-search-forward mime-edit-single-part-tag-regexp nil t)
(let* ((beg (match-beginning 0))
(end (match-end 0))
(tag (buffer-substring beg end)))
(delete-region beg end)
(let ((contype (mime-edit-get-contype tag))
(encoding (mime-edit-get-encoding tag)))
(save-restriction
(narrow-to-region (point)(point))
(insert "Content-Type: " contype "\n")
(if encoding
(insert "Content-Transfer-Encoding: " encoding "\n"))
(mime-encode-header-in-buffer))
(cons (and contype
(downcase contype))
(and encoding
(downcase encoding)))))))
(defvar mime-tnef-buffers nil)
(defun mime-tnef-kill-buffers ()
(mapc (lambda (buffer)
(when (bufferp buffer)
(kill-buffer buffer)))
mime-tnef-buffers))
(eval-when-compile (require 'mmgeneric))
(defun mime-display-application/ms-tnef (entity _situation)
(let ((tnef (mime-tnef-parse (mime-entity-content entity)))
files p buffer tnef-entity)
(setq files (and (car tnef) (mime-tnef-files tnef)))
(if (null files)
(insert (if (car tnef)
"No attachment.\n"
"Data may be corrupted.\n"))
(goto-char (setq p (point-max)))
(save-restriction
(narrow-to-region p p)
(setq buffer (generate-new-buffer
(concat mime-temp-buffer-name "TNEF*")))
(with-current-buffer buffer
(require 'mmbuffer)
(set-buffer-multibyte nil)
(let ((boundary (concat "TNEF-" (mime-edit-make-boundary))))
(insert "Content-Type: multipart/mixed;\n"
" boundary=\"" boundary "\"\n"
"Content-Transfer-Encoding: 7bit\n\n")
;; (mime-encode-header-in-buffer)
;; (goto-char (point-max))
(while files
(narrow-to-region (point) (point))
(insert "--" boundary "\n")
(mime-tnef-insert-file (cdr (assq 'name (car files)))
(substring
(cdr tnef)
(cdr (assq 'start (car files)))
(cdr (assq 'end (car files)))))
(goto-char (point-max))
(setq files (cdr files)))
(widen)
(insert "--" boundary "--" "\n")
(setq tnef-entity
(mime-parse-message
(mm-expand-class-name 'buffer)
nil entity (mime-entity-node-id entity))
buffer-read-only t)))
(add-hook 'kill-buffer-hook 'mime-tnef-kill-buffers nil t)
(make-local-variable 'mime-tnef-buffers)
(add-to-list 'mime-tnef-buffers buffer)
(mime-display-entity
tnef-entity nil '((header . invisible)
(body . visible)
(entity-button . invisible)))))))
;;; @ end
;;;
(provide 'mime-tnef)
;;; mime-tnef.el ends here
07070100000018000081A4000003E80000006400000001627140E5000050FD000000000000000000000000000000000000002E00000000semi-1.14.6+239+gb1c245b81715/mime-ui-en.texi\input texinfo.tex
@setfilename mime-ui-en.info
@settitle SEMI-EPG 1.14 Manual
@documentlanguage en
@dircategory GNU Emacs Lisp
@direntry
* SEMI-EPG (en): (mime-ui-en). MIME user interface.
@end direntry
@titlepage
@title SEMI-EPG 1.14 Manual
@author MORIOKA Tomohiko <morioka@@jaist.ac.jp>
@author Kazuhiro Ito
@subtitle 2020/09/17
@end titlepage
@node Top, Introduction, (dir), (dir)
@top SEMI-EPG 1.14 Manual
@ifinfo
This file documents SEMI, a MIME user interface for GNU Emacs.
@end ifinfo
@menu
* Introduction:: What is SEMI-EPG?
* MIME-View:: MIME message viewing
* MIME-Edit:: MIME message editing
* Various:: Miscellaneous
* Concept Index::
* Function Index::
* Variable Index::
@end menu
@node Introduction, MIME-View, Top, Top
@chapter What is SEMI-EPG?
SEMI is a package for GNU Emacs to provide features related with MIME
user interface. SEMI-EPG is a variant of SEMI, which
features supports to EasyPG and latest Emacs.@refill
SEMI provides two user interfaces: MIME-View and MIME-Edit.@refill
MIME-View is a kernel of user interface to display or operate MIME
messages, STD 11 messages or ``localized RFC 822'' messages.@refill
MIME-Edit is a user interface to compose MIME messages.@refill
Each MUA can use powerful MIME features to combine these features.
@node MIME-View, MIME-Edit, Introduction, Top
@chapter MIME message viewing
MIME-View is a MIME viewer for wide use that runs on GNU Emacs.@refill
MIME-View is the kernel of the user interface for browsing MIME
messages. You can start some presentation-method which is a program for
creating some representation, or some acting-method which is a program
for processing the entity. Then you can deal with a variety of entities.
@menu
* Overview of MIME-View:: Basic design
* MIME-Preview:: Presentation of mime-preview-buffer
* mime-view-mode:: Operation in mime-preview-buffer
@end menu
@node Overview of MIME-View, MIME-Preview, MIME-View, MIME-View
@section Basic design
The representation form of the internet messages in electric letters
or in net news is based on STD 11. The STD 11 message body is a plain
text which consists of lines as its only structure, and the character
code is fixed as us-ascii. Actually, there are ``localized STD 11''
messages that use some character code in their linguistic range
instead of using us-ascii. Even in that case, the character code in
the message is single. Therefore, Message User Agents have considered
(byte row) = (us-ascii string), or (byte row) = (string in the
character code in the linguistic range).@refill
Although, the MIME message has the tree structure in entity unit.
And one message can contain multiple character codes. The content of
an entity can be not only a letter or an image that can be displayed
simply, but also can be a voice or an animation that are played for
some time interval, a data for some specific application, a source
code of some program, or an external reference that consists of
the usage of ftp or mail service, or some URL. Therefore the simple
extension of STD 11 user interface, which only consider displaying
the message, cannot treat all of the MIME functionalities.
Then it is not sufficient to decode message along its MIME type, but
it is also required to consider a playback processing through some
dialogue with the user. The format of MIME messages is designed
to easily be passed to automatic processing. But some contents in the
MIME message should not be passed to automatic processing for security
reasons. So it should be designed to ask user in such cases.
After all, in order to deal with MIME message, it is required to
distinguish the representation for information exchange which is
written in STD 11 or MIME construction, and its result
after some interpretation which is a display screen or a playback
process. It is also needed to converse with user for playback
processing.@refill
Therefore, MIME-View uses two buffers for one document, one is the
mime-raw-buffer that stores the representation for information exchange,
and the other is the mime-preview-buffer that stores the representation
for displaying.@refill
MIME-View provides a mode in the mime-preview-buffer for reading MIME
message, which is called as mime-view-mode. User can manipulate each
entity there.
@node MIME-Preview, mime-view-mode, Overview of MIME-View, MIME-View
@section Presentation of mime-preview-buffer
mime-view-mode displays information about each entity as@refill
@example
[entity-button]
(header)
(body)
(separator)
@end example
@noindent
You can change their design or inhibit showing some of them, according
to some condition.
See following example
@example
From: morioka@@jaist.ac.jp (MORIOKA Tomohiko)
Subject: Re: question?
Newsgroups: zxr.message.mime
Date: 22 Oct 93 11:02:44
Mime-Version: 1.0
Organization: Japan Advanced Institute of Science and Technology,
Ishikawa, Japan
[1 (text/plain)]
How to compose MIME message in MIME-Edit mode.
C-c C-x ? shows its help.
C-c C-x C-t insert a text message.
C-c C-x TAB insert a (binary) file.
C-c C-x C-e insert a reference to external body.
C-c C-x C-v insert a voice message.
C-c C-x C-y insert a mail or news message.
C-c C-x RET insert a mail message.
C-c C-x C-s insert a signature file at end.
C-c C-x t insert a new MIME tag.
C-c C-m C-a enclose as multipart/alternative.
C-c C-m C-p enclose as multipart/parallel.
C-c C-m C-m enclose as multipart/mixed.
C-c C-m C-d enclose as multipart/digest.
C-c C-m C-s enclose as PGP signed.
C-c C-m C-e enclose as PGP encrypted.
C-c C-x C-k insert PGP public key.
C-c C-x p preview editing MIME message.
...
therefore, you should type C-c C-x C-i and specify the binary file
which you want to insert.
You should select Base64 as MIME encoding for binary file.
[2 (image/gif)]
[3 (text/plain)]
Like above, you can compose the message with image.
==================== Take A Cup Of Russian Tea ======================
========= ** Not With Jam Nor Marmalade But With Honey ** ==========
========= MORIOKA TOMOHIKO ==========
============== Internet E-mail: <morioka@@jaist.ac.jp> ==============
@end example
@menu
* entity-button::
* entity-header::
* entity-body::
@end menu
@node entity-button, entity-header, MIME-Preview, MIME-Preview
@subsection entity-button
@cindex entity-number
@cindex entity-button
@strong{entity-button} is a tag on the top of the entity
which shows brief information of the part.@refill
Normally, it appears as
@example
[1.3 test (text/plain)]
@end example
@noindent
The number on the head describes the place of the entity in the
message (like the section number) and it is called as
@strong{entity-number}.@refill
The string in the next describes its title. This information is
taken from
@enumerate
@item
Title described in Content-Description field or Subject field
@item
File name specified by filename parameter in Content-Disposition field
@item
File name specified by name parameter in Content-Type field
@item
File name for uuencode'ing
@end enumerate
@noindent
If none of them are specified, displays a blank.
The 3rd item in the parenthesis describes media-type/subtype of
the entity. If it is is not MIME entity, it displays @code{nil}.
@refill
This entity-button plays a role like icon that symbolically
shows the content of the entity. For example, push @kbd{v} on
@example
[2 (image/gif)]
@end example
@noindent
shows up the image contained there.
If the mouse operation is possible, you can display the image
by pushing 2nd button (the middle button for 3 button mouse) too.
@node entity-header, entity-body, entity-button, MIME-Preview
@subsection entity-header
@cindex entity-header
@strong{entity-header} is the header of the entity.
(Don't blame me as ``You say nothing more than as it is'',
It is no more than that.)
@node entity-body, , entity-header, MIME-Preview
@subsection entity-body
@cindex entity-body
@strong{entity-body} is the content of the part.@refill
Sophistication does not seem enough here also, but it is really such
a thing.@refill
Though, it actually be twisted a little.@refill
The text entity is passed to code conversion according to its charset,
and the image entity should be converted on XEmacs.@refill
Details will be described later.
@node mime-view-mode, , MIME-Preview, MIME-View
@section Operation in mime-preview-buffer
mime-preview-buffer posesses following functionalities.@refill
@table @kbd
@item @key{u}
go back to upper part (in the first part of the message,
go back to the Summary mode (*1))
@item @key{p}
go to previous part
@item @key{M-TAB}
go to previous part
@item @key{n}
go to next part
@item @key{TAB}
go to next part
@item @key{SPC}
scroll up
@item @key{M-SPC}
scroll down
@item @key{DEL}
scroll down
@item @key{RET}
go to next line
@item @key{M-RET}
go to previous line
@item @key{v}
play current part (*2)
@item @key{e}
extract file from current part (*2)
@item @key{C-c C-p}
print current part (*2)
@item @key{mouse-button-2}
start the mouse button in preview-buffer
on content-button, play current part (*2)@refill
on URL-button, start WWW browser@refill
@end table
@noindent
@strong{[Notice]}
@quotation
(*1) Do not go back to Summary mode unless appropriately
configured for mime-view in the MUA.@refill
(*2) actual behavior depends on the associated method
@end quotation
@node MIME-Edit, Various, MIME-View, Top
@chapter MIME message editing
@cindex MIME-Edit
@strong{MIME-Edit} is a general MIME composer for GNU Emacs.
@menu
* mime-edit-mode:: Minor-mode to edit MIME message
* single-part tags:: Operations for single-part
* enclosure tags:: Operations for enclosure
* other MIME-Edit operations:: Other operations
* file-type specification:: How to detect tag for inserted file
* transfer level::
* message/partial sending:: Splitting
@end menu
@node mime-edit-mode, single-part tags, MIME-Edit, MIME-Edit
@section Minor-mode to edit MIME message
@cindex enclosure
@cindex multi-part ending tag
@cindex multi-part beginning tag
@cindex tag
@cindex mime-edit-mode
@strong{mime-edit-mode} is a minor mode to compose MIME message. In
this mode, @strong{tag} represents various kinds of data, so you can
edit multi part message consists of various kinds of data, such as text,
image, audio, etc.@refill
There are 2 kinds of tags:
@itemize @bullet
@item
single-part tag
@item
multi-part tag
@end itemize
single-part tag represents single part, this form is following:@refill
@example
--[[TYPE/SUBTYPE;PARAMETERS][ENCODING]
OPTIONAL-FIELDS]
@end example
TYPE/SUBTYPE and PARAMETERS indicates type/subtype and parameters of
Content-Type (@ref{Content-Type,,, mime-en, FLIM Manual}) field.
TYPE/SUBTYPE is required, PARAMETERS is optional.@refill
ENCODING indicates Content-Transfer-Encoding
(@ref{Content-Transfer-Encoding,,, mime-en, FLIM Manual}) field. It
is optional too.@refill
OPTIONAL-FIELDS is to represent another fields except Content-Type field
and Content-Transfer-Encoding field.@refill
multi-part tags represent multi part. They
consist of a pair of @strong{multi-part beginning tag} and
@strong{multi-part ending tag}.@refill
multi-part beginning tag's form is following:
@example
--<<TYPE>>-@{
@end example
multi-part ending tag's form is following:
@example
--@}-<<TYPE>>
@end example
A region from multi-part beginning tag to multi-part ending tag is
called as @strong{enclosure}.
@node single-part tags, enclosure tags, mime-edit-mode, MIME-Edit
@section Operations for single-part
Operations to make single-part are following:
@table @kbd
@item @key{C-c C-x C-t}
Insert single-part tag indicates text part.
@item @key{C-c C-x C-i}
Insert file as a MIME attachment. If @kbd{C-u} is followed by it, it
asks media-type, subtype or encoding even if their default values are
specified. (cf. @ref{file-type specification})
@item @key{C-c C-x C-e}
Insert external part.
@item @key{C-c C-x C-v}
Record audio input until @kbd{C-g} is pressed, and insert as a
audio part. (It requires /dev/audio in default.)
@item @key{C-c C-x C-y}
Insert current (mail or news) message. (It is MUA depended.)
@item @key{C-c C-x C-m}
Insert mail message. (It is MUA depended.)
@item @key{C-c C-x C-w}, @key{C-c C-x C-s}
Insert signature.
@item @key{C-c C-x C-k}
Insert PGP (@ref{PGP}) public key. (It requires Mailcrypt package.)
@item @key{C-c C-x t}
Insert any single-part tag.
@end table
@node enclosure tags, other MIME-Edit operations, single-part tags, MIME-Edit
@section Operations for enclosure
Operations to make enclosure are following:
@table @kbd
@item @key{C-c C-m C-a}
Enclose specified region as multipart/alternative.
@item @key{C-c C-m C-p}
Enclose specified region as multipart/parallel.
@item @key{C-c C-m C-m}
Enclose specified region as multipart/mixed.
@item @key{C-c C-m C-d}
Enclose specified region as multipart/digest.
@item @key{C-c C-m C-s}
Digital-sign to specified region. (cf. @ref{PGP})
@item @key{C-c C-m C-e}
Encrypt to specified region. (cf. @ref{PGP})
@item @key{C-c C-m C-q}
avoid to encode tags in specified region. In other words, tags is
interpreted as such string. (In current version, it may be
incomplete. Maybe PGP-signature does not work for this enclosure.)
@end table
@node other MIME-Edit operations, file-type specification, enclosure tags, MIME-Edit
@section Other operations
There are another operations in mime-edit-mode.
@table @kbd
@item @key{C-c C-c}
Send current editing message.
@item @key{C-c C-x p}
Preview current editing message. (cf. @ref{MIME-View})
@item @key{C-c C-x C-z}
Exit mime-edit-mode without sending.
@item @key{C-c C-x /}
Set current editing message to enable automatic splitting or not.
Form of automatic split messages is message/partial.
@item @key{C-c C-x 7}
Set 7bit (@ref{7bit,,, mime-en, FLIM Manual}) to transfer level
(@ref{transfer level}).
@item @key{C-c C-x 8}
Set 8bit (@ref{8bit,,, mime-en, FLIM Manual}) to transfer level
(@ref{transfer level}).
@item @key{C-c C-x v}
Set current editing message to digital-sign or not. (cf. @ref{PGP})
@item @key{C-c C-x h}
Set current editing message to encrypt or not. (cf. @ref{PGP})
@item @key{C-c C-x ?}
Display help message.
@end table
@node file-type specification, transfer level, other MIME-Edit operations, MIME-Edit
@section How to detect tag for inserted file
When @kbd{C-c C-x C-i} (@code{mime-edit-insert-file}) is pressed, tag
parameters for inserted file, such as media-type or encoding, are
detected by variable @code{mime-file-types}.@refill
When @kbd{C-u} is followed by it or parameter is not found from the
variable, it asks from user. (When @kbd{C-u} is followed by it,
detected value is used as default value)@refill
If you want to change default value for file names, please change
variable @code{mime-file-types}.
@defvar mime-file-types
Specification of default value of tag for file name of inserted
file.@refill
It is a list of following list:
@lisp
(FILE_PAT TYPE SUBTYPE PARAMS ENCODING
DISPOSITION_TYPE DISPOSITION_PARAMS)
@end lisp
Each element of the list is following:
@table @samp
@item FILE_PAT
regular expression of file name
@item TYPE
primary-type of media-type
@item SUBTYPE
subtype of media-type
@item PARAMS
parameters of Content-Type field
@item ENCODING
Content-Transfer-Encoding
@item DISPOSITION_TYPE
disposition-type
@item DISPOSITION_PARAMS
parameters of Content-Disposition field
@end table
@noindent
Example: Specify application/rtf as default media type for
@file{*.rtf}
@lisp
(eval-after-load
"mime-edit"
'(set-alist 'mime-file-types
"\\.rtf$"
'("application" "rtf" nil nil
"attachment" (("filename" . file)))
))
@end lisp
@end defvar
@node transfer level, message/partial sending, file-type specification, MIME-Edit
@section transfer level
@cindex transfer level
Each content inserted in a message is represented by 7bit
(@ref{7bit,,, mime-en, FLIM Manual}), 8bit (@ref{8bit,,, mime-en, FLIM
Manual}) or binary (@ref{binary,,, mime-en, FLIM Manual}).@refill
If a message is translated by 7bit-through MTA (@ref{MTA,,, mime-en,
FLIM Manual}), there is no need to encode 7bit data, but 8bit and
binary data must be encoded to 7bit data.@refill
Similarly, if a message is translated by 8bit-through MTA, there is no
need to encode 7bit or 8bit data, but binary data must be encoded to
7bit or 8bit data.@refill
@noindent
@strong{[Memo]}
@quotation
EBCDIC MTA breaks 7bit data, so in this case, 7bit data must be
encoded by base64. But I don't know EBCDIC. (^_^;
Similarly, I wish ASCII-printable only MTA and code-conversion MTA
disappeared. (^_^;@refill
Maybe there are binary-through MTA, but I think it is not major.
@end quotation
@strong{transfer level} represents how range data are
available. mime-edit has a variable @code{mime-transfer-level}
to represent transfer level.
@defvar mime-transfer-level
transfer level.@refill
If transfer level of a data is over it, a data is encoded to
7bit.@refill
Currently, 7 or 8 is available. Default value is 7.@refill
In extension plan, EBCDIC will be 5, ASCII printable only will be 6,
binary will be 9. But it will not be implemented.
@end defvar
@noindent
@strong{[Memo]}
@quotation
transfer level is only for body, not for message header
(@ref{entity-header}). MIME extends RFC 822 (@ref{RFC 822,,, mime-en,
FLIM Manual}) to use 8bit data in body, but it requires to use
us-ascii (@ref{us-ascii,,, mime-en, FLIM Manual}) in header.
@end quotation
@node message/partial sending, , transfer level, MIME-Edit
@section Splitting
@defvar mime-edit-split-message
Split large message if it is non-nil.
@end defvar
@defvar mime-edit-message-default-max-lines
Default maximum lines of a message.
@end defvar
@defvar mime-edit-message-max-lines-alist
Alist of major-mode vs maximum lines of a message.@refill
If it is not specified for a major-mode,
@code{mime-edit-message-default-max-lines} is used.
@end defvar
@defvar mime-edit-split-blind-field-regexp
Regular expression to match field-name to be ignored when split sending.
@end defvar
@node Various, Concept Index, MIME-Edit, Top
@chapter Miscellaneous
@menu
* PGP:: Encryption, Sign
* Buttons:: Mouse button
* Acting-condition configuration:: Utility for configuration
@end menu
@node PGP, Buttons, Various, Various
@section PGP
@cindex PGP/MIME
mime-edit provides PGP encryption, signature and inserting public-key
features based on @strong{PGP/MIME} (RFC 3156) by using EasyPG.@refill
@defvar mime-edit-pgp-verbose
When non-nil, ask the user about the current operation more verbosely.
@end defvar
@defvar mime-edit-pgp-signers
A list of your own key ID which will be preferredly used to sign a message.
@end defvar
@defvar mime-edit-pgp-encrypt-to-self
When non-nil, add sender's key ID to recipient list when encryption.
When nil, sender can't decrypt encrypted content in general.
@end defvar
@defvar mime-edit-pgp-filtered-validities
A list of keys's validities which are used for neither signing nor encrypting.
@end defvar
@node Buttons, Acting-condition configuration, PGP, Various
@section Mouse button
@defvar mime-button-face
Face used for content-button or URL-button of MIME-Preview buffer.
@end defvar
@defvar mime-button-mouse-face
Face used for MIME-preview buffer mouse highlighting.
@end defvar
@defvar mime-browse-url-function
Function to browse URL.
@end defvar
@node Acting-condition configuration, , Buttons, Various
@section Utility for configuration
@defun mime-add-condition target-type condition &optional mode file
Add @var{condition} to database specified by @var{target-type}.@refill
@var{target-type} must be @code{preview} or @code{action}.@refill
If optional argument @var{mode} is @code{strict} or @code{nil}
(omitted), @var{condition} is added strictly.@refill
If optional argument @var{mode} is @code{with-default}, @var{condition}
is added with default rule.@refill
If optional argument @var{file} is specified, it is loaded when
@var{condition} is activate.
@end defun
@node Concept Index, Function Index, Various, Top
@chapter Concept Index
@printindex cp
@node Function Index, Variable Index, Concept Index, Top
@chapter Function Index
@printindex fn
@node Variable Index, , Function Index, Top
@chapter Variable Index
@printindex vr
@bye
07070100000019000081A4000003E80000006400000001627140E500005FBE000000000000000000000000000000000000002E00000000semi-1.14.6+239+gb1c245b81715/mime-ui-ja.texi\input texinfo-ja @c -*-texinfo -*- coding: utf-8 -*-
@setfilename mime-ui-ja.info
@documentencoding utf-8
@documentlanguage ja
@dircategory GNU Emacs Lisp
@direntry
* SEMI-EPG (ja): (mime-ui-ja). MIME user interface.
@end direntry
@settitle SEMI-EPG 1.14 説ææž
@titlepage
@title SEMI-EPG 1.14 説ææž
@author å®å²¡ ç¥åœŠ <morioka@@jaist.ac.jp>
@author äŒè€ åå
@subtitle 2020/09/17
@end titlepage
@node Top, Introduction, (dir), (dir)
@top SEMI-EPG 1.14 説ææž
@ifinfo
This file documents SEMI-EPG, a MIME user interface for GNU
Emacs.@refill
GNU Emacs çšã® MIME user interface ã§ãã SEMI-EPG ã«ã€ããŠèª¬æããŸãã
@end ifinfo
@menu
* Introduction:: SEMI-EPG ã£ãŠäœïŒ
* MIME-View:: MIME message ã®é²èŠ§
* MIME-Edit:: MIME message ã®ç·šé
* Various:: ãã®ä»
* Concept Index:: æŠå¿µçŽ¢åŒ
* Function Index:: é¢æ°çŽ¢åŒ
* Variable Index:: å€æ°çŽ¢åŒ
@end menu
@node Introduction, MIME-View, Top, Top
@chapter SEMI-EPG ã£ãŠäœïŒ
SEMI 㯠GNU Emacs çšã® MIME user interface ãæäŸãã package ã§ãã
SEMI-EPG 㯠SEMI ã®ããªã¢ã³ãã®äžã€ã§ã
EasyPG ãææ°ããŒãžã§ã³ã® Emacs ãžã®å¯Ÿå¿ãªã©ãç¹åŸŽãšããŸãã
@refill
SEMI ãæäŸãã MIME user interface 㯠MIME-View ãš MIME-Edit ãããªããŸ
ãã@refill
MIME-View 㯠MIME ã STD 11 ããã³ãå°ååããã RFC 822ãmessage ã衚瀺
ããããæäœãããããããã® user interface ã®äžæ žã§ãã@refill
MIME-Edit 㯠MIME message ãçæããããã® user interface ã§ãã@refill
å MUA ã§ãããã®æ©èœãå©çšããããšã«ãããé«åºŠãª MIME æ©èœãå©çšããã
ãšãã§ããŸãã
@node MIME-View, MIME-Edit, Introduction, Top
@chapter MIME message ã®é²èŠ§
MIME-View 㯠GNU Emacs ã§åäœããæ±çšç㪠MIME viewer ã§ãã@refill
MIME-View 㯠MIME message ãé²èŠ§ããããã®å©çšè
çé¢ (user interface)
ã®æ žã§ããããã®äžã§ presentation-method ãšåŒã°ãã衚瀺ãäœãããã°ã©ã
ãåãããããacting-method ãšåŒã°ãã entity ã®åŠçããã°ã©ã ãåãã
ããšãå¯èœã§ãããŸããŸãªçš®é¡ã® entity ãæ±ãäºãã§ããããã«ãªã£ãŠããŸãã
@menu
* Overview of MIME-View:: MIME-View æŠèª¬
* MIME-Preview:: mime-preview-buffer ã®ç»é¢æ§æ
* mime-view-mode:: mime-preview-buffer ã§ã®æäœ
@end menu
@node Overview of MIME-View, MIME-Preview, MIME-View, MIME-View
@section MIME-View æŠèª¬
Internet ã®é»åæžç°¡ã»ããããã¥ãŒã¹ãªã©ã®æžé¢ (message) ã®è¡šçŸåœ¢åŒã¯ STD
11 ã«åºã¥ããŠããŸããSTD 11 ã®æžé¢æ¬äœ (message body) ã¯è¡ãå¯äžã®æ§é ãš
ããç°¡ææé¢ (plain text) ã§ãããæå笊å·ã us-ascii ãšå®ããããŠããŸãã
å®éã«ã¯ãæå笊å·ã us-ascii ã®ä»£ããã«ãã®èšèªåã§çšããããæå笊å·ãš
ãããå°ååããã STD 11ãæžé¢ãçšããããŠããŸãããããã®å Žåãæžé¢ã®
æå笊å·ã¯ïŒã€ã§ãããã®ãããå©çšè
çé¢ (Message User Agent) ã¯ããã°ã
ã°ãbyte å = us-ascii æååããªããã¯ãbyte å = ãã®èšèªåã§çšããæ
å笊å·ã®æååã®ããã«èŠå£ããŠããŸããã@refill
ããããªãããMIME ã§ã¯æžé¢ã¯ entity ãåäœãšããæšæ§é ã«ãªãããŸããïŒ
ã€ã®æžé¢ã§è€æ°ã®æå笊å·ãçšããããšãã§ããŸãããŸããentity ã®å
容ã¯æ
é¢ãçµµã®ãããªåçŽã«è¡šç€ºå¯èœãªãã®ã ãã§ãªããé³å£°ãåç»ãªã©ã®äžå®æéå
çããããããªãã®ãç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ãããã°ã©ã ã®ãœãŒã¹ã
ãããã¯ãftp ã mail service ã®å©çšæ³ã URL ãšãã£ã圢ã§è¡šãããå€éšå
ç
§ãªã©ã®ããŸããŸãªãã®ãèãããŸãããã®ããã衚瀺ã ããèããŠãã STD
11 ã«ãããå©çšè
çé¢ã®åçŽãªå»¶é·ã§ã¯ MIME ã®å
šãŠã®æ©èœãæ±ãããšã¯ã§ã
ãŸãããã€ãŸããMIME ã®åœ¢åŒã«åãããŠåŸ©å·ããã ãã§ã¯äžååã§ãããå©çš
è
ãšã®å¯Ÿè©±çãªåçåŠçãèæ
®ããå¿
èŠããããŸããMIME æžé¢ã®åœ¢åŒã¯èªååŠ
çãããããèšèšãããŠããŸãããMIME æžé¢ã«å«ãŸããå
容ã®äžã«ã¯ã»ãã¥ãª
ãã£ãŒäžã®åé¡ããèªååŠçãããã¹ãã§ãªããã®ãããããããã£ããã®ã®å
çã«é¢ããŠã¯å©çšè
ã®å€æãä»°ãããã«èšèšãããã¹ãã§ããããçµå±ãMIME
æžé¢ãæ±ãããã«ã¯ STD 11 ããã³ MIME ã®æ§æã§èšè¿°ãããã¡ãã»ãŒãžã®æ
å ±
亀æçšè¡šçŸãšãã®è§£éçµæã§ãã衚瀺ç»é¢ãåççã®åŠçãåºå¥ããŠèããå¿
èŠ
ããããŸãããŸããå©çšè
ãšã®å¯Ÿè©±çãªåçåŠçãå¿
èŠã§ãã@refill
ãã®ãããMIME-View ã¯ïŒã€ã®æžé¢ã«å¯ŸããŠãæ
å ±äº€æçšè¡šçŸãæ ŒçŽãã
mime-raw-buffer ãšè¡šç€ºçšè¡šçŸãæ ŒçŽãã mime-preview-buffer ã®ïŒã€ã®
buffer ãçšããŸãã@refill
MIME-View 㯠mime-preview-buffer ã«å¯Ÿã㊠mime-view-mode ãšãã MIME
message ãé²èŠ§ããããã® mode ãæäŸããŸããå©çšè
ã¯ããã§å entity ã«
察ããŠæäœãè¡ãããšãã§ããŸãã
@node MIME-Preview, mime-view-mode, Overview of MIME-View, MIME-View
@section mime-preview-buffer ã®ç»é¢æ§æ
mime-view-mode ã§ã¯å entity ã«å¯ŸããŠ@refill
@example
[entity-button]
(header)
(body)
(separator)
@end example
@noindent
ãšããæ
å ±ã衚瀺ããŸãããããã¯æ¡ä»¶ã«åŸã£ãŠ design ãå€æŽãããã衚瀺
ãæå¶ããããšãã§ããŸãã
以äžã«ã衚瀺äŸã瀺ããŸãã
@example
From: morioka@@jaist.ac.jp (å®å²¡ ç¥åœŠ / MORIOKA Tomohiko)
Subject: Re: 質åïŒ
Newsgroups: zxr.message.mime
Date: 22 Oct 93 11:02:44
Mime-Version: 1.0
Organization: Japan Advanced Institute of Science and Technology,
Ishikawa, Japan
[1 (text/plain)]
MIME-Edit mode ã«ããããMIME message ã®äœãæ¹ã
C-c C-x ? ãæŒããš help ãåºãŠããã
C-c C-x C-t insert a text message.
C-c C-x TAB insert a (binary) file.
C-c C-x C-e insert a reference to external body.
C-c C-x C-v insert a voice message.
C-c C-x C-y insert a mail or news message.
C-c C-x RET insert a mail message.
C-c C-x C-s insert a signature file at end.
C-c C-x t insert a new MIME tag.
C-c C-m C-a enclose as multipart/alternative.
C-c C-m C-p enclose as multipart/parallel.
C-c C-m C-m enclose as multipart/mixed.
C-c C-m C-d enclose as multipart/digest.
C-c C-m C-s enclose as PGP signed.
C-c C-m C-e enclose as PGP encrypted.
C-c C-x C-k insert PGP public key.
C-c C-x p preview editing MIME message.
...
ã£ãŠèš³ã§ãC-c C-x C-i ãæŒããŠãæ¿å
¥ããã binary file ãæå®ããŸãã
binary file ã® MIME encoding ã«ã¯ãæ®éãBase64 ãæå®ããŸãã
[2 (image/gif)]
[3 (text/plain)]
ãããªé¢šã«ãçµµå
¥ã message ã®ã§ãäžããã
ããããããããããã ãã·ã¢ã³ã»ãã£ãŒãäžæ¯ã ããããããããããã
ããããã â ãžã£ã ã§ã¯ãªãããŒãã¬ãŒãã§ããªãèè㧠â ããããã
ããããã ÐÐÐ ãÐÐРТÐÐÐÐ¥ÐÐÐ ããããã
ããããããã Internet E-mail: <morioka@@jaist.ac.jp> ããããããã
@end example
@menu
* entity-button::
* entity-header::
* entity-body::
@end menu
@node entity-button, entity-header, MIME-Preview, MIME-Preview
@subsection entity-button
@cindex entity-number
@cindex entity-button
@strong{entity-button} 㯠entity ã®å
é ã«ãã£ãŠããã® entity ã«é¢ãã倧
ãŸããªæ
å ±ã衚瀺ããéšåã§ãã@refill
æšæºã§ã¯
@example
[1.3 test (text/plain)]
@end example
@noindent
ã®ãããªæãã«è¡šç€ºãããŸãã
æåã®æ°å㯠message äžã®ãã® entity ã®äœçœ®ãç¯çªå·ã®ããã«è¡šãããã®ã§ã
@strong{entity-number} ãšåŒã³ãŸãã@refill
ïŒçªç®ã®æååã¯è¡šé¡ãè¡šããŸãããã®æ
å ±ã¯ã
@enumerate
@item
Content-Description field ããã㯠Subject field ã«æžãããè¡šé¡
@item
Content-Disposition field ã® filename parameter ã«æžããã file å
@item
Content-Type field ã® name parameter ã«æžããã file å
@item
uuencode ã®å Žåã® file å
@end enumerate
@noindent
ããäœããŸããã©ããååšããªãå Žåã¯ç©ºçœã衚瀺ãããŸãã
ïŒçªç®ã®æ¬åŒ§ã®äžã®æ
å ±ã¯ãã® entity ã® media-type/subtype ãè¡šããŸããé
MIME entity ã®å Žåã@code{nil} ã衚瀺ãããŸãã@refill
ãã® entity-button 㯠entity ã®å
容ã象城ãã icon ã®ãããªåœ¹å²ãæã
ããŸããäŸãã°ã
@example
[2 (image/gif)]
@end example
@noindent
ã®äžã§ @kbd{v} ãæŒãã°ããã«å
¥ã£ãŠããçµµã衚瀺ãããŸãã
ãŸããmouse æäœãå¯èœãªå Žåãentity-button ã第ïŒãã¿ã³ïŒ3 button
mouse ã®å Žåãäžå€®ã®ãã¿ã³ïŒã§æŒãã°ãåæ§ã«ãã®çµµã衚瀺ãããŸãã
@node entity-header, entity-body, entity-button, MIME-Preview
@subsection entity-header
@cindex entity-header
@strong{entity-header} ã¯ãã entity ã® header ã衚瀺ããéš
åã§ãïŒããã®ãŸãŸããããã£ãŠæããªãã§ããããããããªãã§ãïŒã
@node entity-body, , entity-header, MIME-Preview
@subsection entity-body
@cindex entity-body
@strong{entity-body} 㯠part ã®å
容ã衚瀺ããéšåã§ãã@refill
ãããã²ããã足ããªãã§ããããŸããããããããã§ãã@refill
ãšã¯ãããå®éã«ã¯å°ãã²ãã£ãŠãŸãã@refill
text entity ã®å Žå㯠charset ã«å¿ã㊠code å€æãããããŸãããXEmacs ã§
㯠image entity ãå€æããªããšãããªããã@refill
詳ããã¯ãŸãåŸã§ã
@node mime-view-mode, , MIME-Preview, MIME-View
@section mime-preview-buffer ã§ã®æäœ
mime-preview-buffer ã«ã¯ä»¥äžã®æ©èœããããŸãã@refill
@table @kbd
@item @key{u}
äžã® part ã«æ»ãïŒmessage ã®äžçªäžã® part ã§ãããè¡ãªããš Summary
mode ã«æ»ã (*1)ïŒ
@item @key{p}
åã® part ã«ç§»åãã
@item @key{M-TAB}
åã® part ã«ç§»åãã
@item @key{n}
次㮠part ã«ç§»åãã
@item @key{TAB}
次㮠part ã«ç§»åãã
@item @key{SPC}
scroll up ãã
@item @key{M-SPC}
scroll down ãã
@item @key{DEL}
scroll down ãã
@item @key{RET}
次ã®è¡ã«ç§»åãã
@item @key{M-RET}
åã®è¡ã«ç§»åãã
@item @key{v}
part ãåçãã (*2)
@item @key{e}
part ãã file ãåãåºã (*2)
@item @key{C-c C-p}
part ãå°å·ãã (*2)
@item @key{mouse-button-2}
preview-buffer äžã® mouse button ãèµ·åãã
content-button ãæŒãã°ããã® part ãåçããã(*2)@refill
URL-button ãæŒãã°ããã® WWW browser ãèµ·åããã@refill
@end table
@noindent
@strong{[泚æ]}
@quotation
(*1) MUA 㧠mime-view ã®èšå®ãããŠããªãå ŽåãSummary mode ã«ã¯æ»ããŸã
ãã@refill
(*2) å®éã®åäœã¯å¯Ÿå¿ãã method ã«äŸããŸãã
@end quotation
@node MIME-Edit, Various, MIME-View, Top
@chapter MIME message ã®ç·šé
@cindex MIME-Edit
@strong{MIME-Edit} 㯠GNU Emacs ã§åäœããæ±çšç㪠MIME
composer ã§ãã
@menu
* mime-edit-mode:: MIME message ãç·šéããããã® minor-mode
* single-part tags:: single-part ã«å¯Ÿããæäœ
* enclosure tags:: enclosure ã«å¯Ÿããæäœ
* other MIME-Edit operations:: mime-edit-mode ã«ããããã®ä»ã®æäœ
* file-type specification:: æ¿å
¥ããã file ã«å¯Ÿãã tag ã®æ±ºå®
* transfer level::
* message/partial sending:: Splitting
@end menu
@node mime-edit-mode, single-part tags, MIME-Edit, MIME-Edit
@section MIME message ãç·šéããããã® minor-mode
@cindex enclosure
@cindex multi-part çµäº tag
@cindex multi-part éå§ tag
@cindex tag
@cindex mime-edit-mode
@strong{mime-edit-mode} 㯠MIME message ãäœæããããã® minor-mode ã§ãã
ãã® mode ã§ã¯ @strong{tag} ã䜿ã£ãŠããŸããŸãªçš®é¡ã® data ãè¡šçŸããããŸ
ããŸãªçš®é¡ã® data ãããªãè€æ°ã®éšåãããªã message ãç·šéããããšãå¯
èœã«ããŠããŸãã@refill
tag ã«ã¯
@itemize @bullet
@item
single-part tag
@item
multi-part tag
@end itemize
@noindent
ã®ïŒã€ããããŸãã
single-part tag 㯠single part ãè¡šçŸããããã® tag ã§ã@refill
@example
--[[TYPE/SUBTYPE;PARAMETERS][ENCODING]
OPTIONAL-FIELDS]
@end example
@noindent
ãšãããããªåœ¢ãããŠããŸãã
TYPE/SUBTYPE ããã³ PARAMETERS 㯠Content-Type (@ref{Content-Type,,,
mime-ja, FLIM 説ææž}) æ¬ã® type/subtype ããã³ parameters ãè¡šããŸãã
TYPE/SUBTYPE ã¯å¿
é ã§ãããPARAMETERS ã¯çç¥å¯ã§ãã@refill
ENCODING 㯠Content-Transfer-Encoding
(@ref{Content-Transfer-Encoding,,, mime-ja, FLIM 説ææž}) æ¬ãè¡šããŸ
ãããããçç¥å¯ã§ãã@refill
OPTIONAL-FIELDS 㯠Content-Type, Content-Transfer-Encoding 以å€ã® field
ãæžãããã®éšåã§ãçç¥å¯ã§ãã@refill
multi-part tag 㯠multi part ãè¡šçŸããããã®
tag ã§ã@refill
@example
--<<TYPE>>-@@@{
@end example
@noindent
ãšãã圢㮠@strong{multi-part éå§ tag} ãšåŒã°ãã multi
part ã®éå§ã瀺ã tag ãš
@example
--@@@}-<<TYPE>>
@end example
@noindent
ãšãã圢㮠@strong{multi-part çµäº tag} ãšåŒã°ãã multi
part ã®çµäºã瀺ã tag ããããŸãã
ãŸããmulti-part éå§ tag ãš multi-part çµäº tag ã§å²ãŸããéšåã
@strong{enclosure} ãšåŒã³ãŸãã
@node single-part tags, enclosure tags, mime-edit-mode, MIME-Edit
@section single-part ã«å¯Ÿããæäœ
single-part ãäœãããã®æäœã«ã¯ä»¥äžã®ãããªãã®ããããŸãã
@table @kbd
@item @key{C-c C-x C-t}
text part ãè¡šã single-part tag ãæ¿å
¥ããŸãã
@item @key{C-c C-x C-i}
file ã MIME part ãšããŠæ·»ä»ããŸããåã« @kbd{C-u} ãä»ããå Žåãåžžã«
media-type, subtype çãèããŠæ¥ãŸãã(cf. @ref{file-type specification})
@item @key{C-c C-x C-e}
external part ãæ¿å
¥ããŸãã
@item @key{C-c C-x C-v}
@kbd{C-g} ãæŒããããŸã§é²é³ãè¡ããé³å£° part ãæ¿å
¥ããŸããïŒäœ¿
çšã§ããªãå ŽåããããŸãïŒ
@item @key{C-c C-x C-y}
çŸåšè¡šç€ºäžã® (mail or news) message ãæ¿å
¥ããŸããïŒå®éã®åäœã¯äœ¿çšã
ãŠãã MUA ã«äŸåããŸãïŒ
@item @key{C-c C-x C-m}
mail message ãæ¿å
¥ããŸãã
@item @key{C-c C-x C-w}, @key{C-c C-x C-s}
signature ãæ¿å
¥ããŸãã
@item @key{C-c C-x C-k}
PGP (@ref{PGP}) ã®å
¬ééµãæ¿å
¥ããŸãã
@item @key{C-c C-x t}
ä»»æã® single-part tag ãæ¿å
¥ããŸãã
@end table
@node enclosure tags, other MIME-Edit operations, single-part tags, MIME-Edit
@section enclosure ã«å¯Ÿããæäœ
enclosure ãäœãããã®æäœãšããŠã¯ä»¥äžã®ãããªãã®ããããŸãã
@table @kbd
@item @key{C-c C-m C-a}
æå®ãã region ã multipart/alternative ãšããŠå²ã¿ãŸãã
@item @key{C-c C-m C-p}
æå®ãã region ã multipart/parallel ãšããŠå²ã¿ãŸãã
@item @key{C-c C-m C-m}
æå®ãã region ã multipart/mixed ãšããŠå²ã¿ãŸãã
@item @key{C-c C-m C-d}
æå®ãã region ã multipart/digest ãšããŠå²ã¿ãŸãã
@item @key{C-c C-m C-s}
æå®ãã region ã«é»å眲åãè¡ããŸãã(cf. @ref{PGP})
@item @key{C-c C-m C-e}
æå®ãã region ãæå·åããŸãã(cf. @ref{PGP})
@item @key{C-c C-m C-q}
æå®ãã region å
ã® tag ãç¡å¹ã«ãããã® tag ãæååãšããŠå©çšã§ãã
ããã«ããŸããïŒçŸåšã®çã§ã¯ããŸãåããªãããšããããŸãããŸããé»å眲
åãšã®äœµçšã«é¢ããŠãäžå®å
šã§ãïŒ
@end table
@node other MIME-Edit operations, file-type specification, enclosure tags, MIME-Edit
@section mime-edit-mode ã«ããããã®ä»ã®æäœ
mime-edit-mode ã«ããããã®ä»ã®æäœã説æããŸãã
@table @kbd
@item @key{C-c C-c}
ç·šéäžã® message ãéä¿¡ããŸãã
@item @key{C-c C-x p}
ç·šéäžã® message ã preview ããŸãã(cf. @ref{MIME-View})
@item @key{C-c C-x C-z}
ç·šéäžã® message ãéä¿¡ããããšãªããmime-edit-mode ãçµäºããŸãã
@item @key{C-c C-x /}
倧ã㪠message ãéä¿¡ããå Žåã« message/partial 圢åŒã«èªååå²å¯èœãšã
ããã©ããã決ããŸãã
@item @key{C-c C-x 7}
transfer level (@ref{transfer level}) ã 7bit (@ref{7bit,,, mime-ja,
FLIM 説ææž}) ã«ããŸãã
@item @key{C-c C-x 8}
transfer level (@ref{transfer level}) ã 8bit (@ref{8bit,,, mime-ja,
FLIM 説ææž}) ã«ããŸãã
@item @key{C-c C-x v}
message å
šäœãé»å眲åãããã©ããã決ããŸãã(cf. @ref{PGP})
@item @key{C-c C-x h}
message å
šäœãæå·åãããã©ããã決ããŸãã(cf. @ref{PGP})
@item @key{C-c C-x ?}
help message ã衚瀺ããŸãã
@end table
@node file-type specification, transfer level, other MIME-Edit operations, MIME-Edit
@section æ¿å
¥ããã file ã«å¯Ÿãã tag ã®æ±ºå®
@kbd{C-c C-x C-i} (@code{mime-edit-insert-file}) ãå®è¡ããæãæ¿å
¥ãã
ã file ã«å¯Ÿãã media-type ã encoding ãªã©ã® tag ã®æ
å ±ã¯å€æ°
@code{mime-file-types} ã«ãã£ãŠ file åããæšæž¬ãããŸãã@refill
åã« @kbd{C-u} ãä»ããæãããã³ãé©åœãªå€ãèŠä»ãããªãã£ãå Žåãuser
ã«å¯ŸããŠå€ã®å
¥åãä¿ããŸããïŒåã« @kbd{C-u} ãä»ããæãæšæž¬ãããå€ã
æ¢å®å€ãšããŠçšããããŸãïŒ@refill
file åã«å¯Ÿããæ¢å®å€ãå€ãããå Žåã¯å€æ° @code{mime-file-types}
ãèšå®ããŠäžããã
@defvar mime-file-types
æ¿å
¥ããã file ã® file åã«å¯Ÿãã tag ã®æ¢å®å€ãäžããã@refill
ãã®å€æ°ã¯
@lisp
(FILE_PAT TYPE SUBTYPE PARAMS ENCODING
DISPOSITION_TYPE DISPOSITION_PARAMS)
@end lisp
ãšãã list ã® list ã§ãåèŠçŽ ã¯ä»¥äžã®éãã§ããïŒ
@table @samp
@item FILE_PAT
file åãè¡šãæ£èŠè¡šçŸ
@item TYPE
media type
@item SUBTYPE
media subtype
@item PARAMS
Content-Type field ã® parameter
@item ENCODING
Content-Transfer-Encoding
@item DISPOSITION_TYPE
disposition-type
@item DISPOSITION_PARAMS
Content-Disposition field ã® parameter
@end table
@noindent
èšå®äŸïŒ @file{*.rtf} ã«å¯Ÿãã media type ã application/rtf ã«
ããå Žå
@lisp
(eval-after-load
"mime-edit"
'(set-alist 'mime-file-types
"\\.rtf$"
'("application" "rtf" nil nil
"attachment" (("filename" . file)))
))
@end lisp
@end defvar
@node transfer level, message/partial sending, file-type specification, MIME-Edit
@section transfer level
@cindex transfer level
message ã«æ¿å
¥ãã data 㯠7bit (@ref{7bit,,, mime-ja, FLIM 説ææž})
ãªãã 8bit (@ref{8bit,,, mime-ja, FLIM 説ææž}) ããã㯠binary
(@ref{binary,,, mime-ja, FLIM 説ææž}) ã§è¡šçŸããããšãã§ããŸãã
@refill
ãã£ãŠã7bit ããéããªã MTA (@ref{MTA,,, mime-ja, FLIM 説ææž}) ãçµ
ç±ããå Žåã7bit ã® data ã¯ãã®ãŸãŸã§éããŸããã8bit ã binary ã®
data 㯠7bit ã«å€æããªããã°ãªããŸããã@refill
åæ§ã«ã8bit ããéããªã MTA ãçµç±ããå Žåã7bit ã 8bit ã® data ã¯ã
ã®ãŸãŸã§éããŸãããbinary ã® data 㯠7bit ã 8bit ã«å€æããªããã°ãªã
ãŸããã@refill
@noindent
@strong{[Memo]}
@quotation
EBCDIC ããéããªã MTA ãçµç±ããå Žåã7bit ã® data ã base64 çã§å€
æããªããšéããŸããããç§ã¯ EBCDIC ã®ããšãŸã§ã¯ç¥ããŸããã(^_^;
åæ§ã«ãå¶åŸ¡æåãéããªã MTA ã®ããšã code å€æãè¡ãªã MTA ãæ¶ããŠãª
ããªã£ãŠæ¬²ããã§ãã(^_^;@refill
binary ãéã MTA ãååšãããã§ãããããä»ã®ãšããããŸãäžè¬çãšã¯ãã
ãªãã§ãããã
@end quotation
@strong{transfer level} ãšããã®ã¯ã©ã®ç¯å²ã® data ãŸã§éããã
ãšããããšãè¡šããã®ã§ããmime-edit ã¯
@code{mime-transfer-level} ãšããå€æ°ãæã£ãŠãããããã§
transfer level ãè¡šçŸããŸãã
@defvar mime-transfer-level
transfer level ãè¡šãã@refill
ãã data ã® transfer level ããã®å€ãè¶ããå Žåã7bit data ãžã®å€æãè¡
ãããã@refill
çŸåšã®ãšããã7 ã 8 ãæå¹ã§ãããæ¢å®å€ã¯ 7 ã§ããã@refill
EBCDIC ã 5, ASCII printable ã®ã¿ã 6, binary ã 9 ãšããããšãèšç»ããŠ
ããããå®è£
ã®äºå®ã¯ãªãã
@end defvar
@noindent
@strong{[Memo]}
@quotation
transfer level 㯠message header (@ref{entity-header}) ã«ã¯é¢ä¿ããªãã
MIME 㯠body ã«ãããŠã8bit ã® data ã䜿ããããã« STD 11 (@ref{STD
11,,, mime-ja, FLIM 説ææž}) ãæ¡åŒµããŠããããmessage header ã§ã¯
us-ascii (@ref{us-ascii,,, mime-ja, FLIM 説ææž}) ã®ã¿ãçšããããšãæ±
ããŠããã
@end quotation
@node message/partial sending, , transfer level, MIME-Edit
@section Splitting
@defvar mime-edit-split-message
Non-nil ãªãã°å€§ããªã¡ãã»ãŒãžãåå²ããŠéä¿¡ããŸãã
@end defvar
@defvar mime-edit-message-default-max-lines
ã¡ãã»ãŒãžã®æ倧è¡æ°ã®ããã©ã«ãå€ã§ãã
@end defvar
@defvar mime-edit-message-max-lines-alist
ã¡ãžã£ãŒã¢ãŒã察ã¡ãã»ãŒãžã®æ倧è¡æ°ããæãé£æ³ãªã¹ãã§ãã@refill
ã¡ãžã£ãŒã¢ãŒããããã§æå®ãããŠãªãå Žåã«ã¯
@code{mime-edit-message-default-max-lines} ãçšããŸãã
@end defvar
@defvar mime-edit-split-blind-field-regexp
åå²éä¿¡ã®éã«ç¡èŠããããã£ãŒã«ãåã«ãããããæ£èŠè¡šçŸã§ãã
@end defvar
@node Various, Concept Index, MIME-Edit, Top
@chapter ãã®ä»
@menu
* PGP:: æå·åã眲å
* Buttons:: æŒéŠ
* Acting-condition configuration:: å®è¡æ¡ä»¶ã®èšå®
@end menu
@node PGP, Buttons, Various, Various
@section PGP
@cindex PGP/MIME
mime-edit ã§ã¯ EasyPG ãå©çšãã @strong{PGP/MIME} (RFC 3156) ã«ããæ
å·åã»é»å眲åã»å
¬ééµã®æ¿å
¥æ©èœãå©çšããããšãã§ããŸãã@refill
@defvar mime-edit-pgp-verbose
When non-nil, ask the user about the current operation more verbosely.
@end defvar
@defvar mime-edit-pgp-signers
眲åæã«åªå
çã«äœ¿çšããéµ ID ã®ãªã¹ãã§ãã
@end defvar
@defvar mime-edit-pgp-encrypt-to-self
non-nilã®å Žåãæå·åã®éã«éä¿¡è
ã®éµ ID ã recipient ã«å«ããŸãã
nilã®å Žåãéä¿¡è
ã¯æå·åããå
容ãéåžžã¯åŸ©å·ã§ããŸããã
@end defvar
@defvar mime-edit-pgp-filtered-validities
A list of keys's validities which are used for neither signing nor encrypting.
@end defvar
@node Buttons, Acting-condition configuration, PGP, Various
@section æŒéŠ
@defvar mime-button-face
MIME-Preview ãããã¡ã§ content-button ããã㯠URL-button ã«çšãã
face ã§ãã
@end defvar
@defvar mime-button-mouse-face
MIME-preview ãããã¡ã§ããŠã¹ããã€ã©ã€ãããéã«çšãã face ã§ãã
@end defvar
@defvar mime-browse-url-function
URL ããã©ãŠãºããé¢æ°ã§ãã
@end defvar
@node Acting-condition configuration, , Buttons, Various
@section å®è¡æ¡ä»¶ã®èšå®
@defun mime-add-condition target-type condition &optional mode file
Add @var{condition} to database specified by @var{target-type}.@refill
@var{target-type} must be @code{preview} or @code{action}.@refill
If optional argument @var{mode} is @code{strict} or @code{nil}
(omitted), @var{condition} is added strictly.@refill
If optional argument @var{mode} is @code{with-default}, @var{condition}
is added with default rule.@refill
If optional argument @var{file} is specified, it is loaded when
@var{condition} is activate.
@end defun
@node Concept Index, Function Index, Various, Top
@chapter æŠå¿µçŽ¢åŒ
@printindex cp
@node Function Index, Variable Index, Concept Index, Top
@chapter é¢æ°çŽ¢åŒ
@printindex fn
@node Variable Index, , Function Index, Top
@chapter å€æ°çŽ¢åŒ
@printindex vr
@bye
0707010000001A000081A4000003E80000006400000001627140E500000672000000000000000000000000000000000000002C00000000semi-1.14.6+239+gb1c245b81715/mime-vcard.el;;; mime-vcard.el --- mime-view content filter for vCard. -*- lexical-binding: t -*-
;; Copyright (C) 2000 Free Software Foundation, Inc.
;; Author: Daiki Ueno <ueno@unixuser.org>
;; Keywords: vCard, MIME, multimedia, mail, news
;; This file is part of SEMI (Sample of Elastic MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Commentary:
;;
;;; Code:
;; bbdb-vcard-vcard21.el is available in MELPA's bbdb-vcard package.
(require 'bbdb-vcard-vcard21)
(defvar mime-display-text/vcard-hook nil)
(defun mime-display-text/vcard (entity _situation)
(save-restriction
(narrow-to-region (point-max)(point-max))
(insert
(string-as-multibyte
(vcard-pretty-print
(vcard-parse-string
(mime-entity-content entity)
#'vcard-standard-filter))))
(if (/= (preceding-char) ?\n)
(insert "\n"))
(mime-add-url-buttons)
(run-hooks 'mime-display-text/vcard-hook)))
(provide 'mime-vcard)
;;; mime-vcard.el ends here
0707010000001B000081A4000003E80000006400000001627140E500011A29000000000000000000000000000000000000002B00000000semi-1.14.6+239+gb1c245b81715/mime-view.el;;; mime-view.el --- interactive MIME viewer for GNU Emacs -*- lexical-binding: t -*-
;; Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc.
;; Author: MORIOKA Tomohiko <tomo@m17n.org>
;; Created: 1994/07/13
;; Renamed: 1994/08/31 from tm-body.el
;; Renamed: 1997/02/19 from tm-view.el
;; Keywords: MIME, multimedia, mail, news
;; This file is part of SEMI (Sample of Elastic MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Code:
(require 'mime)
(require 'semi-def)
(require 'calist)
(require 'alist)
(require 'mime-conf)
(require 'path-util)
(eval-when-compile (require 'static))
;;; @ version
;;;
(defconst mime-view-version
(concat (mime-product-name mime-user-interface-product) " MIME-View "
(mapconcat #'number-to-string
(mime-product-version mime-user-interface-product) ".")
" (" (mime-product-code-name mime-user-interface-product) ")"))
;;; @ variables
;;;
(defgroup mime-view nil
"MIME view mode"
:group 'mime)
(defcustom mime-situation-examples-file "~/.mime-example"
"*File name of situation-examples demonstrated by user."
:group 'mime-view
:type 'file)
(defcustom mime-preview-move-scroll nil
"*Decides whether to scroll when moving to next entity.
When t, scroll the buffer. Non-nil but not t means scroll when
the next entity is within next-screen-context-lines from top or
buttom. Nil means don't scroll at all."
:group 'mime-view
:type '(choice (const :tag "Off" nil)
(const :tag "On" t)
(sexp :tag "Situation" 1)))
(defcustom mime-view-mailcap-files
'("~/.mailcap" "/usr/etc/mailcap" "/etc/mailcap")
"List of mailcap files."
:group 'mime-view
:type '(repeat file))
(defcustom mime-view-buttons-visible t
"Toggle visibility of MIME buttons."
:group 'mime-view
:type 'boolean)
(defcustom mime-view-nobreak-char-display nil
"Override `nobreak-char-display' in preview buffer.
See `nobreak-char-display' for details."
:type '(choice (const :tag "Use harcoded face" t)
(const :tag "Use escape glyph" 'escape)
(const :tag "No special handling" nil))
:group 'mime-view)
(defcustom mime-view-multipart/related-show-all-children t
"When non-nil, do not hide child entities."
:group 'mime-view
:type 'boolean)
(defcustom mime-view-multipart/alternative-show-all-children t
"When non-nil, show hidden descendant entities's buttons in
multipart/alternative entities."
:group 'mime-view
:type 'boolean)
(defvar mime-display-multipart/multilingual-unknown-translation-type
"(unknown)")
(defcustom mime-display-multipart/multilingual-prefered-languages
(mapcar (lambda (lang)
(format "^%s\\(-.+\\)?" (regexp-quote (symbol-name lang))))
(let ((result (get-language-info
current-language-environment 'iso639-language)))
(if (eq result 'en)
(list result)
(cons result '(en)))))
"Specify language automatically choiced for
multipart/multilingual entities. See docstring of
`mime-display-multipart/multilingual' for details."
:group 'mime-view
:type '(repeat regexp))
(defcustom mime-display-multipart/multilingual-translation-type-score
`(("original" . 2)
("human" . 1)
("automated" . -1)
(,mime-display-multipart/multilingual-unknown-translation-type . 0))
"Specify scores Content-Translation-Type: header fields. When
score is negative value, corresponding entity is not displayed
automatically. If field calue is missing or field does not
exist, field value is treated as \"(unknown)\". See docstring of
`mime-display-multipart/multilingual' for details."
:group 'mime-view
:type '(repeat (cons string integer)))
(defcustom mime-display-multipart/multilingual-interactive nil
"When non-nil, you are asked which language entity should be
displayed for multipart/multilingual entity."
:group 'mime-view
:type 'boolean)
(defcustom mime-view-text/html-score 3
"Score for text/html entity when previewer is available."
:group 'mime-view
:type 'integer)
(defcustom mime-view-text/html-previewer-alist
(delq nil `((w3m mime-w3m-preview-text/html mime-w3m)
,(and (fboundp 'libxml-parse-html-region)
'(shr mime-shr-preview-text/html mime-shr))
(w3 mime-preview-text/html mime-w3)))
"Alist for text/html entity previewer.
Each element is a list consists of required module, previewer
function and required feature for previewer function."
:group 'mime-view
:type '(repeat (list (symbol :tag "Module")
(symbol :tag "Function")
(symbol :tag "Feature"))))
(defcustom mime-view-text/html-previewer
(let ((alist mime-view-text/html-previewer-alist))
(while (and alist (null (module-installed-p (caar alist))))
(setq alist (cdr alist)))
(caar alist))
"Indicate text/html entity previewer. Possible vaules are each
car of `mime-view-text/html-previewer-alist' element or nil.
When this value is nil or previewer is not available, text/html
entity is displayed as if text/plain part."
:group 'mime-view
:type `(choice ,@(mapcar (lambda (elt) (list 'const (car elt)))
mime-view-text/html-previewer-alist)
(const :tag "Disable previewer" nil)))
(defcustom mime-display-text/plain-flowed-fill-column nil
"Fill column for formatting flowed text."
:group 'mime-view
:type '(choice (integer :tag "Fixed value")
(number :tag "ratio to window's width")
(sexp :tag "S-expression")
(const nil :tag "Use fill-column's value")))
(defcustom mime-pgp-verify-when-preview t
"When non-nil, verify signed part while viewing."
:group 'mime-view
:type 'boolean)
(defcustom mime-pgp-decrypt-when-preview nil
"When non-nil, decrypt encrypted part while viewing."
:group 'mime-view
:type 'boolean)
;;; @ in raw-buffer (representation space)
;;;
(defvar mime-preview-buffer nil
"MIME-preview buffer corresponding with the (raw) buffer.")
(make-variable-buffer-local 'mime-preview-buffer)
(defvar mime-raw-representation-type-alist
'((mime-show-message-mode . binary)
(mime-temp-message-mode . binary)
(t . cooked))
"Alist of major-mode vs. representation-type of mime-raw-buffer.
Each element looks like (SYMBOL . REPRESENTATION-TYPE). SYMBOL is
major-mode or t. t means default. REPRESENTATION-TYPE must be
`binary' or `cooked'.")
;;; @ in preview-buffer (presentation space)
;;;
(defvar mime-mother-buffer nil
"Mother buffer corresponding with the (MIME-preview) buffer.
If current MIME-preview buffer is generated by other buffer, such as
message/partial, it is called `mother-buffer'.")
(make-variable-buffer-local 'mime-mother-buffer)
;; (defvar mime-raw-buffer nil
;; "Raw buffer corresponding with the (MIME-preview) buffer.")
;; (make-variable-buffer-local 'mime-raw-buffer)
(defvar mime-preview-original-window-configuration nil
"Window-configuration before mime-view-mode is called.")
(make-variable-buffer-local 'mime-preview-original-window-configuration)
(defun mime-preview-original-major-mode (&optional recursive point)
"Return major-mode of original buffer.
If optional argument RECURSIVE is non-nil and current buffer has
mime-mother-buffer, it returns original major-mode of the
mother-buffer."
(if (and recursive mime-mother-buffer)
(with-current-buffer mime-mother-buffer
(mime-preview-original-major-mode recursive))
(cdr (assq 'major-mode
(get-text-property (or point
(if (> (point) (buffer-size))
(max (1- (point-max)) (point-min))
(point)))
'mime-view-situation)))))
;;; @ entity information
;;;
(defun mime-entity-situation (entity &optional situation)
"Return situation of ENTITY."
(let (rest param name)
;; Content-Type
(unless (assq 'type situation)
(setq rest (or (mime-entity-content-type entity)
(make-mime-content-type 'text 'plain))
situation (cons (car rest) situation)
rest (cdr rest)))
(unless (assq 'subtype situation)
(or rest
(setq rest (or (cdr (mime-entity-content-type entity))
'((subtype . plain)))))
(setq situation (cons (car rest) situation)
rest (cdr rest)))
(while rest
(setq param (car rest))
(or (assoc (car param) situation)
(setq situation (cons param situation)))
(setq rest (cdr rest)))
;; Content-Disposition
(setq rest nil)
(unless (assq 'disposition-type situation)
(setq rest (mime-entity-content-disposition entity))
(if rest
(setq situation (cons (cons 'disposition-type
(mime-content-disposition-type rest))
situation)
rest (mime-content-disposition-parameters rest))))
(while rest
(setq param (car rest)
name (car param))
(if (cond ((string= name "filename")
(if (assq 'filename situation)
nil
(setq name 'filename)))
((string= name "creation-date")
(if (assq 'creation-date situation)
nil
(setq name 'creation-date)))
((string= name "modification-date")
(if (assq 'modification-date situation)
nil
(setq name 'modification-date)))
((string= name "read-date")
(if (assq 'read-date situation)
nil
(setq name 'read-date)))
((string= name "size")
(if (assq 'size situation)
nil
(setq name 'size)))
(t (setq name (cons 'disposition name))
(if (assoc name situation)
nil
name)))
(setq situation
(cons (cons name (cdr param))
situation)))
(setq rest (cdr rest)))
;; Content-Transfer-Encoding
(or (assq 'encoding situation)
(setq situation
(cons (cons 'encoding (or (mime-entity-encoding entity)
"7bit"))
situation)))
situation))
(defsubst mime-delq-null-situation (situations field
&rest ignored-values)
(let (dest)
(while situations
(let* ((situation (car situations))
(cell (assq field situation)))
(if cell
(or (memq (cdr cell) ignored-values)
(setq dest (cons situation dest)))))
(setq situations (cdr situations)))
dest))
(defun mime-compare-situation-with-example (situation example)
(let ((example (copy-alist example))
(match 0))
(while situation
(let* ((cell (car situation))
(key (car cell))
(ecell (assoc key example)))
(when ecell
(if (equal cell ecell)
(setq match (1+ match))
(setq example (delq ecell example)))))
(setq situation (cdr situation)))
(cons match example)))
(defun mime-sort-situation (situation)
(sort situation
#'(lambda (a b)
(let ((a-t (car a))
(b-t (car b))
(order '((type . 1)
(subtype . 2)
(mode . 3)
(method . 4)
(major-mode . 5)
(disposition-type . 6)))
a-order b-order)
(if (symbolp a-t)
(let ((ret (assq a-t order)))
(if ret
(setq a-order (cdr ret))
(setq a-order 7)))
(setq a-order 8))
(if (symbolp b-t)
(let ((ret (assq b-t order)))
(if ret
(setq b-order (cdr ret))
(setq b-order 7)))
(setq b-order 8))
(if (= a-order b-order)
(string< (format "%s" a-t)(format "%s" b-t))
(< a-order b-order))))))
(defun mime-unify-situations (entity-situation
condition situation-examples
&optional required-name ignored-value
every-situations)
(let (ret)
(in-calist-package 'mime-view)
(setq ret
(ctree-find-calist condition entity-situation
every-situations))
(if required-name
(setq ret (mime-delq-null-situation ret required-name
ignored-value t)))
(or (assq 'ignore-examples entity-situation)
(if (cdr ret)
(let ((rest ret)
(max-score 0)
(max-escore 0)
max-examples
max-situations)
(while rest
(let ((situation (car rest))
(examples situation-examples))
(while examples
(let* ((ret
(mime-compare-situation-with-example
situation (caar examples)))
(ret-score (car ret)))
(cond ((> ret-score max-score)
(setq max-score ret-score
max-escore (cdar examples)
max-examples (list (cdr ret))
max-situations (list situation)))
((= ret-score max-score)
(cond ((> (cdar examples) max-escore)
(setq max-escore (cdar examples)
max-examples (list (cdr ret))
max-situations (list situation)))
((= (cdar examples) max-escore)
(setq max-examples
(cons (cdr ret) max-examples))
(or (member situation max-situations)
(setq max-situations
(cons situation max-situations))))))))
(setq examples (cdr examples))))
(setq rest (cdr rest)))
(when max-situations
(setq ret max-situations)
(while max-examples
(let* ((example (car max-examples))
(cell
(assoc example situation-examples)))
(if cell
(setcdr cell (1+ (cdr cell)))
(setq situation-examples
(cons (cons example 0)
situation-examples))))
(setq max-examples (cdr max-examples)))))))
(cons ret situation-examples)
;; ret: list of situations
;; situation-examples: new examples (notoce that contents of
;; argument `situation-examples' has bees modified)
))
(defun mime-view-entity-title (entity)
(or (mime-entity-read-field entity 'Content-Description)
(mime-entity-filename entity)
(mime-entity-read-field entity 'Subject)
""))
(defvar mime-preview-situation-example-list nil)
(defvar mime-preview-situation-example-list-max-size 16)
;; (defvar mime-preview-situation-example-condition nil)
(defvar mime-preview-condition nil
"Condition-tree about how to display entity.")
(defun mime-find-entity-preview-situation (entity
&optional default-situation)
(or (let ((ret
(mime-unify-situations
(append (mime-entity-situation entity)
default-situation)
mime-preview-condition
mime-preview-situation-example-list)))
(setq mime-preview-situation-example-list
(cdr ret))
(caar ret))
default-situation))
(defvar mime-acting-situation-example-list nil)
(defvar mime-acting-situation-example-list-max-size 16)
(defvar mime-situation-examples-file-coding-system nil)
(defun mime-view-read-situation-examples-file (&optional file)
(or file
(setq file mime-situation-examples-file))
(if (and file
(file-readable-p file))
(with-temp-buffer
(insert-file-contents file)
(setq mime-situation-examples-file-coding-system
buffer-file-coding-system)
(condition-case error
(eval-buffer)
(error (message "%s is broken: %s" file (cdr error))))
;; format check
(condition-case nil
(let ((i 0))
(while (and (> (length mime-preview-situation-example-list)
mime-preview-situation-example-list-max-size)
(< i 16))
(setq mime-preview-situation-example-list
(mime-reduce-situation-examples
mime-preview-situation-example-list))
(setq i (1+ i))))
(error (setq mime-preview-situation-example-list nil)))
;; (let ((rest mime-preview-situation-example-list))
;; (while rest
;; (ctree-set-calist-strictly 'mime-preview-condition
;; (caar rest))
;; (setq rest (cdr rest))))
(condition-case nil
(let ((i 0))
(while (and (> (length mime-acting-situation-example-list)
mime-acting-situation-example-list-max-size)
(< i 16))
(setq mime-acting-situation-example-list
(mime-reduce-situation-examples
mime-acting-situation-example-list))
(setq i (1+ i))))
(error (setq mime-acting-situation-example-list nil))))))
(defun mime-save-situation-examples ()
(if (or mime-preview-situation-example-list
mime-acting-situation-example-list)
(let ((file mime-situation-examples-file)
print-length print-level)
(when file
(with-temp-buffer
(insert ";;; " (file-name-nondirectory file) "\n")
(insert "\n;; This file is generated automatically by "
mime-view-version "\n\n")
(insert ";;; Code:\n\n")
(if mime-preview-situation-example-list
(pp `(setq mime-preview-situation-example-list
',mime-preview-situation-example-list)
(current-buffer)))
(if mime-acting-situation-example-list
(pp `(setq mime-acting-situation-example-list
',mime-acting-situation-example-list)
(current-buffer)))
(insert "\n;;; "
(file-name-nondirectory file)
" ends here.\n")
(setq buffer-file-coding-system
mime-situation-examples-file-coding-system)
(setq buffer-file-name file)
(save-buffer))))))
(add-hook 'kill-emacs-hook 'mime-save-situation-examples)
(defun mime-reduce-situation-examples (situation-examples)
(let ((len (length situation-examples))
i ir ic j jr jc ret
dest d-i d-j
(max-sim 0) sim
min-det-ret det-ret
min-det-org det-org
min-freq freq)
(setq i 0
ir situation-examples)
(while (< i len)
(setq ic (car ir)
j 0
jr situation-examples)
(while (< j len)
(unless (= i j)
(setq jc (car jr))
(setq ret (mime-compare-situation-with-example (car ic)(car jc))
sim (car ret)
det-ret (+ (length (car ic))(length (car jc)))
det-org (length (cdr ret))
freq (+ (cdr ic)(cdr jc)))
(cond ((< max-sim sim)
(setq max-sim sim
min-det-ret det-ret
min-det-org det-org
min-freq freq
d-i i
d-j j
dest (cons (cdr ret) freq)))
((= max-sim sim)
(cond ((> min-det-ret det-ret)
(setq min-det-ret det-ret
min-det-org det-org
min-freq freq
d-i i
d-j j
dest (cons (cdr ret) freq)))
((= min-det-ret det-ret)
(cond ((> min-det-org det-org)
(setq min-det-org det-org
min-freq freq
d-i i
d-j j
dest (cons (cdr ret) freq)))
((= min-det-org det-org)
(cond ((> min-freq freq)
(setq min-freq freq
d-i i
d-j j
dest (cons (cdr ret) freq)))))))))))
(setq jr (cdr jr)
j (1+ j)))
(setq ir (cdr ir)
i (1+ i)))
(if (> d-i d-j)
(setq i d-i
d-i d-j
d-j i))
(setq jr (nthcdr (1- d-j) situation-examples))
(setcdr jr (cddr jr))
(if (= d-i 0)
(setq situation-examples
(cdr situation-examples))
(setq ir (nthcdr (1- d-i) situation-examples))
(setcdr ir (cddr ir)))
(if (setq ir (assoc (car dest) situation-examples))
(progn
(setcdr ir (+ (cdr ir)(cdr dest)))
situation-examples)
(cons dest situation-examples)
;; situation-examples may be modified.
)))
;;; @ presentation of preview
;;;
;;; @@ entity-button
;;;
;;; @@@ predicate function
;;;
;; (defun mime-view-entity-button-visible-p (entity)
;; "Return non-nil if header of ENTITY is visible.
;; Please redefine this function if you want to change default setting."
;; (let ((media-type (mime-entity-media-type entity))
;; (media-subtype (mime-entity-media-subtype entity)))
;; (or (not (eq media-type 'application))
;; (and (not (eq media-subtype 'x-selection))
;; (or (not (eq media-subtype 'octet-stream))
;; (let ((mother-entity (mime-entity-parent entity)))
;; (or (not (eq (mime-entity-media-type mother-entity)
;; 'multipart))
;; (not (eq (mime-entity-media-subtype mother-entity)
;; 'encrypted)))
;; )
;; )))))
;;; @@@ entity button generator
;;;
(defun mime-view-insert-entity-button (entity)
"Insert entity-button of ENTITY."
(let ((entity-node-id (mime-entity-node-id entity))
(params (mime-entity-parameters entity))
(subject (mime-view-entity-title entity)))
(mime-insert-button
(let ((access-type (assoc "access-type" params))
(num (or (cdr (assoc "x-part-number" params))
(if (consp entity-node-id)
(mapconcat (function
(lambda (num)
(format "%s" (1+ num))))
(reverse entity-node-id) ".")
"0"))))
(cond (access-type
(let ((server (assoc "server" params)))
(setq access-type (cdr access-type))
(if server
(format "%s %s ([%s] %s)"
num subject access-type (cdr server))
(let ((site (cdr (assoc "site" params)))
(dir (cdr (assoc "directory" params)))
(url (cdr (assoc "url" params))))
(if url
(format "%s %s ([%s] %s)"
num subject access-type url)
(format "%s %s ([%s] %s:%s)"
num subject access-type site dir))))))
(t
(let* ((charset (cdr (assoc "charset" params)))
(encoding (mime-entity-encoding entity))
(language (mime-entity-read-field
entity "Content-Language"))
(rest (format " <%s/%s%s%s%s>"
(mime-entity-media-type entity)
(mime-entity-media-subtype entity)
(if language
(concat " (" language ")")
"")
(if charset
(concat "; " charset)
"")
(if encoding
(concat " (" encoding ")")
""))))
(concat
num " " subject
(if (>= (+ (current-column)(length rest))(window-width))
"\n\t")
rest)))))
(function mime-preview-play-current-entity))))
;;; @@ entity-header
;;;
(defvar mime-header-presentation-method-alist nil
"Alist of major mode vs. corresponding header-presentation-method functions.
Each element looks like (SYMBOL . FUNCTION).
SYMBOL must be major mode in raw-buffer or t. t means default.
Interface of FUNCTION must be (ENTITY SITUATION).")
(defvar mime-view-ignored-field-list
'(".*Received:" ".*Path:" ".*Id:" "^References:"
"^Replied:" "^Errors-To:"
"^Lines:" "^Sender:" ".*Host:" "^Xref:"
"^Content-Type:" "^Precedence:"
"^Status:" "^X-VM-.*:")
"All fields that match this list will be hidden in MIME preview buffer.
Each elements are regexp of field-name.")
(defvar mime-view-visible-field-list '("^Dnas.*:" "^Message-Id:")
"All fields that match this list will be displayed in MIME preview buffer.
Each elements are regexp of field-name.")
;;; @@ entity-body
;;;
;;; @@@ predicate function
;;;
(in-calist-package 'mime-view)
(defun mime-calist::field-match-method-as-default-rule (calist
field-type field-value)
(let ((s-field (assq field-type calist)))
(cond ((null s-field)
(cons (cons field-type field-value) calist))
(t calist))))
(define-calist-field-match-method
'header #'mime-calist::field-match-method-as-default-rule)
(define-calist-field-match-method
'body #'mime-calist::field-match-method-as-default-rule)
(defun mime-calist::field-match-method-ignore-case (calist
field-type field-value)
(let ((s-field (assoc field-type calist)))
(cond ((null s-field)
(cons (cons field-type field-value) calist))
((eq field-value t)
calist)
((string= (downcase (cdr s-field)) (downcase field-value))
calist))))
(define-calist-field-match-method
'access-type #'mime-calist::field-match-method-ignore-case)
(ctree-set-calist-strictly
'mime-preview-condition '((type . application)(subtype . octet-stream)
(encoding . nil)
(body . visible)))
(ctree-set-calist-strictly
'mime-preview-condition '((type . application)(subtype . octet-stream)
(encoding . "7bit")
(body . visible)))
(ctree-set-calist-strictly
'mime-preview-condition '((type . application)(subtype . octet-stream)
(encoding . "8bit")
(body . visible)))
(ctree-set-calist-strictly
'mime-preview-condition '((type . application)(subtype . pgp)
(body . visible)))
(ctree-set-calist-strictly
'mime-preview-condition '((type . application)(subtype . x-latex)
(body . visible)))
(ctree-set-calist-strictly
'mime-preview-condition '((type . application)(subtype . x-selection)
(body . visible)))
(ctree-set-calist-strictly
'mime-preview-condition '((type . application)(subtype . x-comment)
(body . visible)))
(ctree-set-calist-strictly
'mime-preview-condition '((type . message)(subtype . delivery-status)
(body . visible)))
(ctree-set-calist-strictly
'mime-preview-condition
'((body . visible)
(body-presentation-method . mime-display-text/plain)))
(ctree-set-calist-strictly
'mime-preview-condition
'((type . nil)
(body . visible)
(body-presentation-method . mime-display-text/plain)))
(ctree-set-calist-strictly
'mime-preview-condition
'((type . text)(subtype . enriched)
(body . visible)
(body-presentation-method . mime-display-text/enriched)))
(ctree-set-calist-strictly
'mime-preview-condition
'((type . text)(subtype . richtext)
(body . visible)
(body-presentation-method . mime-display-text/richtext)))
(ctree-set-calist-strictly
'mime-preview-condition
'((type . text)(subtype . html)
(body . visible)
(body-presentation-method . mime-display-text/html)))
(autoload 'mime-display-application/x-postpet "postpet")
(ctree-set-calist-strictly
'mime-preview-condition
'((type . application)(subtype . x-postpet)
(body . visible)
(body-presentation-method . mime-display-application/x-postpet)))
(ctree-set-calist-strictly
'mime-preview-condition
'((type . text)(subtype . t)
(body . visible)
(body-presentation-method . mime-display-text/plain)))
(ctree-set-calist-strictly
'mime-preview-condition
'((type . multipart)(subtype . alternative)
(body . visible)
(body-presentation-method . mime-display-multipart/alternative)))
(ctree-set-calist-strictly
'mime-preview-condition
'((type . multipart)(subtype . related)
(body . visible)
(body-presentation-method . mime-display-multipart/related)))
(ctree-set-calist-strictly
'mime-preview-condition
'((type . multipart)(subtype . multilingual)
(body . visible)
(body-presentation-method . mime-display-multipart/multilingual)))
(ctree-set-calist-strictly
'mime-preview-condition
'((type . multipart)(subtype . t)
(body . visible)
(body-presentation-method . mime-display-multipart/mixed)))
(ctree-set-calist-strictly
'mime-preview-condition
'((type . message)(subtype . partial)
(body . visible)
(body-presentation-method . mime-display-message/partial-button)))
(ctree-set-calist-strictly
'mime-preview-condition
'((type . message)(subtype . rfc822)
(body . visible)
(body-presentation-method . mime-display-message/rfc822)
(childrens-situation (header . visible))))
(ctree-set-calist-strictly
'mime-preview-condition
'((type . message)(subtype . news)
(body . visible)
(body-presentation-method . mime-display-message/rfc822)
(childrens-situation (header . visible))))
;;; @@@ entity presentation
;;;
(defun mime-display-insert-text-content (entity)
(condition-case signal
(progn (mime-insert-text-content entity)
(run-hooks 'mime-text-decode-hook)
t)
(error (let ((point (point)))
(insert (format "This entity can't be decoded. %s"
(or (cadr signal) "")))
(add-text-properties point (point) '(face highlight)))
(insert "\nHere is original data.\n\n")
(mime-insert-entity-body entity)
nil)))
(defun mime-display-text/plain-flowed-parse-line ()
(cons (point)
(cond
;; End of buffer
((eobp) nil)
;; Signature separator line
((looking-at "\\(>+\\)? ?\\(-- \\)$")
(list (length (match-string 1)) 'hard (match-beginning 2)))
;; Quoted line
((looking-at "\\(>+\\) ?\\(.*?\\)\\( ?\\)$")
(list (length (match-string 1))
(if (zerop (length (match-string 3))) t nil)
(match-beginning 2)))
;; Stuffed or normal line
((looking-at " ?\\(.*?\\)\\( ?\\)$")
(list 0 (if (zerop (length (match-string 2))) t nil)
(match-beginning 1))))))
(defun mime-display-text/plain-flowed (&optional buffer delete-space)
(with-current-buffer (or buffer (current-buffer))
(goto-char (point-min))
(let ((fill-column
(cond
((and (integerp mime-display-text/plain-flowed-fill-column)
(< mime-display-text/plain-flowed-fill-column 1))
(+ (window-width) mime-display-text/plain-flowed-fill-column))
((integerp mime-display-text/plain-flowed-fill-column)
mime-display-text/plain-flowed-fill-column)
((numberp mime-display-text/plain-flowed-fill-column)
(floor
(* (window-width) mime-display-text/plain-flowed-fill-column)))
(mime-display-text/plain-flowed-fill-column
(eval mime-display-text/plain-flowed-fill-column))
(t fill-column)))
(line (mime-display-text/plain-flowed-parse-line))
beg-flow depth next point fill-prefix adaptive-fill-mode)
(setq delete-space (if delete-space -2 -1))
(while (cdr line)
(unless (eq (point) (car line))
(setcar (cdr (cddr line)) (+ (nth 3 line) (- (point) (car line))))
(setcar line (point)))
(forward-line)
(setq next (mime-display-text/plain-flowed-parse-line))
(when (or (null (cdr next))
(null (eq (nth 1 line) (nth 1 next)))
(eq (nth 2 next) 'hard))
(setcar (cddr line) t))
(if beg-flow
;; Following flowed line.
(progn
(delete-region (+ (car line) delete-space) (nth 3 line))
(when (nth 2 line)
;; Fixed line
(setq fill-prefix (unless (zerop depth)
(concat (make-string depth ?>) " ")))
(fill-region beg-flow (point) 'left t)
(setq beg-flow nil)))
;; Following fixed line.
(if (zerop (nth 1 line))
;; Remove stuffed space
(delete-region (car line) (nth 3 line))
(when (eq (+ (car line) (nth 1 line)) (nth 3 line))
;; Insert stuffing space for quoted text
(setq point (point))
(goto-char (nth 3 line))
(insert 32)
(goto-char (1+ point))))
(unless (nth 2 line)
;; Beginnig of flowed text
(setq beg-flow (car line)
depth (nth 1 line))))
(setq line next)))))
(defun mime-display-text/plain (entity situation)
(save-restriction
(narrow-to-region (point-max)(point-max))
(when (mime-display-insert-text-content entity)
(when (null (eq (char-before (point-max)) ?\n))
(goto-char (point-max))
(insert "\n"))
(when (equal (downcase (or (cdr (assoc "format" situation)) ""))
"flowed")
(mime-display-text/plain-flowed
nil (equal (downcase (or (cdr (assoc "delsp" situation)) ""))
"yes")))
(mime-add-url-buttons)
(run-hooks 'mime-display-text/plain-hook))))
(autoload 'richtext-decode "richtext")
(defun mime-display-text/richtext (entity _situation)
(save-restriction
(narrow-to-region (point-max)(point-max))
(when (mime-display-insert-text-content entity)
(remove-text-properties (point-min) (point-max) '(face nil))
(richtext-decode (point-min) (point-max)))))
(defun mime-display-text/enriched (entity _situation)
(save-restriction
(narrow-to-region (point-max)(point-max))
(when (mime-display-insert-text-content entity)
(remove-text-properties (point-min) (point-max) '(face nil))
(enriched-decode (point-min) (point-max)))))
(defun mime-display-text/html-previewer-params ()
(and mime-view-text/html-previewer
(or (assq mime-view-text/html-previewer
mime-view-text/html-previewer-alist)
;; For compatibility with mime-setup-enable-inline-html.
(assq 'w3 mime-view-text/html-previewer-alist))))
(defun mime-display-text/html (entity situation)
(let ((list (mime-display-text/html-previewer-params)))
(if (and list
(require (nth 2 list) nil t)
(fboundp (nth 1 list)))
(funcall (nth 1 list) entity situation)
;; text/html entity previewer is not available.
(mime-display-text/plain entity situation))))
(defvar mime-view-announcement-for-message/partial
(when window-system
"\
\[[ This is message/partial style split message. ]]
\[[ Please press `v' key in this buffer ]]
\[[ or click here by mouse button-2. ]]"
"\
\[[ This is message/partial style split message. ]]
\[[ Please press `v' key in this buffer. ]]"))
(defun mime-display-message/partial-button (&optional _entity _situation)
(save-restriction
(goto-char (point-max))
(if (not (search-backward "\n\n" nil t))
(insert "\n"))
(goto-char (point-max))
(narrow-to-region (point-max)(point-max))
(insert mime-view-announcement-for-message/partial)
(mime-add-button (point-min)(point-max)
#'mime-preview-play-current-entity)))
(defun mime-display-message/rfc822 (entity situation)
(let ((child (car (mime-entity-children entity)))
(default-situation
(copy-alist
(delq nil (cons (assq 'major-mode situation)
(cdr (assq 'childrens-situation situation)))))))
(mime-display-entity
child nil
(if (memq (mime-entity-media-type child)
'(text multipart nil))
(put-alist 'entity-button 'invisible default-situation)
(put-alist 'button-position 'after default-situation)))))
(defun mime-display-multipart/mixed (entity situation)
(let ((children (mime-entity-children entity))
(original-major-mode-cell (assq 'major-mode situation))
(default-situation
(cdr (assq 'childrens-situation situation))))
(if original-major-mode-cell
(setq default-situation
(cons original-major-mode-cell default-situation)))
(while children
(mime-display-entity (car children) nil default-situation)
(setq children (cdr children)))))
(defvar mime-view-entity-lowest-score -1)
(defcustom mime-view-type-subtype-score-alist
'(((text . enriched) . 3)
((text . richtext) . 2)
((text . plain) . 1)
((text . html) . mime-view-text/html-entity-score)
(multipart . mime-view-multipart-entity-score))
"Alist MEDIA-TYPE vs corresponding score.
MEDIA-TYPE must be (TYPE . SUBTYPE), TYPE or t. t means default.
If MEDIA-TYPE does not have corresponding score,
`mime-view-entity-lowest-score' is used.
Score is integer or function or variable. The function receives
entity and returns integer."
:group 'mime-view
:type '(repeat (cons (choice :tag "Media-Type"
(cons :tag "Type/Subtype"
(symbol :tag "Primary-type")
(symbol :tag "Subtype"))
(symbol :tag "Type")
(const :tag "Default" t))
(choice (integer :tag "score")
(function :tag "function")
(variable :tag "variable")))))
(defun mime-view-entity-score (entity &optional situation)
(or situation (setq situation (mime-entity-situation entity)))
(let ((score
(cdr
(or (assoc (cons (cdr (assq 'type situation))
(cdr (assq 'subtype situation)))
mime-view-type-subtype-score-alist)
(assq (cdr (assq 'type situation))
mime-view-type-subtype-score-alist)
(assq t mime-view-type-subtype-score-alist)))))
(cond
((functionp score)
(setq score (funcall score entity)))
((and (symbolp score) (boundp score))
(setq score (symbol-value score))))
(if (numberp score)
score
mime-view-entity-lowest-score)))
(defun mime-view-multipart-entity-score (entity)
(apply 'max (or (mapcar 'mime-view-entity-score
(mime-entity-children entity))
(list (or (assq t mime-view-type-subtype-score-alist)
mime-view-entity-lowest-score)))))
(defun mime-view-text/html-entity-score (_entity)
;; Module loading is done in mime-display-text/html.
;; So, availability is not checked here.
(if (mime-display-text/html-previewer-params)
mime-view-text/html-score
mime-view-entity-lowest-score))
(defun mime-view-multipart-descendant-button (entity situation)
(let ((default-situation
(delq nil (cons (assq 'major-mode situation)
(cdr (assq 'childrens-situation situation))))))
(mapc
(lambda (child)
(setq situation (copy-alist (mime-find-entity-preview-situation
child default-situation)))
(mime-display-entity
child nil (if (eq (cdr (assq 'type situation)) 'multipart)
(put-alist 'body-presentation-method
'mime-view-multipart-descendant-button
situation)
(put-alist 'body 'invisible situation))))
(mime-entity-children entity))))
(defun mime-display-multipart/alternative (entity situation)
(let ((original-major-mode-cell (assq 'major-mode situation))
(default-situation
(cdr (assq 'childrens-situation situation)))
(max-score 0)
p pairs
child-situation score)
(when original-major-mode-cell
(setq default-situation
(cons original-major-mode-cell default-situation)))
(setq pairs
(mapcar
(lambda (child)
(setq child-situation
(mime-find-entity-preview-situation
child default-situation))
(when (cdr (assq 'body-presentation-method child-situation))
(setq score (mime-view-entity-score child child-situation))
(when (>= score max-score)
(setq p child
max-score score)))
(cons child child-situation))
(mime-entity-children entity)))
(or p (setq p (caar pairs)))
(mapc (lambda (pair)
(mime-display-entity
(car pair) nil
(cond
((eq p (car pair))
(cdr pair))
((and mime-view-multipart/alternative-show-all-children
(eq (cdr (assq 'type (cdr pair))) 'multipart))
(put-alist 'body-presentation-method
'mime-view-multipart-descendant-button
(copy-alist (cdr pair))))
(t (put-alist 'body 'invisible (copy-alist (cdr pair)))))))
pairs)))
(defun mime-display-multipart/related (entity situation)
(let* ((param-start (mime-parse-msg-id
(std11-lexical-analyze
(cdr (assoc "start"
(mime-content-type-parameters
(mime-entity-content-type entity)))))))
(start (or (and param-start (mime-find-entity-from-content-id
param-start
entity))
(car (mime-entity-children entity))))
(original-major-mode-cell (assq 'major-mode situation))
(default-situation (cdr (assq 'childrens-situation situation))))
(if original-major-mode-cell
(setq default-situation
(cons original-major-mode-cell default-situation)))
(mapc
(lambda (child)
(cond
((eq start child)
(mime-display-entity start nil default-situation))
(mime-view-multipart/related-show-all-children
(let ((child-situation (copy-alist (mime-find-entity-preview-situation
child default-situation))))
(mime-display-entity
child nil
(if (eq (mime-entity-media-type child) 'multipart)
(put-alist 'body-presentation-method
'mime-view-multipart-descendant-button
child-situation)
(put-alist 'body 'invisible child-situation)))))))
(mime-entity-children entity))))
(defun mime-display-multipart/multilingual-select-interactively (pairs)
(let (count counts result elt)
(setq pairs
(dolist (pair pairs (nreverse result))
(when (caar pair)
(setq elt (format "%s/%s"
(or (caar pair) "")
(or (cdar pair)
mime-display-multipart/multilingual-unknown-translation-type)))
(if (setq count (assoc elt counts))
(setq elt
(format "%s:%d" elt (setcdr count (1+ (cdr count)))))
(setq counts (cons (cons elt 1) counts)))
(setq result (cons (cons elt (cdr pair)) result)))))
(when (> (length pairs) 0)
(cdr (assoc
(completing-read
"Which language is displayed for this multilingual message? "
(mapcar 'car pairs) nil t nil nil (caar pairs))
pairs)))))
(defun mime-display-multipart/multilingual-select-automatically (pairs)
(let ((max-score '(0 . 0))
(case-fold-search t)
score choice first zxx)
(dolist (pair pairs)
(when (caar pair)
(unless first
;; The first language message part
(setq first (cdr pair)))
(when (string-match "^zxx$" (caar pair))
;; The language-independent message part
(setq zxx (cdr pair)))
(setq score
(cons
(let ((langs
mime-display-multipart/multilingual-prefered-languages))
(catch 'done
(while langs
(when (string-match (car langs) (caar pair))
(throw 'done (length langs)))
(setq langs (cdr langs)))
-1))
(or
(cdr
(assoc
(or (cdar pair)
mime-display-multipart/multilingual-unknown-translation-type)
mime-display-multipart/multilingual-translation-type-score))
-1)))
(when (or (> (cdr score) (cdr max-score))
(and (eq (cdr score) (cdr max-score))
(> (car score) (car max-score))))
(setq max-score score)
(setq choice (cdr pair)))))
(or choice zxx first)))
(defun mime-display-multipart/multilingual (entity situation)
"MIME-View mode preview method for multipart/multilingual entity.
When `mime-display-multipart/multilingual-interactive' is nil,
select child entity to display automatically.
Automatic selection algorithm is below.
1. Select highest score entity calculated from
Content-Translation-Type: field and
`mime-display-multipart/multilingual-translation-type-score'.
But if score is negative, never selected.
2. If there are multiple highest score entities, select entities
whose Content-Language: field values matches former element of
`mime-display-multipart/multilingual-prefered-languages'. If not
matched, never selected.
3. If no entity is selected, select the language-independent
part (if exist) or the first language message part."
(let ((default-situation
(delq nil (cons (assq 'major-mode situation)
(cdr (assq 'childrens-situation situation)))))
choice pairs)
(setq pairs
(mapcar
(lambda (child)
(cons (cons
(cdr (assq 'atom
(std11-lexical-analyze
(mime-entity-read-field
child "Content-Language"))))
(cdr (assq 'atom
(std11-lexical-analyze
(mime-entity-fetch-field
child "Content-Translation-Type")))))
child))
(mime-entity-children entity)))
(setq choice
(if mime-display-multipart/multilingual-interactive
(mime-display-multipart/multilingual-select-interactively pairs)
(mime-display-multipart/multilingual-select-automatically pairs)))
(mapc (lambda (child)
(mime-display-entity
child nil
(if (eq choice child)
default-situation
(put-alist 'body 'invisible
(copy-alist (mime-find-entity-preview-situation
child default-situation))))))
(mime-entity-children entity))))
;;; @ acting-condition
;;;
(defvar mime-acting-condition nil
"Condition-tree about how to process entity.")
(defun mime-view-read-mailcap-files (&optional files)
(or files
(setq files
(if mime-mailcap-file
(cons mime-mailcap-file
(remove mime-mailcap-file mime-view-mailcap-files))
mime-view-mailcap-files)))
(let (entries file)
(while files
(setq file (car files))
(if (file-readable-p file)
(setq entries (append entries (mime-parse-mailcap-file file))))
(setq files (cdr files)))
(while entries
(let ((entry (car entries))
view print shared)
(while entry
(let* ((field (car entry))
(field-type (car field)))
(cond ((eq field-type 'view) (setq view field))
((eq field-type 'print) (setq print field))
((memq field-type '(compose composetyped edit)))
(t (setq shared (cons field shared)))))
(setq entry (cdr entry)))
(setq shared (nreverse shared))
(ctree-set-calist-with-default
'mime-acting-condition
(append shared (list '(mode . "play")(cons 'method (cdr view)))))
(if print
(ctree-set-calist-with-default
'mime-acting-condition
(append shared
(list '(mode . "print")(cons 'method (cdr view)))))))
(setq entries (cdr entries)))))
(mime-view-read-mailcap-files)
(ctree-set-calist-strictly
'mime-acting-condition
'((type . application)(subtype . octet-stream)
(mode . "play")
(method . mime-detect-content)))
(ctree-set-calist-with-default
'mime-acting-condition
'((mode . "extract")
(method . mime-save-content)))
(ctree-set-calist-strictly
'mime-acting-condition
'((type . text)(subtype . x-rot13-47)(mode . "play")
(method . mime-view-caesar)))
(ctree-set-calist-strictly
'mime-acting-condition
'((type . text)(subtype . x-rot13-47-48)(mode . "play")
(method . mime-view-caesar)))
(ctree-set-calist-strictly
'mime-acting-condition
'((type . message)(subtype . rfc822)(mode . "play")
(method . mime-view-message/rfc822)))
(ctree-set-calist-strictly
'mime-acting-condition
'((type . message)(subtype . partial)(mode . "play")
(method . mime-store-message/partial-piece)))
(ctree-set-calist-strictly
'mime-acting-condition
'((type . message)(subtype . external-body)
("access-type" . "anon-ftp")
(method . mime-view-message/external-anon-ftp)))
(ctree-set-calist-strictly
'mime-acting-condition
'((type . message)(subtype . external-body)
("access-type" . "url")
(method . mime-view-message/external-url)))
(ctree-set-calist-strictly
'mime-acting-condition
'((type . application)(subtype . octet-stream)
(method . mime-save-content)))
;;; @ quitting method
;;;
(defvar mime-preview-quitting-method-alist
'((mime-show-message-mode
. mime-preview-quitting-method-for-mime-show-message-mode))
"Alist of major-mode vs. quitting-method of mime-view.")
(defvar mime-preview-over-to-previous-method-alist nil
"Alist of major-mode vs. over-to-previous-method of mime-view.")
(defvar mime-preview-over-to-next-method-alist nil
"Alist of major-mode vs. over-to-next-method of mime-view.")
;;; @ following method
;;;
(defvar mime-preview-following-method-alist nil
"Alist of major-mode vs. following-method of mime-view.")
(defvar mime-view-following-required-fields-list
'("From"))
;;; @ buffer setup
;;;
(defun mime-display-entity-visible-p (elements situation &optional default)
(catch 'done
(let (result)
(while elements
(when (setq result (cdr (assq (car elements) situation)))
(unless (memq result '(visible invisible))
(setq result (cond ((functionp result)
(funcall result situation))
((and (symbolp result) (boundp result))
(symbol-value result))
(t default))))
;; Non-nil values other than invisible are treated as
;; visible.
(throw 'done (if (memq result '(invisible nil))
nil t)))
(setq elements (cdr elements))))
default))
(defvar mime-display-header-hook nil)
(defun mime-display-entity (entity &optional situation
default-situation preview-buffer)
(or preview-buffer
(setq preview-buffer (current-buffer)))
(let* (nb ne nbb)
(in-calist-package 'mime-view)
(or situation
(setq situation
(mime-find-entity-preview-situation entity default-situation)))
(let ((button-is-visible
(and mime-view-buttons-visible
(mime-display-entity-visible-p
'(*entity-button entity-button) situation t)))
(button-position (cdr (assq 'button-position situation)))
(header-is-visible
(mime-display-entity-visible-p '(*header header) situation))
(body-is-visible
(mime-display-entity-visible-p '(*body body) situation))
(children (mime-entity-children entity)))
(set-buffer preview-buffer)
(setq nb (point))
(narrow-to-region nb nb)
(if header-is-visible
(let ((header-presentation-method
(or (cdr (assq 'header-presentation-method situation))
(cdr (assq (cdr (assq 'major-mode situation))
mime-header-presentation-method-alist)))))
(if header-presentation-method
(funcall header-presentation-method entity situation)
(mime-insert-header entity
mime-view-ignored-field-list
mime-view-visible-field-list))
(run-hooks 'mime-display-header-hook)
(put-text-property nb (point-max) 'mime-view-entity-header entity)
(goto-char (point-max))
(insert "\n")))
(when button-is-visible
(unless (eq button-position 'after)
(goto-char (point-min)))
(mime-view-insert-entity-button entity)
(goto-char (point-max)))
(setq nbb (point))
(unless children
(when body-is-visible
(let ((body-presentation-method
(cdr (assq 'body-presentation-method situation))))
(if (functionp body-presentation-method)
(funcall body-presentation-method entity situation)
(mime-display-text/plain entity situation))))
(goto-char (point-max))
;; Insert LF if needed.
(unless (eq (preceding-char) 10) (insert 10)))
(setq ne (or (next-single-property-change nb 'mime-view-entity)
(point-max)))
(widen)
(put-text-property nb ne 'mime-view-entity entity)
(put-text-property nb ne 'mime-view-situation situation)
(put-text-property nbb ne 'mime-view-entity-body entity)
(goto-char ne)
(if (and children body-is-visible)
(let ((body-presentation-method
(cdr (assq 'body-presentation-method situation))))
(if (functionp body-presentation-method)
(funcall body-presentation-method entity situation)
(mime-display-multipart/mixed entity situation)))))))
;;; @ MIME viewer mode
;;;
(defconst mime-view-menu-title "MIME-View")
(defconst mime-view-menu-list
'((up "Move to upper entity" mime-preview-move-to-upper)
(previous "Move to previous entity" mime-preview-move-to-previous)
(next "Move to next entity" mime-preview-move-to-next)
(scroll-down "Scroll-down" mime-preview-scroll-down-entity)
(scroll-up "Scroll-up" mime-preview-scroll-up-entity)
(play "Play current entity" mime-preview-play-current-entity)
(extract "Extract current entity" mime-preview-extract-current-entity)
(print "Print current entity" mime-preview-print-current-entity))
"Menu for MIME Viewer")
(defvar mime-view-popup-menu
(let ((menu (make-sparse-keymap mime-view-menu-title)))
(nconc menu
(mapcar (lambda (item)
(list (intern (nth 1 item)) 'menu-item
(nth 1 item) (nth 2 item)))
mime-view-menu-list))))
(defun mime-view-popup-menu (_event)
"Popup the menu in the MIME Viewer buffer"
(interactive "@e")
(let ((menu mime-view-popup-menu) events func)
(setq events (x-popup-menu t menu))
(and events
(setq func (lookup-key menu (apply #'vector events)))
(commandp func)
(funcall func))))
(defvar mouse-button-2 [mouse-2])
(defvar mouse-button-3 [mouse-3])
(defun mime-view-define-keymap (&optional default)
(let ((mime-view-mode-map (if (keymapp default)
(copy-keymap default)
(make-sparse-keymap))))
(define-key mime-view-mode-map
"u" (function mime-preview-move-to-upper))
(define-key mime-view-mode-map
"p" (function mime-preview-move-to-previous))
(define-key mime-view-mode-map
"n" (function mime-preview-move-to-next))
(define-key mime-view-mode-map
"\e\t" (function mime-preview-move-to-previous))
(define-key mime-view-mode-map
"\t" (function mime-preview-move-to-next))
(define-key mime-view-mode-map
" " (function mime-preview-scroll-up-entity))
(define-key mime-view-mode-map
"\M- " (function mime-preview-scroll-down-entity))
(define-key mime-view-mode-map
"\177" (function mime-preview-scroll-down-entity))
(define-key mime-view-mode-map
"\C-m" (function mime-preview-next-line-entity))
(define-key mime-view-mode-map
"\C-\M-m" (function mime-preview-previous-line-entity))
(define-key mime-view-mode-map
"v" (function mime-preview-play-current-entity))
(define-key mime-view-mode-map
"e" (function mime-preview-extract-current-entity))
(define-key mime-view-mode-map
"\C-c\C-p" (function mime-preview-print-current-entity))
(define-key mime-view-mode-map
"\C-c\C-t\C-f" (function mime-preview-toggle-header))
(define-key mime-view-mode-map
"\C-c\C-th" (function mime-preview-toggle-header))
(define-key mime-view-mode-map
"\C-c\C-t\C-c" (function mime-preview-toggle-content))
(define-key mime-view-mode-map
"\C-c\C-v\C-f" (function mime-preview-show-header))
(define-key mime-view-mode-map
"\C-c\C-vh" (function mime-preview-show-header))
(define-key mime-view-mode-map
"\C-c\C-v\C-c" (function mime-preview-show-content))
(define-key mime-view-mode-map
"\C-c\C-d\C-f" (function mime-preview-hide-header))
(define-key mime-view-mode-map
"\C-c\C-dh" (function mime-preview-hide-header))
(define-key mime-view-mode-map
"\C-c\C-d\C-c" (function mime-preview-hide-content))
(define-key mime-view-mode-map
"a" (function mime-preview-follow-current-entity))
(define-key mime-view-mode-map
"q" (function mime-preview-quit))
(define-key mime-view-mode-map
"\C-c\C-x" (function mime-preview-kill-buffer))
;; (define-key mime-view-mode-map
;; "<" (function beginning-of-buffer))
;; (define-key mime-view-mode-map
;; ">" (function end-of-buffer))
(define-key mime-view-mode-map
"?" (function describe-mode))
(define-key mime-view-mode-map
[tab] (function mime-preview-move-to-next))
(define-key mime-view-mode-map
[delete] (function mime-preview-scroll-down-entity))
(define-key mime-view-mode-map
[backspace] (function mime-preview-scroll-down-entity))
(if (functionp default)
(setq mime-view-mode-map
(append mime-view-mode-map (list (cons t default)))))
(if mouse-button-2
(define-key mime-view-mode-map
mouse-button-2 (function mime-button-dispatcher)))
(define-key mime-view-mode-map
mouse-button-3 (function mime-view-popup-menu))
(define-key mime-view-mode-map [menu-bar mime-view]
(cons mime-view-menu-title
(make-sparse-keymap mime-view-menu-title)))
(mapc (function
(lambda (item)
(define-key mime-view-mode-map
(vector 'menu-bar 'mime-view (car item))
(cons (nth 1 item)(nth 2 item)))))
(reverse mime-view-menu-list))
;; (run-hooks 'mime-view-define-keymap-hook)
mime-view-mode-map))
(defvar mime-view-mode-default-map (mime-view-define-keymap))
(defsubst mime-maybe-hide-echo-buffer ()
"Clear mime-echo buffer and delete window for it."
(let ((buf (get-buffer mime-echo-buffer-name)))
(if buf
(with-current-buffer buf
(erase-buffer)
(let ((win (get-buffer-window buf)))
(if win
(delete-window win)))
(bury-buffer buf)))))
(defvar mime-view-redisplay nil)
;;;###autoload
(defun mime-display-message (message &optional preview-buffer
mother default-keymap-or-function
original-major-mode keymap)
"View MESSAGE in MIME-View mode.
Optional argument PREVIEW-BUFFER specifies the buffer of the
presentation. It must be either nil or a name of preview buffer.
Optional argument MOTHER specifies mother-buffer of the preview-buffer.
Optional argument DEFAULT-KEYMAP-OR-FUNCTION is nil, keymap or
function. If it is a keymap, keymap of MIME-View mode will be added
to it. If it is a function, it will be bound as default binding of
keymap of MIME-View mode.
Optional argument ORIGINAL-MAJOR-MODE is major-mode of representation
buffer of MESSAGE. If it is nil, current `major-mode' is used.
Optional argument KEYMAP is keymap of MIME-View mode. If it is
non-nil, DEFAULT-KEYMAP-OR-FUNCTION is ignored. If it is nil,
`mime-view-mode-default-map' is used."
(mime-maybe-hide-echo-buffer)
(let ((win-conf (current-window-configuration)))
(or preview-buffer
(setq preview-buffer
(concat "*Preview-" (mime-entity-name message) "*")))
(or original-major-mode
(setq original-major-mode major-mode))
(let ((inhibit-read-only t))
(set-buffer (get-buffer-create preview-buffer))
(widen)
(erase-buffer)
(if mother
(setq mime-mother-buffer mother))
(setq mime-preview-original-window-configuration win-conf)
(setq major-mode 'mime-view-mode)
(setq mode-name "MIME-View")
(make-local-variable 'nobreak-char-display)
(setq nobreak-char-display mime-view-nobreak-char-display)
;; Do not hide button when first entity is
;; neither text nor multipart.
(mime-display-entity
message nil `(,(if (memq (mime-entity-media-type message)
'(text multipart nil))
'(entity-button . invisible)
'(button-position . after))
(header . visible)
(major-mode . ,original-major-mode))
preview-buffer)
(use-local-map
(or keymap
(if default-keymap-or-function
(mime-view-define-keymap default-keymap-or-function)
mime-view-mode-default-map)))
(let ((point
(next-single-property-change (point-min) 'mime-view-entity)))
(if point
(goto-char point)
(goto-char (point-min))
(search-forward "\n\n" nil t)))
(run-hooks 'mime-view-mode-hook)
(set-buffer-modified-p nil)
(setq buffer-read-only t)
preview-buffer)))
;;;###autoload
(defun mime-view-buffer (&optional raw-buffer preview-buffer mother
default-keymap-or-function
representation-type)
"View RAW-BUFFER in MIME-View mode.
Optional argument PREVIEW-BUFFER is either nil or a name of preview
buffer.
Optional argument DEFAULT-KEYMAP-OR-FUNCTION is nil, keymap or
function. If it is a keymap, keymap of MIME-View mode will be added
to it. If it is a function, it will be bound as default binding of
keymap of MIME-View mode.
Optional argument REPRESENTATION-TYPE is representation-type of
message. It must be nil, `binary' or `cooked'. If it is nil,
`cooked' is used as default."
(interactive)
(or raw-buffer
(setq raw-buffer (current-buffer)))
(or representation-type
(setq representation-type
(with-current-buffer raw-buffer
(cdr (or (assq major-mode mime-raw-representation-type-alist)
(assq t mime-raw-representation-type-alist))))))
(if (eq representation-type 'binary)
(setq representation-type 'buffer))
(setq preview-buffer (mime-display-message
(mime-open-entity representation-type raw-buffer)
preview-buffer mother default-keymap-or-function))
(or (get-buffer-window preview-buffer)
(let ((r-win (get-buffer-window raw-buffer)))
(if r-win
(set-window-buffer r-win preview-buffer)
(let ((m-win (and mother (get-buffer-window mother))))
(if m-win
(set-window-buffer m-win preview-buffer)
(switch-to-buffer preview-buffer)))))))
(defun mime-view-mode (&optional mother ctl encoding
raw-buffer preview-buffer
default-keymap-or-function)
"Major mode for viewing MIME message.
Here is a list of the standard keys for mime-view-mode.
key feature
--- -------
u Move to upper content
p or M-TAB Move to previous content
n or TAB Move to next content
SPC Scroll up or move to next content
M-SPC or DEL Scroll down or move to previous content
RET Move to next line
M-RET Move to previous line
v Decode current content as `play mode'
e Decode current content as `extract mode'
C-c C-p Decode current content as `print mode'
a Followup to current content.
q Quit
button-2 Move to point under the mouse cursor
and decode current content as `play mode'
"
(interactive)
(let (message)
(unless mime-view-redisplay
(save-excursion
(if raw-buffer (set-buffer raw-buffer))
(let ((type
(cdr
(or (assq major-mode mime-raw-representation-type-alist)
(assq t mime-raw-representation-type-alist)))))
(if (eq type 'binary)
(setq type 'buffer))
(setq message (mime-open-entity type raw-buffer))
(or (mime-entity-content-type message)
(mime-entity-set-content-type message ctl)))
(or (mime-entity-encoding message)
(mime-entity-set-encoding message encoding))))
(mime-display-message message preview-buffer
mother default-keymap-or-function)))
;;; @@ utility
;;;
(defun mime-preview-find-boundary-info (&optional with-children)
"Return boundary information of current part.
If WITH-CHILDREN, refer boundary surrounding current part and its branches."
(let (entity
p-beg p-end
entity-node-id len)
(while (and
(null (setq entity
(get-text-property (point) 'mime-view-entity)))
(> (point) (point-min)))
(backward-char))
(setq p-beg (previous-single-property-change (point) 'mime-view-entity))
(setq entity-node-id (and entity (mime-entity-node-id entity)))
(setq len (length entity-node-id))
(cond ((null p-beg)
(setq p-beg
(if (eq (next-single-property-change (point-min)
'mime-view-entity)
(point))
(point)
(point-min))))
((eq (next-single-property-change p-beg 'mime-view-entity)
(point))
(setq p-beg (point))))
(setq p-end (next-single-property-change p-beg 'mime-view-entity))
(cond ((null p-end)
(setq p-end (point-max)))
((null entity-node-id)
(setq p-end (point-max)))
(with-children
(save-excursion
(catch 'tag
(let (e i)
(while (setq e
(next-single-property-change
(point) 'mime-view-entity))
(goto-char e)
(let ((rc (mime-entity-node-id
(get-text-property (point)
'mime-view-entity))))
(or (and (>= (setq i (- (length rc) len)) 0)
(equal entity-node-id (nthcdr i rc)))
(throw 'tag nil)))
(setq p-end (or (next-single-property-change
(point) 'mime-view-entity)
(point-max)))))
(setq p-end (point-max))))))
(vector p-beg p-end entity)))
;;; @@ playing
;;;
(autoload 'mime-preview-play-current-entity "mime-play"
"Play current entity." t)
(defun mime-preview-extract-current-entity (&optional ignore-examples)
"Extract current entity into file (maybe).
It decodes current entity to call internal or external method as
\"extract\" mode. The method is selected from variable
`mime-acting-condition'."
(interactive "P")
(mime-preview-play-current-entity ignore-examples "extract"))
(defun mime-preview-print-current-entity (&optional ignore-examples)
"Print current entity (maybe).
It decodes current entity to call internal or external method as
\"print\" mode. The method is selected from variable
`mime-acting-condition'."
(interactive "P")
(mime-preview-play-current-entity ignore-examples "print"))
;;; @@ following
;;;
(defun mime-preview-follow-current-entity ()
"Write follow message to current entity.
It calls following-method selected from variable
`mime-preview-following-method-alist'."
(interactive)
(let* ((boundary-info (mime-preview-find-boundary-info t))
(p-beg (aref boundary-info 0))
(p-end (aref boundary-info 1))
(entity (aref boundary-info 2))
pb-beg)
(if (or (get-text-property p-beg 'mime-view-entity-body)
(null entity))
(setq pb-beg p-beg)
(setq pb-beg
(next-single-property-change
p-beg 'mime-view-entity-body nil
(or (next-single-property-change p-beg 'mime-view-entity)
p-end))))
(let* ((mode (mime-preview-original-major-mode 'recursive))
(entity-node-id (and entity (mime-entity-node-id entity)))
(new-name
(format "%s-%s" (buffer-name) (reverse entity-node-id)))
new-buf
(the-buf (current-buffer))
fields)
;; Do not use `with-current-buffer'. Inner save-excursion(),
;; the current buffer may be accessed.
(save-excursion
(set-buffer (setq new-buf (get-buffer-create new-name)))
(erase-buffer)
(insert ?\n)
(insert-buffer-substring the-buf pb-beg p-end)
(goto-char (point-min))
(let ((current-entity
(if (and entity
(eq (mime-entity-media-type entity) 'message)
(eq (mime-entity-media-subtype entity) 'rfc822))
(car (mime-entity-children entity))
entity)))
(while (and current-entity
(if (and (eq (mime-entity-media-type
current-entity) 'message)
(eq (mime-entity-media-subtype
current-entity) 'rfc822))
nil
(mime-insert-header current-entity fields)
t))
(setq fields (std11-collect-field-names)
current-entity (mime-entity-parent current-entity))))
(let ((rest mime-view-following-required-fields-list)
field-name ret)
(while rest
(setq field-name (car rest))
(or (std11-field-body field-name)
(progn
(with-current-buffer the-buf
(let ((entity (when mime-mother-buffer
(set-buffer mime-mother-buffer)
(get-text-property (point)
'mime-view-entity))))
(while (and entity
(null (setq ret (mime-entity-fetch-field
entity field-name))))
(setq entity (mime-entity-parent entity)))))
(if ret
(insert field-name ": " ret "\n"))))
(setq rest (cdr rest)))))
(let ((f (cdr (assq mode mime-preview-following-method-alist))))
(if (functionp f)
(funcall f new-buf)
(message
"Sorry, following method for %s is not implemented yet."
mode))))))
;;; @@ moving
;;;
(defun mime-preview-move-to-upper ()
"Move to upper entity.
If there is no upper entity, call function `mime-preview-quit'."
(interactive)
(let (cinfo)
(while (null (setq cinfo
(get-text-property (point) 'mime-view-entity)))
(backward-char))
(let ((r (mime-entity-parent cinfo))
point)
(catch 'tag
(while (setq point (previous-single-property-change
(point) 'mime-view-entity))
(goto-char point)
(when (eq r (get-text-property (point) 'mime-view-entity))
(if (or (eq mime-preview-move-scroll t)
(and mime-preview-move-scroll
(>= point
(save-excursion
(move-to-window-line -1)
(forward-line (* -1 next-screen-context-lines))
(beginning-of-line)
(point)))))
(recenter next-screen-context-lines))
(throw 'tag t)))
(mime-preview-quit)))))
(defun mime-preview-move-to-previous ()
"Move to previous entity.
If there is no previous entity, it calls function registered in
variable `mime-preview-over-to-previous-method-alist'."
(interactive)
(while (and (not (bobp))
(null (get-text-property (point) 'mime-view-entity)))
(backward-char))
(let ((point (previous-single-property-change (point) 'mime-view-entity)))
(if (and point
(>= point (point-min)))
(if (get-text-property (1- point) 'mime-view-entity)
(progn (goto-char point)
(if
(or (eq mime-preview-move-scroll t)
(and mime-preview-move-scroll
(<= point
(save-excursion
(move-to-window-line 0)
(forward-line next-screen-context-lines)
(end-of-line)
(point)))))
(recenter (* -1 next-screen-context-lines))))
(goto-char (1- point))
(mime-preview-move-to-previous))
(let ((f (assq (mime-preview-original-major-mode)
mime-preview-over-to-previous-method-alist)))
(if f
(funcall (cdr f)))))))
(defun mime-preview-move-to-next ()
"Move to next entity.
If there is no previous entity, it calls function registered in
variable `mime-preview-over-to-next-method-alist'."
(interactive)
(while (and (not (eobp))
(null (get-text-property (point) 'mime-view-entity)))
(forward-char))
(let ((point (next-single-property-change (point) 'mime-view-entity)))
(if (and point
(<= point (point-max)))
(progn
(goto-char point)
(if (null (get-text-property point 'mime-view-entity))
(mime-preview-move-to-next)
(and
(or (eq mime-preview-move-scroll t)
(and mime-preview-move-scroll
(>= point
(save-excursion
(move-to-window-line -1)
(forward-line
(* -1 next-screen-context-lines))
(beginning-of-line)
(point)))))
(recenter next-screen-context-lines))))
(let ((f (assq (mime-preview-original-major-mode)
mime-preview-over-to-next-method-alist)))
(if f
(funcall (cdr f)))))))
(defun mime-preview-scroll-up-entity (&optional h)
"Scroll up current entity.
If reached to (point-max), it calls function registered in variable
`mime-preview-over-to-next-method-alist'."
(interactive)
(if (eobp)
(let ((f (assq (mime-preview-original-major-mode)
mime-preview-over-to-next-method-alist)))
(if f
(funcall (cdr f))))
(let ((point
(or (next-single-property-change (point) 'mime-view-entity)
(point-max)))
(bottom (window-end (selected-window))))
(if (and (not h)
(> bottom point))
(progn (goto-char point)
(recenter next-screen-context-lines))
(condition-case nil
(scroll-up h)
(end-of-buffer
(goto-char (point-max))))))))
(defun mime-preview-scroll-down-entity (&optional h)
"Scroll down current entity.
If reached to (point-min), it calls function registered in variable
`mime-preview-over-to-previous-method-alist'."
(interactive)
(if (bobp)
(let ((f (assq (mime-preview-original-major-mode)
mime-preview-over-to-previous-method-alist)))
(if f
(funcall (cdr f))))
(let ((point
(or (previous-single-property-change (point) 'mime-view-entity)
(point-min)))
(top (window-start (selected-window))))
(if (and (not h)
(< top point))
(progn (goto-char point)
(recenter (* -1 next-screen-context-lines)))
(condition-case nil
(scroll-down h)
(beginning-of-buffer
(goto-char (point-min))))))))
(defun mime-preview-next-line-entity (&optional lines)
"Scroll up one line (or prefix LINES lines).
If LINES is negative, scroll down LINES lines."
(interactive "p")
(mime-preview-scroll-up-entity (or lines 1)))
(defun mime-preview-previous-line-entity (&optional lines)
"Scrroll down one line (or prefix LINES lines).
If LINES is negative, scroll up LINES lines."
(interactive "p")
(mime-preview-scroll-down-entity (or lines 1)))
;;; @@ display
;;;
(defun mime-preview-toggle-display (type &optional display)
(let ((situation (mime-preview-find-boundary-info t))
(sym (intern (concat "*" (symbol-name type))))
entity p-beg p-end)
(setq p-beg (aref situation 0)
p-end (aref situation 1)
entity (aref situation 2)
situation (get-text-property p-beg 'mime-view-situation))
(cond ((eq display 'invisible)
(setq display nil))
(display)
(t
(setq display
(memq (cdr (or (assq sym situation)
(assq type situation)))
'(nil invisible)))))
(setq situation (put-alist sym (if display
'visible
'invisible)
situation))
(save-excursion
(let ((inhibit-read-only t))
(delete-region p-beg p-end)
(mime-display-entity entity situation)))
(let ((ret (assoc situation mime-preview-situation-example-list)))
(if ret
(setcdr ret (1+ (cdr ret)))
(add-to-list 'mime-preview-situation-example-list
(cons situation 0))))))
(defun mime-preview-toggle-header (&optional force-visible)
(interactive "P")
(mime-preview-toggle-display 'header force-visible))
(defun mime-preview-toggle-content (&optional force-visible)
(interactive "P")
(mime-preview-toggle-display 'body force-visible))
(defun mime-preview-show-header ()
(interactive)
(mime-preview-toggle-display 'header 'visible))
(defun mime-preview-show-content ()
(interactive)
(mime-preview-toggle-display 'body 'visible))
(defun mime-preview-hide-header ()
(interactive)
(mime-preview-toggle-display 'header 'invisible))
(defun mime-preview-hide-content ()
(interactive)
(mime-preview-toggle-display 'body 'invisible))
;;; @@ quitting
;;;
(defun mime-preview-quit ()
"Quit from MIME-preview buffer.
It calls function registered in variable
`mime-preview-quitting-method-alist'."
(interactive)
(let ((r (assq (mime-preview-original-major-mode)
mime-preview-quitting-method-alist)))
(if r
(funcall (cdr r)))))
(defun mime-preview-kill-buffer ()
(interactive)
(kill-buffer (current-buffer)))
;;; @ end
;;;
(provide 'mime-view)
(mime-view-read-situation-examples-file)
;;; mime-view.el ends here
0707010000001C000081A4000003E80000006400000001627140E500000998000000000000000000000000000000000000002900000000semi-1.14.6+239+gb1c245b81715/mime-w3.el;;; mime-w3.el --- mime-view content filter for text -*- lexical-binding: t -*-
;; Copyright (C) 1994,95,96,97,98,99,2000 Free Software Foundation, Inc.
;; Author: MORIOKA Tomohiko <tomo@m17n.org>
;; Keywords: HTML, MIME, multimedia, mail, news
;; This file is part of SEMI (Suite of Emacs MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Code:
(require 'w3 nil t)
(require 'mime)
(eval-and-compile
(defmacro mime-put-keymap-region (start end keymap)
`(put-text-property ,start ,end 'local-map ,keymap)))
(defmacro mime-save-background-color (&rest body)
`(cons 'progn ,body))
(defvar mime-w3-message-structure nil)
(defun mime-preview-text/html (entity _situation)
(setq mime-w3-message-structure (mime-find-root-entity entity))
(goto-char (point-max))
(let ((p (point)))
(insert "\n")
(goto-char p)
(save-restriction
(narrow-to-region p p)
(mime-insert-text-content entity)
(run-hooks 'mime-text-decode-hook)
(condition-case err
(w3-region p (point-max))
(error (message "%s" err)))
(mime-put-keymap-region p (point-max) w3-mode-map))))
(defun url-cid (url &optional _proxy-info)
(let ((entity
(mime-find-entity-from-content-id (mime-uri-parse-cid url)
mime-w3-message-structure))
buffer)
(when entity
(setq buffer (generate-new-buffer (format " *cid %s" url)))
(save-excursion
(set-buffer buffer)
(mime-insert-entity-content entity)
(if (boundp 'url-current-mime-type)
(setq url-current-mime-type (mime-entity-type/subtype entity)))))
buffer))
(if (fboundp 'url-register-protocol)
(url-register-protocol "cid"
'url-cid
'url-identity-expander)
(provide 'url-cid))
;;; @ end
;;;
(provide 'mime-w3)
;;; mime-w3.el ends here
0707010000001D000081A4000003E80000006400000001627140E500001618000000000000000000000000000000000000002A00000000semi-1.14.6+239+gb1c245b81715/semi-def.el;;; semi-def.el --- definition module for SEMI -*- lexical-binding: t -*-
;; Copyright (C) 1995,96,97,98,99,2000,01,03,05 Free Software Foundation, Inc.
;; Author: MORIOKA Tomohiko <tomo@m17n.org>
;; Keywords: definition, MIME, multimedia, mail, news
;; This file is part of SEMI (Sample of Emacs MIME Implementation).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Code:
(defconst mime-user-interface-product ["SEMI-EPG" (1 14 7) "Harue"]
"Product name, version number and code name of MIME-kernel package.")
(autoload 'mule-caesar-region "mule-caesar"
"Caesar rotation of current region." t)
;;; @ constants
;;;
(defconst mime-echo-buffer-name "*MIME-echo*"
"Name of buffer to display MIME-playing information.")
(defconst mime-temp-buffer-name " *MIME-temp*")
;;; @ button
;;;
(defcustom mime-button-face 'bold
"Face used for content-button or URL-button of MIME-Preview buffer."
:group 'mime
:type 'face)
(defcustom mime-button-mouse-face 'highlight
"Face used for MIME-preview buffer mouse highlighting."
:group 'mime
:type 'face)
(defsubst mime-add-button (from to function &optional data)
"Create a button between FROM and TO with callback FUNCTION and DATA."
(and mime-button-face
(put-text-property from to 'face mime-button-face))
(and mime-button-mouse-face
(put-text-property from to 'mouse-face mime-button-mouse-face))
(put-text-property from to 'mime-button-callback function)
(and data
(put-text-property from to 'mime-button-data data)))
(defsubst mime-insert-button (string function &optional data)
"Insert STRING as button with callback FUNCTION and DATA."
(save-restriction
(narrow-to-region (point)(point))
(insert "[" string "]\n")
(mime-add-button (point-min)(point-max) function data)))
(defvar mime-button-mother-dispatcher nil)
(defun mime-button-dispatcher (event)
"Select the button under point."
(interactive "e")
(let (buf point func data)
(save-window-excursion
(mouse-set-point event)
(setq buf (current-buffer)
point (point)
func (get-text-property (point) 'mime-button-callback)
data (get-text-property (point) 'mime-button-data)))
;; Do not use `with-current-buffer'.
;; buf may be the current buffer.
(save-excursion
(set-buffer buf)
(goto-char point)
(if func
(apply func data)
(if (fboundp mime-button-mother-dispatcher)
(funcall mime-button-mother-dispatcher event))))))
;;; @ for URL
;;;
(defcustom mime-browse-url-regexp
(concat "\\(https?\\|ftps?\\|file\\|gopher\\|news\\|nntps?\\|telnets?\\|wais\\|mailto\\):"
"\\(//[-a-zA-Z0-9_.]+:[0-9]*\\)?"
"[-a-zA-Z0-9_=?#$@~`%&*+|\\/.,]*[-a-zA-Z0-9_=#$@~`%&*+|\\/]")
"*Regexp to match URL in text body."
:group 'mime
:type 'regexp)
(defcustom mime-browse-url-function (function browse-url)
"*Function to browse URL."
:group 'mime
:type 'function)
(defsubst mime-add-url-buttons ()
"Add URL-buttons for text body."
(goto-char (point-min))
(while (re-search-forward mime-browse-url-regexp nil t)
(let ((beg (match-beginning 0))
(end (match-end 0)))
(mime-add-button beg end mime-browse-url-function
(list (buffer-substring beg end))))))
;;; @ menu
;;;
(defun mime-should-use-popup-menu ()
(and window-system
(memq (event-basic-type last-command-event)
'(mouse-1 mouse-2 mouse-3))))
(defun mime-select-menu-alist (title menu-alist)
(if (mime-should-use-popup-menu)
(x-popup-menu
(list '(1 1) (selected-window))
(list title (cons title menu-alist)))
(cdr
(assoc (completing-read (concat title " : ") menu-alist)
menu-alist))))
;;; @ Other Utility
;;;
(defvar mime-condition-type-alist
'((preview . mime-preview-condition)
(action . mime-acting-condition)))
(defvar mime-condition-mode-alist
'((with-default . ctree-set-calist-with-default)
(t . ctree-set-calist-strictly)))
(defun mime-add-condition (target-type condition &optional mode file)
"Add CONDITION to database specified by TARGET-TYPE.
TARGET-TYPE must be 'preview or 'action.
If optional argument MODE is 'strict or nil (omitted), CONDITION is
added strictly.
If optional argument MODE is 'with-default, CONDITION is added with
default rule.
If optional argument FILE is specified, it is loaded when CONDITION is
activate."
(let ((sym (cdr (assq target-type mime-condition-type-alist))))
(if sym
(let ((func (cdr (or (assq mode mime-condition-mode-alist)
(assq t mime-condition-mode-alist)))))
(if (fboundp func)
(progn
(funcall func sym condition)
(if file
(mapc (lambda (parameter)
(when (setq func (cdr (assq parameter condition)))
(autoload func file)))
'(method body-presentation-method))))
(error "Function for mode `%s' is not found." mode)))
(error "Variable for target-type `%s' is not found." target-type))))
;;; @ end
;;;
(provide 'semi-def)
;;; semi-def.el ends here
0707010000001E000081A4000003E80000006400000001627140E500000083000000000000000000000000000000000000002A00000000semi-1.14.6+239+gb1c245b81715/semi-pkg.el(define-package "semi" "1.14.7"
"A library to provide MIME features."
'((emacs "24.5")
(apel "10.8")
(flim "1.14.9")))
0707010000001F000081A4000003E80000006400000001627140E500002029000000000000000000000000000000000000002C00000000semi-1.14.6+239+gb1c245b81715/semi-setup.el;;; semi-setup.el --- setup file for MIME-View. -*- lexical-binding: t -*-
;; Copyright (C) 1994,95,96,97,98,99,2000 Free Software Foundation, Inc.
;; Author: MORIOKA Tomohiko <tomo@m17n.org>
;; Keywords: mail, news, MIME, multimedia, multilingual, encoded-word
;; This file is part of SEMI (Setting for Emacs MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Code:
(require 'path-util)
(require 'alist)
(require 'semi-def)
(defun call-after-loaded (module func &optional hook-name)
"If MODULE is provided, then FUNC is called.
Otherwise func is set to MODULE-load-hook.
If optional argument HOOK-NAME is specified,
it is used as hook to set."
(if (featurep module)
(funcall func)
(or hook-name
(setq hook-name (intern (concat (symbol-name module) "-load-hook"))))
(add-hook hook-name func)))
;; for image/*
(defvar mime-setup-enable-inline-image
window-system
"*If it is non-nil, semi-setup sets up to use mime-image.")
(if mime-setup-enable-inline-image
(eval-after-load "mime-view"
'(require 'mime-image)))
;; for text/html
(when (and (boundp 'mime-html-previewer-alist)
(null (boundp 'mime-view-text/html-previewer-alist)))
(defvar mime-view-text/html-previewer-alist 'mime-html-previewer-alist))
(when (and (boundp 'mime-setup-enable-inline-html)
(null (boundp 'mime-view-text/html-previewer)))
(defvar mime-view-text/html-previewer mime-setup-enable-inline-html))
(defadvice mime-w3m-insinuate (around insinuate-to-semi-epg activate)
(setq mime-view-text/html-previewer 'w3m))
(make-obsolete-variable 'mime-html-previewer-alist
'mime-view-text/html-previewer-alist
"12 Jan 2014")
(make-obsolete-variable 'mime-setup-enable-inline-html
'mime-view-text/html-previewer
"12 Jan 2014")
;; for text/vcard, text/x-vcard
(defvar mime-setup-enable-vcard
(module-installed-p 'vcard)
"*If it is non-nil, semi-setup sets up to use mime-vcard.")
(eval-after-load "mime-view"
'(when mime-setup-enable-vcard
(mapc (lambda (subtype)
(mime-add-condition
'preview
`((type . text)(subtype . ,subtype)
(body . visible)
(body-presentation-method . mime-display-text/vcard))
'strict "mime-vcard")
(set-alist 'mime-view-type-subtype-score-alist
`(text . ,subtype) 3))
'(vcard x-vcard))))
;; for PGP
(defvar mime-setup-enable-epg t
"*If it is non-nil, semi-setup sets up to use mime-pgp.")
(eval-after-load "mime-view"
'(when mime-setup-enable-epg
(mime-add-condition
'preview '((type . application)(subtype . pgp)
(message-button . visible)))
(mime-add-condition
'action '((type . multipart)(subtype . signed)
(method . mime-verify-multipart/signed))
'strict "mime-pgp")
(mime-add-condition
'action
'((type . application)(subtype . pgp-signature)
(method . mime-verify-application/*-signature))
'strict "mime-pgp")
(mime-add-condition
'action
'((type . application)(subtype . pgp-encrypted)
(method . mime-decrypt-application/pgp-encrypted))
'strict "mime-pgp")
(mime-add-condition
'action
'((type . application)(subtype . pgp-keys)
(method . mime-add-application/pgp-keys))
'strict "mime-pgp")
(mime-add-condition
'action
'((type . application)(subtype . pkcs7-signature)
(method . mime-verify-application/*-signature))
'strict "mime-pgp")
(mime-add-condition
'action
'((type . application)(subtype . x-pkcs7-signature)
(method . mime-verify-application/*-signature))
'strict "mime-pgp")
(mime-add-condition
'action
'((type . application)(subtype . pkcs7-mime)
(method . mime-view-application/pkcs7-mime))
'strict "mime-pgp")
(mime-add-condition
'action
'((type . application)(subtype . x-pkcs7-mime)
(method . mime-view-application/pkcs7-mime))
'strict "mime-pgp")
(mime-add-condition
'preview
'((type . application)
(subtype . pkcs7-mime)
(body . mime-pgp-decrypt-when-preview)
(body-presentation-method . mime-preview-application/pkcs7-mime))
'strict "mime-pgp")
(mime-add-condition
'preview
'((type . multipart)
(subtype . encrypted)
("protocol" . "application/pgp-encrypted")
(body . visible)
(body-presentation-method . mime-display-multipart/pgp-encrypted))
'strict "mime-pgp")
(mime-add-condition
'preview
'((type . application)
(subtype . pgp-signature)
(body . mime-pgp-verify-when-preview)
(body-presentation-method . mime-preview-application/*-signature))
'strict "mime-pgp")
(mime-add-condition
'preview
'((type . application)
(subtype . pgp-encrypted)
(body . mime-pgp-decrypt-when-preview)
(body-presentation-method . mime-preview-application/pgp-encrypted))
'strict "mime-pgp")
(mime-add-condition
'preview
'((type . application)
(subtype . pkcs7-signature)
(body . mime-pgp-verify-when-preview)
(body-presentation-method . mime-preview-application/*-signature))
'strict "mime-pgp")
(mime-add-condition
'preview
'((type . application)
(subtype . x-pkcs7-signature)
(body . mime-pgp-verify-when-preview)
(body-presentation-method . mime-preview-application/*-signature))
'strict "mime-pgp")))
(eval-after-load "mime-view"
'(progn
(mime-add-condition
'preview
'((type . application)
(subtype . ms-tnef)
(body . visible)
(body-presentation-method . mime-display-application/ms-tnef))
'strict "mime-tnef")
(mime-add-condition
'preview
'((type . application)
(subtype . vnd.ms-tnef)
(body . visible)
(body-presentation-method . mime-display-application/ms-tnef))
'strict "mime-tnef")))
;;; @ for mime-edit
;;;
;; (defun mime-setup-decode-message-header ()
;; (save-excursion
;; (save-restriction
;; (goto-char (point-min))
;; (narrow-to-region
;; (point-min)
;; (if (re-search-forward
;; (concat "^" (regexp-quote mail-header-separator) "$")
;; nil t)
;; (match-beginning 0)
;; (point-max)
;; ))
;; (mime-decode-header-in-buffer)
;; (set-buffer-modified-p nil)
;; )))
;; (add-hook 'mime-edit-mode-hook 'mime-setup-decode-message-header)
;;; @@ variables
;;;
(defvar mime-setup-use-signature nil
"If it is not nil, mime-setup sets up to use signature.el.")
(defvar mime-setup-default-signature-key "\C-c\C-s"
"*Key to insert signature.")
(defvar mime-setup-signature-key-alist '((mail-mode . "\C-c\C-w"))
"Alist of major-mode vs. key to insert signature.")
;;; @@ for signature
;;;
(autoload 'insert-signature "signature" "Insert signature" t)
(defun mime-setup-set-signature-key ()
(let ((keymap (current-local-map)))
(if keymap
(let ((key
(or (cdr (assq major-mode mime-setup-signature-key-alist))
mime-setup-default-signature-key)))
(define-key keymap key (function insert-signature))))))
(when mime-setup-use-signature
(add-hook 'mime-edit-mode-hook 'mime-setup-set-signature-key)
;; (setq message-signature nil)
)
;;; @ for mu-cite
;;;
;; (add-hook 'mu-cite/pre-cite-hook 'eword-decode-header)
;;; @ for Mac OS X
;;;
(when (eq system-type 'darwin)
(eval-after-load "mime-view"
'(progn
(mime-add-condition
'action
'((type . application)
(method . mime-mac-save-and-play-with-open))
'with-default
"mime-mac"))))
;;; @ end
;;;
(provide 'semi-setup)
;;; semi-setup.el ends here
07070100000020000081A4000003E80000006400000001627140E5000012DE000000000000000000000000000000000000002B00000000semi-1.14.6+239+gb1c245b81715/signature.el;;; signature.el --- a signature utility for GNU Emacs -*- lexical-binding: t -*-
;; Copyright (C) 1994,1995,1996,1997,2000 Free Software Foundation, Inc.
;; Author: MORIOKA Tomohiko <tomo@m17n.org>
;; OKABE Yasuo <okabe@kudpc.kyoto-u.ac.jp>
;; Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
;; Maintainer: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
;; Created: 1994/7/11
;; Keywords: mail, news, signature
;; This file is part of SEMI (SEMI is Emacs MIME Interfaces).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program; see the file COPYING. If not, write to
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Code:
(require 'std11)
;;; @ valiables
;;;
(defvar signature-insert-at-eof nil
"*If non-nil, insert signature at the end of file.")
(defvar signature-delete-blank-lines-at-eof nil
"*If non-nil, signature-insert-at-eof deletes blank lines at the end
of file.")
(defvar signature-load-hook nil
"*List of functions called after signature.el is loaded.")
(defvar signature-separator "-- \n"
"*String to separate contents and signature.
It is inserted when signature is inserted at end of file.")
(defvar signature-file-name "~/.signature"
"*Name of file containing the user's signature.")
(defvar signature-file-alist nil
"*Alist of the form:
(((FIELD . PATTERN) . FILENAME)
...)
PATTERN is a string or list of string. If PATTERN matches the contents of
FIELD, the contents of FILENAME is inserted.")
(defvar signature-file-prefix nil
"*String containing optional prefix for the signature file names")
(defvar signature-insert-hook nil
"*List of functions called before inserting a signature.")
(make-obsolete-variable
'signature-use-bbdb "feature abolished" "29 May 2020")
(defun signature/get-sigtype-interactively (&optional default)
(read-file-name "Insert your signature: "
(or default (concat signature-file-name "-"))
(or default signature-file-name)
nil))
(defun signature/get-signature-file-name ()
(save-excursion
(save-restriction
(narrow-to-region
(goto-char (point-min))
(if (re-search-forward
(concat "^" (regexp-quote mail-header-separator) "$")
nil t)
(match-beginning 0)
(point-max)))
(catch 'found
(let ((alist signature-file-alist) cell field value)
(while alist
(setq cell (car alist)
field (std11-field-body (car (car cell)))
value (cdr (car cell)))
(cond ((functionp value)
(let ((name (apply value field (cdr cell))))
(if name
(throw 'found
(concat signature-file-prefix name)))))
((stringp field)
(cond ((consp value)
(while value
(if (string-match (car value) field)
(throw 'found
(concat
signature-file-prefix (cdr cell)))
(setq value (cdr value)))))
((stringp value)
(if (string-match value field)
(throw 'found
(concat
signature-file-prefix (cdr cell))))))))
(setq alist (cdr alist))))
signature-file-name))))
(defun insert-signature (&optional arg)
"Insert the file named by signature-file-name.
It is inserted at the end of file if signature-insert-at-eof is non-nil,
and otherwise at the current point. A prefix argument enables user to
specify a file named <signature-file-name>-DISTRIBUTION interactively."
(interactive "P")
(let ((signature-file-name
(expand-file-name
(or (and arg
(signature/get-sigtype-interactively))
(signature/get-signature-file-name)))))
(or (file-readable-p signature-file-name)
(error "Cannot open signature file: %s" signature-file-name))
(if signature-insert-at-eof
(progn
(goto-char (point-max))
(or (bolp) (insert "\n"))
(if signature-delete-blank-lines-at-eof (delete-blank-lines))))
(run-hooks 'signature-insert-hook)
(if (= (point)(point-max))
(insert signature-separator))
(insert-file-contents signature-file-name)
(force-mode-line-update)
signature-file-name))
;;; @ end
;;;
(provide 'signature)
(run-hooks 'signature-load-hook)
;;; signature.el ends here
07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!1290 blocks