SEMI: pgg-gpg: garbled non-ascii message

Daiki Ueno ueno @ unixuser.org
2003年 12月 16日 (火) 16:40:07 JST


上野です。

>>>>> In [emacs-mime-ja : No.01587] 
>>>>>	Shinichiro HIDA <shinichiro @ stained-g.net> wrote:
> 参考になるかどうかわかりませんが、追試してみました。

ありがとうございます。おかげさまで原因がわかったような気がします。

> 追試していて、変な現象に気づきました。
 
> [文字化けする場合]
>  3. wl の Message バッファで region を選択しても pgg-verify-region を
>     呼べない
>  4. 木下さんのメールで v を押すと文字化けする。

> [文字化けしない場合]
>  3. wl で w を押し、draft バッファを尽くり、pgg-sign-region する。
>  4. これ以降、すべての pgg-* で正しく日本語が表示出来る。

バッファの buffer-file-coding-system が確定していない時点で raw-text-dos 
を指定してファイルの内容を読み込むと自動的に unibyte buffer にされます。

(cf. M-x describe-coding-system raw-text-dos)
|When you visit a file with this coding, the file is read into a
|unibyte buffer as is (except for EOL format), thus each byte of a file
|is treated as a character.

これは以下のコードを *scratch* で二回以上実行することで確認できます。

(with-current-buffer (get-buffer-create " test")
  (erase-buffer)
  (set-buffer-multibyte t)
  (let ((coding-system-for-read 'raw-text-dos)
	(file (make-temp-file "/tmp/tst")))
    (unwind-protect
	(insert-file-contents file nil 0 0)
      (delete-file file)))
  enable-multibyte-characters)

pgg-gpg の場合、pgg-sign-region はファイルを作りませんが、
pgg-verify-region は空のファイルを作るため、これを raw-text-dos として読
み込んだ時点で " *PGG output*" バッファが unibyte にされてしまいます。

解決策としては以下の 3 つが考えられます:

1. " *PGG errors*" バッファから署名確認のメッセージをコピーする直前に
   " *PGG output*" バッファを multibyte にする

2. " *PGG output*" は unibyte, " *PGG errors*" は multibyte とみなし、
   " *PGG output*" を介さずに " *PGG errors*" から署名確認のメッセージを
   コピーする

3. サイズが 0 のファイルは読み込まない

まともなのは 2. だと思いますが、とりあえず 1. の修正を添付いたします。
-- 
Daiki Ueno
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: pgg-gpg.el.diff
型:         application/octet-stream
サイズ:     595 バイト
説明:       無し
URL:        <http://lists.chise.org/pipermail/emacs-mime-ja/attachments/20031216/d29fd9a8/attachment.obj>


More information about the Emacs-mime-ja mailing list