[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:30379] Re: xemacs21 で日本語 man ページが表示できない
At Sat, 27 Oct 2001 05:09:20 +0900,
Ippei Tamura wrote:
> > ?? lv で動いてますよ?
> >
> > どうして直ったのかもう少し詳しいレポートを下さい。
>
> 了解しました。すこし長くなりますが、もう一度、現象と私が行なった
> 試行錯誤について報告します。
>
> 1. 現象
> * XEmacs21 で、M-x manual-entry hoge にて日本語訳が用意されている
> man ページを開くことができない (英語の man ページしかないコマンドは
> 表示できる)。ミニバッファに '(cleaning...)' と表示されたきりになる
> (CPU の負荷は最大値キープ。C-g で脱出は可能)。
>
> * この現象は、X 上で XEmacs を起動した場合のみであり、jfbterm 上から
> 起動した場合は、何ら問題なく日本語 man ページが表示される。
>
> 2. 試行錯誤 らしきもの ;-)
> * X 上から XEmacs を起動し、shell モードに入る。そのコマンドプロンプト
> から man コマンドを実行。結果は次の通り。
>
> $PAGER=lv の場合
> ~$ echo $PAGER
> lv
> ~$ man man
> man(1) を再フォーマットしています。しばらくお待ちください...
> lv: emacs not found in termcap
> man: コマンドはステータス 65280 で終了しました: /usr/bin/zsoelim /tmp/zmanEI37Qc | /usr/bin/tbl | /usr/bin/nroff -mandoc -Tnippon | lv
なるほど。たしかに shell-mode で lv がエラーをはきますね。
これは TERM 絡みのようです。shell-mode で TERM=vt100 とし
て man man すると jless 同様に表示されると思います。
まず問題として言えるのは、emacsen が起動したときに TERM がemacs になっ
ているにも関わらず、/usr/lib/terminfo/e/emacs が存在しないので、エラー
が出ているということです(バグ?)。
また、lv はうまく表示できない端末だとエラー終了するのに対し、jless は
無理やり表示しようとするのが、この動作の違いになっているようです。この
問題はメールの最後につけたパッチをあてると解消されると思います。なんと
なくこのパッチをデフォルトであてておいた方が、エラー終了しなくて嬉しそ
うですが、いかがでしょうか?
> $PAGER=jless の場合
> ~$ echo $PAGER
> jless
> ~$ man man
> man(1) を再フォーマットしています。しばらくお待ちください...
> WARNING: terminal is not fully functional
>
- (press RETURN)
>
> * この後、return キーを連打すれば、日本語 man ページの内容は
> 次のような不完全な整形ではあるが表示される。
>
>
man(1) Manual pager utils man(1)
これは terminfo が適切に設定されていないことに起因するようです。
> 3. 対処
> ここまで来た時点で、もしやと思い、~/.bashrc で環境変数 PAGER を
> jless に設定するように編集してから再起動して見たところ、無事、
> M-x man hoge にて日本語 man ページが表示された次第です。
shell-mode だと man -P<PAGER> man (<PAGER> に lv とか jless とか
いれる) するとすぐ違いが分かります。
> > pager に more や less を使った場合などを試さない限り jless で
> > あれば動く、または lv だから動かないという話にはなりませんね。
>
> PAGER=less あるいは more のケースは試していませんでした :-p
> そこで、いま試してみたら結果は次の通りとなりました。
> PAGER=less -> ミニバッファに "man hoge not found" と表示され、
> エラーとなる (英語の man ページは問題なし)。
> PAGER=more -> 問題なく表示可能。
私の環境では
shell-mode man-mode
lv: エラーで表示不能 OK ← わたしのところでは OK です。
less: 日本語が出なくて停止 OK
jless: 崩れたまま無理やり表示 上記のエラーで動作せず
more: 日本語出ないし崩れる OK
man-mode で less が動作しないのも問題っぽいですね。
さらに emacs20 だと
shell-mode man-mode
lv: 同様のエラーで表示不能 OK (^H^H などが出る)
less: lv同様のエラー 上記エラーで動作せず
jless: なんとか出る 日本語が出ない
more: 表示はされるが日本語が出ない 日本語が出ない
jless や more では日本語が出なくなってしまいました。
Bugs#55892 (xemacs21: In Japanese(LANG=ja_JP.ujis) environment,
manual-entry fuction lack a multi-byte character.) のせいかもしれない
です (が何故 lv ででるんだろう?).
> 4. 関連パッケージ
> ~$ dpkg -l | grep xemacs21
> ii xemacs21 21.4.4-1 Editor and kitchen sink
> ii xemacs21-bases 2001.07.09-2 Editor and kitchen sink -- compiled elisp su
> ii xemacs21-bin 21.4.4-1 Editor and kitchen sink -- support binaries
> ii xemacs21-mule- 21.4.4-1 Editor and kitchen sink -- Mule binary compi
> ii xemacs21-mules 2001.07.09-1 Editor and kitchen sink -- Mule elisp suppor
> ii xemacs21-suppo 21.4.4-1 Editor and kitchen sink -- architecture inde
>
> ~$ dpkg -l | grep lv
> ii lv 4.49.4-1 A Powerful Multilingual File Viewer
>
> ~$ dpkg -l | grep jless
> ii jless 358-iso254-1 A file pager program, similar to more(1) sup
>
> とりあえず以上ですが、他に不足している情報ありましたら、
> 指示をお願いします。
これは単に PAGER のせいというよりは emacsen 側に terminfo が
ないという問題が大きそうです。各種 emacsen へ状況を BTS するのが
適切かと思います。
また、lv がエラーを吐くのは、先ほどのパッチで解決できるので、
希望があれば .deb につっこみます。
# emacsen で man や shell-mode を使っている人が
# そんなにいないので問題になっていない予感が… :-D
-- gotom
--- lv4494/src/console.c Mon Jun 26 20:39:29 2000
+++ lv4494.new/src/console.c Sat Oct 27 13:50:08 2001
@@ -291,9 +291,9 @@
byte *term, *ptr;
if( NULL == (term = getenv( "TERM" )) )
- fprintf( stderr, "lv: environment variable TERM is required\n" ), exit( -1 );
+ fprintf( stderr, "lv: environment variable TERM is required\n" );
if( 0 >= tgetent( entry, term ) )
- fprintf( stderr, "lv: %s not found in termcap\n", term ), exit( -1 );
+ fprintf( stderr, "lv: %s not found in termcap\n", term );
ConsoleGetWindowSize();
@@ -326,7 +326,7 @@
cur_npage = tgetstr( "kN", &ptr );
if( NULL == cursor_address || NULL == clear_screen || NULL == clr_eol )
- fprintf( stderr, "lv: termcap cm, cl, ce are required\n" ), exit( -1 );
+ fprintf( stderr, "lv: termcap cm, cl, ce are required\n" );
if( NULL == insert_line || NULL == delete_line )
no_scroll = TRUE;
@@ -339,11 +339,11 @@
int state;
if( NULL == (term = getenv( "TERM" )) )
- fprintf( stderr, "lv: environment variable TERM is required\n" ), exit( -1 );
+ fprintf( stderr, "lv: environment variable TERM is required\n" );
setupterm( term, 1, &state );
if( 1 != state )
- fprintf( stderr, "lv: cannot initialize terminal\n" ), exit( -1 );
+ fprintf( stderr, "lv: cannot initialize terminal\n" );
ConsoleGetWindowSize();
@@ -355,7 +355,7 @@
cur_npage = key_npage;
if( NULL == cursor_address || NULL == clear_screen || NULL == clr_eol )
- fprintf( stderr, "lv: terminfo cursor_address, clr_eol are required\n" ), exit( -1 );
+ fprintf( stderr, "lv: terminfo cursor_address, clr_eol are required\n" );
if( NULL == insert_line || NULL == delete_line )
no_scroll = TRUE;