2005年11月23日 (水曜日)

14:20:44 # Life statの変更にはまる. cowdancerはstat(1)コマンドを内部で利用しています. stat --formatの出力が 従来改行コードを出力していたのが,出力しなくなりました. 古いバージョンと今のバージョンの両方で動くコードというのがなかなかおもいつかないので困りました. 339136. 二週間前くらいにDebian sid にアップロードされた coreutilsはsargeにあったバージョンから大幅に変更になっているので,バグ出し必要ですね.

もうひとつひっかかったのが, cp -al 1/ 2/ は以前うごいていたのですが, 2/が無い場合に関して, cp -al 1/ 2 にしないと動かなくなりました. こっちのほうがはまる人いるかな?

21:45:26 # Life emacsでYaTeXでeucのファイルを編集しようとすると,jisに変換されてしまう. 特に設定した記憶もないので,追跡調査してみた. マニュアルを読むと書いてあった. どうやら YaTeX-coding-system に定義されているコードに強制設定されるようになるため, YaTeX-kanji-code に設定してあげる必要がある. 0が変換しない,という設定のような気がしたのだが,0を使うとなんだかemacsの内部コードみたいなもので保存されてしまった(見た感じはUTF16). デフォルトだと iso-2022-jp に強制的に変換される. 仕方がないので,とりあえず適当に条件分岐させてyatex-mode-hookに追加させてみた. (if (string-match "^/path/to/dir" default-directory) (progn (set-buffer-file-coding-system 'euc-jp) (set-buffer-modified-p nil))) 自動認識とかしてほしいのだが,どうしようもないか...

コード解析: /usr/share/emacs/site-lisp/yatex/yatexlib.elYaTeX-kanji-code-alistというそれっぽいものが定義されている. yatex.elの中で YaTeX-emacs-20がtの場合については, (cdr (assoc YaTeX-kanji-code YaTeX-kanji-code-alist)))) というように使われているので,YaTeX-kanji-codeがいくつか,によるらしい. しかし,この値をロードされるファイルによって変更するというのは微妙に面倒で, 普通にyatex-mode-hookをロードされる時点ではYaTeX-kanji-codeに変更されてしまった後(yatex-mode()参照). 新規作成する以外は既存のコーディングシステムを採用するという手法はとっちゃいかんのかねぇ. ところで,/etc/emacs/site-start.d/50yatex-init.elに書いてあるgimvってビューアは存在しないと思うのだが,何者なのだろうか?

 -- Variable: YaTeX-kanji-code
     文書を作成する時の漢字コード 1=Shift JIS, 2=JIS, 3=EUC (2 (MS-DOSでは
     1))
	

latex-modeを使っている場合と,yatex-modeでどう違うのか,ということを比較した場合に, \footnoteの中身が違う色で表示してくれるという部分にけっこう依存しているということに気づいた. まぁ,長年yatex-modeを使っているので,いろいろと慣れてしまってます... yatex-modeauto-fill されてしまうのが困るな. これも他のバッファとあわせています,と説明には書いてある.text-modeを継承しているからだろうか? M-x toggle-text-mode-auto-fillでなんとかなるのだろうか?

22:30:59 # Life svn diff の日本語訳出力がおかしい. svn diff を使ってみたところ,なぜだか locale を無視して utf-8 で出力しているようです. svn diff で表示される差分自体はEUC文字列なので,UTF-8でヘッダ部 分を表示してくれるとlvなどのページャが混乱し,問題になります. みんな utf-8 locale を使っているから気づいていないのでしょうか?

ChangeLogを見ているかぎりでは,subversion はファイル名とかをUTF-8で内部で保持しているっぽい. log については少なくとも内部ではutf-8で保存しているっぽい. ファイルの中身まで漢字コード変換とかかけてくれていたりするのでしょうか. これは,たとえlocaleにあわせた出力をしてくれたとしても, localeにあった文字コードでファイルが保存されているとは限らないため, svn diffの出力を処理するのには問題が生じそうですね.なやましい.

$  locale -k charmap
charmap="EUC-JP"
$ svn diff | head -4 | iconv -f utf-8 -t euc-jp
Index: XXX
===================================================================
--- XXX (リビジョン 17)
+++ XXX (作業コピー)
	  
	

diff_content_changed(subversion/libsvn_client/diff.c) で実際は呼び出している svn_diff__file_output_unified(subversion/libsvn_diff/diff_file.c) diff_labelで生成されており,その時点ではおそらくutf-8. svn_diff_file_output_unifiedではsvn_stream_printfでそのまま出力されている. うーむ.diff.cにはfile_printf_from_utf8という関数が定義されており, 気を使っているようにみえるのだが,実際のdiffを表示しているところがlocaleを無視しているのか? 推理を裏付ける調査をする気力がないのでこのへんで.

小林さんから ずいぶん前から上流のバグとして登録されているもので, 5月ころにすでに解決されていて もうすぐリリースされることになっている1.3では修正が含まれることになっているということを教えてもらいました.

Junichi Uekawa

$Id: dancer-diary.el,v 1.89 2005/05/12 11:19:14 dancer Exp $