2011年7月4日月曜日

emacs 23.3 shift-jis-2004 自動認識問題

文字コードの設定はこれで完璧とか言いながら使っていたのだが、どうも shift-jis-2004 で第四水準の漢字を使用していると文字コードの自動認識に失敗する。elisp的には問題なさそうなので C のソースコードを追いかけてみました。

その結果、Cの文字コード認識の部分のバグらしいことが判明しました。SJISの文字認識の部分へ必要なコーディング・システム情報が渡されていない模様。

とりあえず簡単な一行パッチだけどこれで治ります。

diff -urN emacs-23.3.orig/src/coding.c emacs-23.3/src/coding.c
--- emacs-23.3.orig/src/coding.c 2011-01-09 02:45:14.000000000 +0900
+++ emacs-23.3/src/coding.c 2011-06-14 10:04:41.998645428 +0900
@@ -6501,6 +6501,7 @@
   {
     category = coding_priorities[i];
     this = coding_categories + category;
+    coding->id = this->id;
     if (this->id < 0)
       {
         /* No coding system of this category is defined.  */

1 件のコメント:

  1. 半田です。パッチありがとうございます。確かに sjis の detector だけは coding->id を利用するのでした。
    ところでこのパッチを Emacs に取り込む場合 ChangeLog ファイルに以下のような記録をしないといけないので...

    2012-10-13 Name xxxx@yyy.zzz (tiny change)
    coding.c (detect_coding): ....

    handa at gnu dot org までお名前とメールアドレスをお送りいただけないでしょうか。もしこのような記録は残したくないという場合は私の名前で ChangeLog を書いておきますが。

    返信削除