[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-devel:17293] Re: man コマンドの挙動



椎谷と申します。

On Thu, 5 Jun 2008 09:38:46 +0900
TSUCHIYA Masatoshi <tsuchiya@xxxxxxxxxx> wrote:

> ビンゴ.col.c の該当部分の処理は,以下の通りで,まったくマルチバイト文字
> は考慮されていませんでした.
> 
> 	while ((ch = getchar()) != EOF) {
> 		if (!isgraph(ch)) {
> 			switch (ch) {
> 			case BS:		/* can't go back further */
> 				if (cur_col == 0)
> 					continue;
> 				--cur_col;
> 				continue;
> 
(中略)
> 
> col を通ってしまうと BS などが落ちてしまうわけですが,Emacs 付属の
> man.el は,BS などを解釈して,強調表示などを行うようにしています.
> なので,man.el から使う場合は col を通さない方が良いわけなんです.
> 
> というわけで,
> 
> (1) bsdmainutils に multibyte character が対応されていないぞと BTS
> (2) emacs22 に上記設定相当を組み込むように BTS
> 
> するのが正しい道のようです.

(1)に関しては、関連すると思われるバグ報告が既に上げられているようです。
#319952 とは違いますかね?
  http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=319952#33
を参照すると、col コマンドにはUTF-8 の処理に問題があり、
  http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/col/col.c#rev1.18
を参照すると、「Add support for multibyte characters」とあるので、
multibyte characterの問題はupstream であるFreeBSD側では、既に何らかの対処が
済んでいるようです。
この対処済みとされているコードを読んでもすぐ内容を理解できるほどのスキルが
私にないのが残念ですが、ぱっと見たところでは少なくともcol.c の
土屋さんが引用されていた部分には手が加えられているようでした。
また、
  http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=319952#42
を参照すると、「i'm currently working 〜」とあるので、
いつになるかは分からないとしても将来的にはDebianにもその修正が
取り込まれるのではないでしょうか。


(2)に関しては、私は普段emacsを使っていないので確信は持てないのですが、
man-db の changelog に以下のように書かれています。
  http://packages.debian.org/changelogs/pool/main/m/man-db/man-db_2.5.2-1/changelog
  man-db  (2.5.0-1) unstable; urgency=low
    * New upstream release.
      (中略)
      - If MAN_KEEP_FORMATTING is set in the environment, don't strip
        formatting characters with col (closes: #340673).

当方の環境はetchでman-dbのバージョンは2.4.3-6なので試せないのですが、
man-dbのバージョンが2.5.0-1以降であるtestingかsidを使用されているのであれば、
(1)の修正を待たずに現状のままでも、MAN_KEEP_FORMATTING という環境変数を設定
した状態でemacsを起動すれば、
emacsの中からmanを表示した場合でもman-dbの内部処理でcolが使われないように
なってmanの表示が改善されるようになったりしませんかね?
  # 起動例
  export MAN_KEEP_FORMATTING=1
  emacs

以上

--
椎谷 幸生 <shiiya @ sky.email.ne.jp>