X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=mime-edit.el;h=9c42e2b29c4bb7db8e47357372e7524331d3c62c;hb=a418e1c8b54f1dfb2e4f648b30107c0e9b5ae98b;hp=466effdd891b88248539a6c20e60b55f592f0a86;hpb=3f5b9a837c8505db9958d2012a0c74daa15ea747;p=elisp%2Fsemi.git diff --git a/mime-edit.el b/mime-edit.el index 466effd..9c42e2b 100644 --- a/mime-edit.el +++ b/mime-edit.el @@ -24,8 +24,8 @@ ;; 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., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: @@ -205,6 +205,7 @@ To insert a signature file automatically, call the function ("enriched") ("html") ("css") ; rfc2318 + ("csv") ; rfc4180 ("xml") ; rfc2376 ("x-latex") ;; ("x-rot13-47-48") @@ -234,23 +235,76 @@ To insert a signature file automatically, call the function ("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") ("x-kiss" ("x-cnf"))) ("image" + ("bmp") ("gif") ("jpeg") ("png") + ("svg+xml") ("tiff") ("x-pic") ("x-mag") ("x-xwd") - ("x-xbm") - ) - ("audio" ("basic")) - ("video" ("mpeg")) - ) + ("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 @@ -284,12 +338,30 @@ To insert a signature file automatically, call the function ;; Text or translated text - ("\\.txt$" + ("\\.txt$\\|\\.pln$" "text" "plain" nil nil "inline" (("filename" . file)) ) + ("\\.css$" + "text" "css" nil + nil + "inline" (("filename" . file)) + ) + + ("\\.csv$" + "text" "csv" nil + nil + "inline" (("filename" . file)) + ) + + ("\\.tex$\\|\\.latex$" + "text" "x-latex" nil + nil + "inline" (("filename" . file)) + ) + ;; .rc : procmail modules pm-xxxx.rc ;; *rc : other resource files @@ -314,27 +386,200 @@ To insert a signature file automatically, call the function "text" "plain" nil nil nil nil) - ;; Octect binary text + ("\\.js$" + "application" "javascript" nil + nil + "inline" (("filename" . file)) + ) + + ;; Microsoft Project + ("\\.mpp$" + "application" "vnd.ms-project" nil + "base64" + "attachment" (("filename" . file)) + ) + + + ;; Microsoft Office (none-OpenXML) + + ("\\.rtf$" ; Rich text format + "application" "rtf" nil + "base64" + "attachment" (("filename" . file)) + ) ("\\.doc$" ;MS Word "application" "msword" nil "base64" "attachment" (("filename" . file)) ) + ("\\.xls$" ; MS Excel + "application" "vnd.ms-excel" nil + "base64" + "attachment" (("filename" . file)) + ) ("\\.ppt$" ; MS Power Point "application" "vnd.ms-powerpoint" nil "base64" "attachment" (("filename" . file)) ) - ("\\.pln$" - "text" "plain" nil - nil - "inline" (("filename" . file)) + + ;; Microsoft Office (OpenXML) + + ; MS Word + ("\\.docm$" + "application" "vnd.ms-word.document.macroEnabled.12" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.docx$" + "application" "vnd.openxmlformats-officedocument.wordprocessingml.document" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.dotm$" + "application" "vnd.ms-word.template.macroEnabled.12" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.dotx$" + "application" "vnd.openxmlformats-officedocument.wordprocessingml.template" nil + "base64" + "attachment" (("filename" . file)) + ) + + ; MS Power Point + ("\\.potm$" + "application" "vnd.ms-powerpoint.template.macroEnabled.12" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.potx$" + "application" "vnd.openxmlformats-officedocument.presentationml.template" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.ppam$" + "application" "vnd.ms-powerpoint.addin.macroEnabled.12" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.ppsm$" + "application" "vnd.ms-powerpoint.slideshow.macroEnabled.12" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.ppsx$" + "application" "vnd.openxmlformats-officedocument.presentationml.slideshow" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.pptm$" + "application" "vnd.ms-powerpoint.presentation.macroEnabled.12" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.pptx$" + "application" "vnd.openxmlformats-officedocument.presentationml.presentation" nil + "base64" + "attachment" (("filename" . file)) + ) + + ; MS Excel + ("\\.xlam$" + "application" "vnd.ms-excel.addin.macroEnabled.12" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.xlsb$" + "application" "vnd.ms-excel.sheet.binary.macroEnabled.12" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.xlsm$" + "application" "vnd.ms-excel.sheet.macroEnabled.12" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.xlsx$" + "application" "vnd.openxmlformats-officedocument.spreadsheetml.sheet" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.xltm$" + "application" "vnd.ms-excel.template.macroEnabled.12" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.xltx$" + "application" "vnd.openxmlformats-officedocument.spreadsheetml.template" nil + "base64" + "attachment" (("filename" . file)) ) + + + ;; Open Office + ("\\.odt$" + "application" "vnd.oasis.opendocument.text" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.ods$" + "application" "vnd.oasis.opendocument.spreadsheet" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.odg$" + "application" "vnd.oasis.opendocument.graphics" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.odf$" + "application" "vnd.oasis.opendocument.formula" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.odm$" + "application" "vnd.oasis.opendocument.text-master" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.odp$" + "application" "vnd.oasis.opendocument.presentation" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.ott$" + "application" "vnd.oasis.opendocument.text-template" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.ots$" + "application" "vnd.oasis.opendocument.spreadsheet-template" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.otp$" + "application" "vnd.oasis.opendocument.presentation-template" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.otg$" + "application" "vnd.oasis.opendocument.graphics-template" nil + "base64" + "attachment" (("filename" . file)) + ) + + ;; Postscript and PDF ("\\.ps$" "application" "postscript" nil - "quoted-printable" + "base64" + "attachment" (("filename" . file)) + ) + ("\\.pdf$" + "application" "pdf" nil + "base64" "attachment" (("filename" . file)) ) @@ -355,6 +600,16 @@ To insert a signature file automatically, call the function "base64" "inline" (("filename" . file)) ) + ("\\.bmp$" + "image" "bmp" nil + "base64" + "inline" (("filename" . file)) + ) + ("\\.svg$" + "image" "svg+xml" nil + "base64" + "inline" (("filename" . file)) + ) ("\\.tiff$" "image" "tiff" nil "base64" @@ -380,16 +635,58 @@ To insert a signature file automatically, call the function "base64" "inline" (("filename" . file)) ) - ("\\.au$" + + ;; Audio and video + + ("\\.au$\\|\\.snd$" "audio" "basic" nil "base64" "attachment" (("filename" . file)) ) - ("\\.mpg$" + ("\\.mp[234]\\|\\.m4[abp]$" + "audio" "mpeg" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.ogg$" + "audio" "ogg" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.ogg$" + "audio" "vorbis" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.mpg\\|\\.mpeg$" "video" "mpeg" nil "base64" "attachment" (("filename" . file)) ) + ("\\.mp4\\|\\.m4v$" + "video" "mp4" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.qt$\\|\\.mov$" + "video" "quicktime" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.flv$" + "video" "x-flv" nil + "base64" + "attachment" (("filename" . file)) + ) + ("\\.swf$" + "application" "x-shockwave-flash" nil + "base64" + "attachment" (("filename" . file)) + ) + + + ;; Compressed files + ("\\.tar\\.gz$" "application" "octet-stream" (("type" . "tar+gzip")) "base64" @@ -430,6 +727,11 @@ To insert a signature file automatically, call the function "base64" "attachment" (("filename" . file)) ) + ("\\.7z$" + "application" "x-7z-compressed" nil + "base64" + "attachment" (("filename" . file)) + ) ;; Rest @@ -498,6 +800,8 @@ If encoding is nil, it is determined from its contents." (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") @@ -723,7 +1027,7 @@ Tspecials means any character that matches with it in header must be quoted.") (concat "MIME-Version:" (mime-encode-field-body (concat " 1.0 (split by " mime-edit-version ")\n") - "MIME-Version:")) + "MIME-Version")) "MIME version field for message/partial.") @@ -1052,10 +1356,11 @@ User customizable variables (not documented all of them): (enable-invisible) - ;; I don't care about saving these. + (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)) @@ -1141,13 +1446,10 @@ If optional argument SUBTYPE is not nil, text/SUBTYPE tag is inserted." (disposition-type (nth 4 guess)) (disposition-params (nth 5 guess)) ) - (if verbose - (setq type (mime-prompt-for-type type) - subtype (mime-prompt-for-subtype type subtype) - )) (if (or (interactive-p) verbose) - (setq encoding (mime-prompt-for-encoding encoding)) - ) + (setq type (mime-prompt-for-type type) + subtype (mime-prompt-for-subtype type subtype) + encoding (mime-prompt-for-encoding encoding))) (if (or (consp parameters) (stringp disposition-type)) (let ((rest parameters) cell attribute value) (setq parameters "") @@ -1718,6 +2020,7 @@ Parameter must be '(PROMPT CHOICE1 (CHOICE2...))." ) (delete-region beg end) (or (looking-at mime-edit-beginning-tag-regexp) + (looking-at mime-edit-multipart-end-regexp) (eobp) (insert (concat (mime-make-text-tag) "\n")) ))) @@ -1777,6 +2080,13 @@ Parameter must be '(PROMPT CHOICE1 (CHOICE2...))." (defvar mime-edit-pgp-user-id nil) +(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-sign-pgp-mime (beg end boundary) (save-excursion (save-restriction @@ -1788,6 +2098,7 @@ Parameter must be '(PROMPT CHOICE1 (CHOICE2...))." (encoding (nth 1 ret)) (pgp-boundary (concat "pgp-sign-" boundary)) micalg) + (mime-edit-delete-trailing-whitespace) ; RFC3156 (goto-char beg) (insert (format "Content-Type: %s\n" ctype)) (if encoding @@ -1798,7 +2109,8 @@ Parameter must be '(PROMPT CHOICE1 (CHOICE2...))." (or mime-edit-pgp-user-id (if from (nth 1 (std11-extract-address-components from)) - pgg-default-user-id)))) + pgg-default-user-id))) + (pgg-text-mode t)) (pgg-sign-region (point-min)(point-max))) (throw 'mime-edit-error 'pgp-error) ) @@ -1889,7 +2201,8 @@ Content-Transfer-Encoding: 7bit (or mime-edit-pgp-user-id (if from (nth 1 (std11-extract-address-components from)) - pgg-default-user-id)))) + pgg-default-user-id))) + (pgg-text-mode t)) (pgg-encrypt-region (point-min) (point-max) (mapcar (lambda (recipient) @@ -1908,6 +2221,7 @@ Content-Transfer-Encoding: 7bit --%s Content-Type: application/pgp-encrypted +Version: 1 --%s Content-Type: application/octet-stream Content-Transfer-Encoding: 7bit @@ -2300,7 +2614,13 @@ Content-Description: S/MIME Encrypted Message][base64]]\n") (narrow-to-region beg (mime-edit-content-end)) (goto-char beg) (while (re-search-forward "\\(\\=\\|[^\r]\\)\n" nil t) - (replace-match "\\1\r\n")))) + ;; 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")) @@ -2557,11 +2877,11 @@ Optional TRANSFER-LEVEL is a number of transfer-level, 7 or 8." (setq mime-edit-pgp-processing (nconc mime-edit-pgp-processing (copy-sequence '(encrypt))))) - (message "This message will be encrypt.") + (message "This message will be encrypted.") ) (setq mime-edit-pgp-processing (delq 'encrypt mime-edit-pgp-processing)) - (message "This message will not be encrypt.") + (message "This message will not be encrypted.") )) (defun mime-edit-pgp-enclose-buffer () @@ -2571,20 +2891,13 @@ Optional TRANSFER-LEVEL is a number of transfer-level, 7 or 8." (match-end 0) ))) ) - (if beg - (dolist (pgp-processing mime-edit-pgp-processing) - (case pgp-processing - (sign - (mime-edit-enclose-pgp-signed-region - beg (point-max)) - ) - (encrypt - (mime-edit-enclose-pgp-encrypted-region - beg (point-max)) - ))) + (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 ;;; @@ -2610,10 +2923,10 @@ Content-Type: message/partial; id=%s; number=%d; total=%d\n%s\n" (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) "\""))) + (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*")) @@ -2712,6 +3025,7 @@ Content-Type: message/partial; id=%s; number=%d; total=%d\n%s\n" ;;; (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."