emy - SJIS text Attachment
Yoshiki Hayashi
yoshiki @ xemacs.org
2000年 11月 29日 (水) 15:06:07 JST
Yoshihiko Yamada <yyamada @ cac.co.jp> writes:
> CACの山田です。
> 前から、この話題ばかりで、恐縮です。
毎回 bug report をしていただいてありがとうございます。
> EMY-1.13.9 で sjis の text を mime-edit-insert-file したところ
> charset=iso-2022-jp
> となってしまいました。
すみません。かなりぼけてました。私の環境では以下の patch で
とりあえず日本語のファイルは大丈夫なことを確認しました。
# ますます何だかなぁという code になりつつありますが。(^^;;
-------------- next part --------------
Index: mime-edit.el
===================================================================
RCS file: /cvs/root/semi/mime-edit.el,v
retrieving revision 1.35.2.17.4.19
diff -u -r1.35.2.17.4.19 mime-edit.el
--- mime-edit.el 2000/10/16 15:06:34 1.35.2.17.4.19
+++ mime-edit.el 2000/11/29 05:45:48
@@ -1138,6 +1138,43 @@
(forward-char (cadr ret))
(mime-edit-force-text-tag mime-edit-single-part-regexp))))))
+(defun mime-edit-guess-charset (file)
+ (with-temp-buffer
+ (let (candidates candidate eol eol-string)
+ (set-buffer-multibyte nil)
+ (insert-file-contents-as-binary file)
+ (setq candidates (detect-coding-region (point-min) (point-max)))
+ (setq candidate (if (listp candidates)
+ (car candidates)
+ candidates))
+ (setq eol (coding-system-eol-type candidate))
+ (cond ((eq eol
+ (static-if (featurep 'xemacs)
+ 'lf
+ 0))
+ (setq eol-string "\n"))
+ ((eq eol
+ (static-if (featurep 'xemacs)
+ 'cr
+ 2))
+ (setq eol-string "\r")))
+ (goto-char (point-min))
+ (when eol-string
+ (while (search-forward eol-string nil t)
+ (replace-match "\r\n")))
+ (static-if (featurep 'xemacs)
+ (setq candidate (coding-system-name (coding-system-base candidate)))
+ (setq candidate (coding-system-base candidate)))
+ ;; #### FIXME
+ (cond ((eq candidate 'undecided)
+ (setq candidate "us-ascii"))
+ ((eq candidate 'iso-2022-7bit)
+ (setq candidate "iso-2022-jp"))
+ (t
+ (setq candidate
+ (symbol-name (coding-system-to-mime-charset candidate)))))
+ (cons candidate (buffer-string)))))
+
(defun mime-edit-insert-file (file &optional verbose)
"Insert a message from a FILE.
If VERBOSE is non-nil, it will prompt for Content-Type,
@@ -1150,7 +1187,7 @@
(encoding (nth 3 guess))
(disposition-type (nth 4 guess))
(disposition-params (nth 5 guess))
- string)
+ charset-and-string)
(if verbose
(setq type (mime-prompt-for-type type)
subtype (mime-prompt-for-subtype type subtype)))
@@ -1162,38 +1199,10 @@
(let ((rest parameters) cell attribute value)
(setq parameters "")
(when (string= type "text")
- (with-temp-buffer
- (let (candidates candidate eol eol-string)
- (set-buffer-multibyte nil)
- (insert-file-contents-as-binary file)
- (setq candidates (detect-coding-region (point-min) (point-max)))
- (setq candidate (if (listp candidates)
- (car candidates)
- candidates))
- (setq eol (coding-system-eol-type candidate))
- (cond ((eq eol
- (static-if (featurep 'xemacs)
- 'lf
- 0))
- (setq eol-string "\n"))
- ((eq eol
- (static-if (featurep 'xemacs)
- 'cr
- 2))
- (setq eol-string "\r")))
- (goto-char (point-min))
- (when eol-string
- (while (search-forward eol-string nil t)
- (replace-match "\r\n")))
- (setq string (buffer-string))
- ;; ####
- (set-buffer-multibyte t)
- (erase-buffer)
- (insert (decode-coding-string string candidate))
- (setq parameters
- (concat parameters "; charset="
- (symbol-name (detect-mime-charset-region
- (point-min) (point-max))))))))
+ (setq charset-and-string (mime-edit-guess-charset file))
+ (setq parameters
+ (concat parameters "; charset="
+ (car charset-and-string))))
(while rest
(setq cell (car rest))
(setq attribute (car cell))
@@ -1222,8 +1231,8 @@
(mime-edit-insert-place
(list type subtype)
(mime-edit-insert-tag type subtype parameters)
- (if string
- (mime-edit-insert-binary-string string encoding)
+ (if charset-and-string
+ (mime-edit-insert-binary-string (cdr charset-and-string) encoding)
(mime-edit-insert-binary-file file encoding)))))
(defun mime-edit-insert-external ()
-------------- next part --------------
> で、これは カーソルが Nana-Gnus の article buffer の 途中で実行した時で
> カーソルがbuffer の 最後の位置で同様に mime-edit-insert-file すると
> 以下のエラーになります。
これ、backtrace を見た感じでは、送信時のエラーのように見えま
す。Debian woody にある Emacs 20.7 と EMY 1.13.9 と
Wanderlust で test してみたのですが、私の環境では再現しませ
ん。山田さんの環境では必ず発生するのでしょうか? ちょっと今
Nana-gnus の環境が無いので確かめられませんが、どうも buffer
が narrow されているときの next-single-property-change の挙
動の違いのような気がします。
mime-edit-content-end の
(next-visible-point (point))
を
(next-single-property-change (point) 'mime-edit-invisible nil (point-max)))
とすると直ったりしますでしょうか。
--
Yoshiki Hayashi
More information about the Emacs-mime-ja
mailing list