;; Maintainer: MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Created: 1994/08/21 renamed from mime.el
;; Renamed: 1997/2/21 from tm-edit.el
-;; Version: $Revision: 0.70 $
+;; Version: $Revision: 0.85 $
;; Keywords: MIME, multimedia, multilingual, mail, news
;; This file is part of SEMI (SEMI is Emacs MIME Interfaces).
;;;
(defconst mime-edit-RCS-ID
- "$Id: mime-edit.el,v 0.70 1997-03-07 14:06:53 morioka Exp $")
+ "$Id: mime-edit.el,v 0.85 1997-07-05 17:18:02 morioka Exp $")
-(defconst mime-edit-version (get-version-string mime-edit-RCS-ID))
+(defconst mime-edit-version `,(get-version-string mime-edit-RCS-ID))
(defconst mime-edit-version-name
- (concat "SEMI MIME-Edit " mime-edit-version))
+ `,(concat "SEMI MIME-Edit " mime-edit-version
+ " \"" semi-version-name "\""))
;;; @ variables
("html"
;;("charset" "" "ISO-2022-JP" "US-ASCII" "ISO-8859-1" "ISO-8859-8")
)
- ("x-rot13-47")
+ ("x-rot13-47-48")
)
("message"
("external-body"
("image"
("gif")
("jpeg")
+ ("png")
("tiff")
("x-pic")
("x-mag")
"base64"
"inline" (("filename" . file))
)
+ ("\\.png$"
+ "image" "png" nil
+ "base64"
+ "inline" (("filename" . file))
+ )
("\\.tiff$"
"image" "tiff" nil
"base64"
(defvar mime-edit-mode-flag nil)
(make-variable-buffer-local 'mime-edit-mode-flag)
-(defvar mime-edit-prefix "\C-c\C-x"
- "*Keymap prefix for MIME-Edit commands.")
-
-(defvar mime-edit-map (make-sparse-keymap)
- "Keymap for MIME commands.")
-
-(define-key mime-edit-map "\C-t" 'mime-edit-insert-text)
-(define-key mime-edit-map "\C-i" 'mime-edit-insert-file)
-(define-key mime-edit-map "\C-e" 'mime-edit-insert-external)
-(define-key mime-edit-map "\C-v" 'mime-edit-insert-voice)
-(define-key mime-edit-map "\C-y" 'mime-edit-insert-message)
-(define-key mime-edit-map "\C-m" 'mime-edit-insert-mail)
-(define-key mime-edit-map "\C-w" 'mime-edit-insert-signature)
-(define-key mime-edit-map "\C-s" 'mime-edit-insert-signature)
-(define-key mime-edit-map "\C-k" 'mime-edit-insert-key)
-(define-key mime-edit-map "t" 'mime-edit-insert-tag)
-(define-key mime-edit-map "a" 'mime-edit-enclose-alternative-region)
-(define-key mime-edit-map "p" 'mime-edit-enclose-parallel-region)
-(define-key mime-edit-map "m" 'mime-edit-enclose-mixed-region)
-(define-key mime-edit-map "d" 'mime-edit-enclose-digest-region)
-(define-key mime-edit-map "s" 'mime-edit-enclose-signed-region)
-(define-key mime-edit-map "e" 'mime-edit-enclose-encrypted-region)
-(define-key mime-edit-map "q" 'mime-edit-enclose-quote-region)
-(define-key mime-edit-map "7" 'mime-edit-set-transfer-level-7bit)
-(define-key mime-edit-map "8" 'mime-edit-set-transfer-level-8bit)
-(define-key mime-edit-map "/" 'mime-edit-set-split)
-(define-key mime-edit-map "v" 'mime-edit-set-sign)
-(define-key mime-edit-map "h" 'mime-edit-set-encrypt)
-(define-key mime-edit-map "\C-p" 'mime-edit-preview-message)
-(define-key mime-edit-map "\C-z" 'mime-edit-exit)
-(define-key mime-edit-map "?" 'mime-edit-help)
+(defvar mime-edit-mode-map (make-sparse-keymap)
+ "Keymap for MIME-Edit mode commands.")
+
+(define-key mime-edit-mode-map
+ "\C-c\C-x\C-t" 'mime-edit-insert-text)
+(define-key mime-edit-mode-map
+ "\C-c\C-x\C-i" 'mime-edit-insert-file)
+(define-key mime-edit-mode-map
+ "\C-c\C-x\C-e" 'mime-edit-insert-external)
+(define-key mime-edit-mode-map
+ "\C-c\C-x\C-v" 'mime-edit-insert-voice)
+(define-key mime-edit-mode-map
+ "\C-c\C-x\C-y" 'mime-edit-insert-message)
+(define-key mime-edit-mode-map
+ "\C-c\C-x\C-m" 'mime-edit-insert-mail)
+(define-key mime-edit-mode-map
+ "\C-c\C-x\C-w" 'mime-edit-insert-signature)
+(define-key mime-edit-mode-map
+ "\C-c\C-x\C-s" 'mime-edit-insert-signature)
+(define-key mime-edit-mode-map
+ "\C-c\C-x\C-k" 'mime-edit-insert-key)
+(define-key mime-edit-mode-map
+ "\C-c\C-xt" 'mime-edit-insert-tag)
+
+(define-key mime-edit-mode-map
+ "\C-c\C-m\C-a" 'mime-edit-enclose-alternative-region)
+(define-key mime-edit-mode-map
+ "\C-c\C-m\C-p" 'mime-edit-enclose-parallel-region)
+(define-key mime-edit-mode-map
+ "\C-c\C-m\C-m" 'mime-edit-enclose-mixed-region)
+(define-key mime-edit-mode-map
+ "\C-c\C-m\C-d" 'mime-edit-enclose-digest-region)
+(define-key mime-edit-mode-map
+ "\C-c\C-m\C-s" 'mime-edit-enclose-signed-region)
+(define-key mime-edit-mode-map
+ "\C-c\C-m\C-e" 'mime-edit-enclose-encrypted-region)
+(define-key mime-edit-mode-map
+ "\C-c\C-m\C-q" 'mime-edit-enclose-quote-region)
+
+(define-key mime-edit-mode-map
+ "\C-c\C-x7" 'mime-edit-set-transfer-level-7bit)
+(define-key mime-edit-mode-map
+ "\C-c\C-x8" 'mime-edit-set-transfer-level-8bit)
+(define-key mime-edit-mode-map
+ "\C-c\C-x/" 'mime-edit-set-split)
+(define-key mime-edit-mode-map
+ "\C-c\C-xs" 'mime-edit-set-sign)
+(define-key mime-edit-mode-map
+ "\C-c\C-xv" 'mime-edit-set-sign)
+(define-key mime-edit-mode-map
+ "\C-c\C-xe" 'mime-edit-set-encrypt)
+(define-key mime-edit-mode-map
+ "\C-c\C-xh" 'mime-edit-set-encrypt)
+(define-key mime-edit-mode-map
+ "\C-c\C-x\C-p" 'mime-edit-preview-message)
+(define-key mime-edit-mode-map
+ "\C-c\C-x\C-z" 'mime-edit-exit)
+(define-key mime-edit-mode-map
+ "\C-c\C-x?" 'mime-edit-help)
(defconst mime-edit-menu-title "MIME-Edit")
)
"MIME-edit menubar entry.")
-(defvar mime-edit-mode-map (make-sparse-keymap)
- "Keymap for MIME-Edit mode commands.")
-(define-key mime-edit-mode-map mime-edit-prefix mime-edit-map)
-
(cond (running-xemacs
;; modified by Pekka Marjola <pema@iki.fi>
;; 1995/9/5 (c.f. [tm-en:69])
)
))
-(cond (running-xemacs
- (add-minor-mode 'mime-edit-mode-flag
- '((" MIME-Edit " mime-transfer-level-string))
- mime-edit-mode-map
- nil
- 'mime-edit-mode)
- )
- (t
- (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)
- ))
-
;;; @ functions
;;;
(turn-on-mime-edit)
)))
+
+(cond (running-xemacs
+ (add-minor-mode 'mime-edit-mode-flag
+ '((" MIME-Edit " mime-transfer-level-string))
+ mime-edit-mode-map
+ nil
+ 'mime-edit-mode)
+ )
+ (t
+ (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."
;;;###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
(defun mime-edit-goto-tag ()
"Search for the beginning of the tagged MIME message."
- (let ((current (point)) multipart)
+ (let ((current (point)))
(if (looking-at mime-edit-tag-regexp)
t
;; At first, go to the end.
(defun mime-edit-content-end ()
"Return the point of the end of content."
(save-excursion
- (let ((beg (point)))
- (if (mime-edit-goto-tag)
- (let ((top (point)))
- (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))
- )))
+ (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."
(insert (format "Content-Transfer-Encoding: %s\n" encoding))
)
(insert "\n")
- (or (funcall (pgp-function 'mime-sign)
- (point-min)(point-max) nil nil pgp-boundary)
+ (or (as-binary-process
+ (funcall (pgp-function 'mime-sign)
+ (point-min)(point-max) nil nil pgp-boundary))
(throw 'mime-edit-error 'pgp-error)
)
))))
))))
(defun mime-edit-translate-single-part-tag (&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)
- (setq contype (mime-edit-get-contype tag))
- (setq encoding (mime-edit-get-encoding tag))
- (insert (concat prefix "--" boundary "\n"))
- (save-restriction
- (narrow-to-region (point)(point))
- (insert "Content-Type: " contype "\n")
- (if encoding
- (insert "Content-Transfer-Encoding: " encoding "\n"))
- (eword-encode-header)
- )
+ (let ((contype (mime-edit-get-contype tag))
+ (encoding (mime-edit-get-encoding tag))
+ )
+ (insert (concat prefix "--" boundary "\n"))
+ (save-restriction
+ (narrow-to-region (point)(point))
+ (insert "Content-Type: " contype "\n")
+ (if encoding
+ (insert "Content-Transfer-Encoding: " encoding "\n"))
+ (eword-encode-header)
+ ))
t)))
(defun mime-edit-translate-region (beg end &optional boundary multipart)
(intern (downcase charset))
(mime-edit-choose-charset)))
(mime-edit-define-charset charset)
- (cond ((string-equal contype "text/x-rot13-47")
+ (cond ((string-equal contype "text/x-rot13-47-48")
(save-excursion
(forward-line)
- (set-mark (point))
- (goto-char (mime-edit-content-end))
- (tm:caesar-region)
+ (mule-caesar-region (point) (mime-edit-content-end))
))
((string-equal contype "text/enriched")
(save-excursion
)
(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)
+ (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)
+ (replace-match
+ (concat (buffer-substring (match-beginning 0)
+ (match-end 1)) "\r\n"))
+ )))
+ (goto-char beg)
(mime-encode-region beg (mime-edit-content-end) encoding)
(mime-edit-define-encoding encoding)
))
))
(defun mime-edit-quitting-method ()
- (let ((temp mime::preview/article-buffer)
+ "Quitting method for mime-view."
+ (let ((temp mime-raw-buffer)
buf)
(mime-view-kill-buffer)
(set-buffer temp)