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

[debian-devel:12301] alternative for xdvi ? (Re: Re: [RFC] dummy package for slink-jp topotato)



佐野@浜松です。

ちょっと前の部分にフォローしますが

In article <20000510130951H.kohda@xxxxxxxxxxxxxxxxxxxx>,
  at "Wed, 10 May 2000 13:07:32 +0900',
 Atsuhito Kohda <kohda@xxxxxxxxxxxxxxxxxxxx> さん writes:

> From: Kenshi Muto <kmuto@xxxxxxxxxxxxxxx>
> Date: Wed, 10 May 2000 11:28:01 +0900
> 
> > 武藤@Debianぷろじぇくとです。
> > 
> > kohda> xdvik-ja が diversion したり high priority で alternative
> > kohda> していたら、たまに日本語 DVI を見るような人の xdvi も xdvik-ja
> > kohda> の物になりますよね。で問題ないうちは良いのですがある日 xdvi
> > kohda> が動かなくなったら、そういう人はクレーム出すのでは、という
> > kohda> ことですが。
> > 
> > ??
> > うーん、なんかよくわかんないや (;_;)
> > 動かなくなるのはバグ扱いだから報告は当然、じゃないのですか?
> 
> いえ、クレーム出すのは良いのですが、それに対応
> するには tetex-* を旧版に戻してもらうしかない場合
> の話なんですよ。
> 
> ともかくメイン環境が tetex で与えられてる以上 tetex
> の xdvi が一番安全なのは確かで xdvik-ja の類いは常に
> 問題が内在してる訳です。

個人的には、alternative 使って lower priority にすれば
必要な人は update-alternatives すればいいからそれで問題無いのでは、
という気もします。

が、そのためには、まず tetex-bin に含まれる xdvi が alternative 対応に
なってないといけないわけですが、実は xaw-wrappers がこれに絡んでますね。

/usr/X11R6/bin/xdvi と /usr/X11R6/bin/xdvi-ja の違いは (どちらも sh script) 
最後のほうの数行で、結局 xdvi では xdvi.bin を呼び、xdvi-ja では xdvi-ja.bin を
呼ぶ点の違いが -ja ある無しの違いに直接関係する部分 (あとの違いは圧縮ファイルを
扱えるようにしてあるかどうか) だと思うので、xdvi-ja.real (or xdvi-ja.small.real) を
 alternative で登録すればいいかと思ったけれど、この場合は xaw-wrappers より
 priority を挙げないとダメそうです。

# ついでに、update-alternatives の日本語版マニュアルって誰か更新してくれてます ? 
# 現状は情報を見るためにいちいち LANG=C しないと読めないので、非常に面倒です。
# ユーザーのためにはなってないと思う。

試しに手動で

sudo /usr/sbin/update-alternatives --install /usr/X11R6/bin/xdvi.bin \ 
   xdvi.bin /usr/X11R6/bin/xdvi-ja.small.real 55

としてみたら、"xdvi" というコマンドで日本語 dvi ファイルが表示できましたよ ?

 xaw-wrappers が 50 で登録されているので、それ以下ではダメだと思います。

 $ cat /var/lib/dpkg/alternatives/xdvi.bin
auto
/usr/X11R6/bin/xdvi.bin

/usr/share/xaw-wrappers/wrapper
50
/usr/X11R6/bin/xdvi.real
30
/usr/X11R6/bin/xdvi-ja.small.real
50

これだと

Virtual character 20292 in font goth10 ignored.

とかいうエラーが延々と出ます。

 $ cat /var/lib/dpkg/alternatives/xdvi.bin
auto
/usr/X11R6/bin/xdvi.bin

/usr/share/xaw-wrappers/wrapper
50
/usr/X11R6/bin/xdvi.real
30
/usr/X11R6/bin/xdvi-ja.small.real
51

こっちは OK。

で、問題は xaw-wrappers がどうなっているのか、(何をやっているのか) という
点なんですが、 /usr/share/xaw-wrappers/wrapper の中では

# Loading this package causes all config files to be read.
BEGIN { unshift @INC, "/usr/share/xaw-wrappers/" }
use XawWrapper;

とかあって、/usr/share/xaw-wrappers/XawWrapper.pm も読まないと
いけないみたいですね。

で、wrapper スクリプト本体のほうでは

my $this=FindLinkName($0);
print "Wrapped program is: $XawWrapper::wrapped{$this}\n" if $ENV{XAW_WRAPPERS_D
EBUG};  

となっていて、呼び出された名前 (今の場合なら xdvi.bin とか /usr/X11R6/bin/xdvi.bin
 とかですね) を FindLinkName() に渡して実体を探しているようです。

FindLinkName() は wrapper の中にあって

sub FindLinkName { $_=shift;
        my $dirty=undef; # set to 1 if we encounter a symlink.
        my @list=split(m:/:, $_);

        my $a=undef;
        foreach $elt (@list) {
                if (-l "$a/$elt") {
                        my $b=readlink("$a/$elt");
                        # We don't want to dereference the symlink that
                        # actually points to the wrapper itself.
                        if ($b=~m:/usr/share/xaw-wrappers/wrapper: eq undef) {
                                $dirty=1;
                                if ($b=~m:^/: eq undef) {
                                 # relative symlink, add to current pwd.
                                        $a.="/$b";
                                }
                                else { # absolute symlink, replaces current pwd.
                                        $a=$b;
                                }
                        }
                        else {
                                return $elt;
                        }
                }
                else { # normal directory or file, add to pwd.
                        $a.="/$elt";
                }
        }       

        if ($dirty) {
                return FindLinkName($a);
        }
        else {
                die "xaw-wrapper: $0 doesn't resolve to me!";
        }
 
となってます。

例によって joeyh のスクリプトなんでわかりにくいのですが、これは
 /usr/share/xaw-wrappers/config に登録しておかないといけないのかな ?

もう一度 /var/lib/dpkg/info/xdvi-ja.postinst を見ると、

# Automatically added by dh_installxaw
if test -x /usr/sbin/update-xaw-wrappers; then
        /usr/sbin/update-xaw-wrappers
fi

というのがありますね。。。

 /usr/share/xaw-wrappers/config/xdvik-ja が関連してるみたいですね。

うーむ。試しに

 $ cat /usr/share/xaw-wrappers/config/xdvi
Program: /usr/X11R6/bin/xdvi.bin
Incompat: /usr/X11R6/lib/neXtaw
Wrapped: /usr/X11R6/bin/xdvi-ja.small.real
Link-name: xdvi.bin

というファイルを作って /usr/sbin/update-xaw-wrappers を実行してみたけど
なんかこれ自身はあんまり関係無さそう。単に update-alternatives を呼んで
いるだけ ?

よーわからん。 /usr/doc/xaw-wrappers/README.packages.gz を見ると、
どうも xaw-wrappers は複数の選択肢がある場合を想定していないみたいにも
見える。

念のために

 mkdir /usr/lib/xdvik-ja; cd /usr/lib/xdvik-ja;
 ln /usr/X11R6/bin/xdvi-ja.small.real ./xdvi.real;

として /usr/share/xaw-wrappers/config から先程の xdvi を削除し、

 $ cat /usr/share/xaw-wrappers/config/xdvik-ja 
Program: /usr/X11R6/bin/xdvi-ja.bin
Incompat: /usr/X11R6/lib/neXtaw
Wrapped: /usr/X11R6/bin/xdvi-ja.real
Link-name: xdvi-ja.bin

Program: /usr/X11R6/bin/xdvi-ja.small.bin
Incompat: /usr/X11R6/lib/neXtaw
Wrapped: /usr/X11R6/bin/xdvi-ja.small.real
Link-name: xdvi-ja.small.bin

Program: /usr/X11R6/bin/xdvi.bin
Incompat: /usr/X11R6/lib/neXtaw
Wrapped: /usr/lib/xdvik-ja/xdvi.real
Link-name: xdvi.bin

と最後の 1 つを追加した状態で /usr/sbin/update-xaw-wrappers を
実行し、とやってみたけれど、やっぱり xaw-wrappers を経由すると
 xdvi.real のほうが実行されてしまうみたいだ。

# 当然 
#
#   sudo /usr/sbin/update-alternatives --install /usr/X11R6/bin/xdvi.bin \
#   xdvi.bin /usr/lib/xdvik-ja/xdvi.real 35
#
# は実行済み。

つうことで、xaw-wrappers を経由して alternatives 使って xdvi-ja(.small).real を
 xdvi として使うには、joeyh と喧嘩^H^H^H^Hきちんと議論 (これが難しいんだ、やって
みればわかるけど) して xaw-wrappers をなんとかしないと、という話に結びつくような
気がします。

そのへんが「@Org で議論」につながってるんじゃぁないかなぁ、と考えたり。

とりあえず neXtaw を使わなければ xaw-wrappers を回避しても問題無いのなら

「必要な人は自分で

  sudo /usr/sbin/update-alternatives --install /usr/X11R6/bin/xdvi.bin \ 
    xdvi.bin /usr/X11R6/bin/xdvi-ja.small.real 51

してね」

で済ませるというのも一つの解だなぁ、と思ったり。

> > 無視はしてないつもりですが、あまり納得できてないです。
> 
> 一番優先すべきはメンテナさんの意向だと思います。
> 納得できてない理由がわからない。。。
> 
> # 私はユーザさんの要望があれば、理解できなくても、可能
> # な限り対応する無節操な方ですが、高い見識を持ってメンテ
> # していただけるのは嬉しいと思います。

とりあえず teTeX upstream level で jLaTeX マージとかできると
いいですね。それも i18n 考慮して

 \usepackage{japanese}

とかすると tex の内部のスイッチが切り替わって jLaTeX モードになり、
それ以外は通常のモード、とか。

> > YaTeXが対応してるというのは驚きですね(さすが佐野さん)。
> 
> でもまだ流動的なのでちょっと早すぎかも。まあ
> 変ればまたすぐに対応するだろうから問題ないか(^^;

あれは /etc/emacs/site-start.d/50yatex-init.el を見てもらうと
わかりますが

;; for Debian potato, 1999 Dec 21 - t.sano
 (defvar xdvi-command   ; xdvi command on your system
    (if (file-exists-p "/usr/X11R6/bin/xdvi-ja.small")
          "xdvi-ja.small" "xdvi")
   "*Default xdvi command on your system")

と xdvi-command という変数に初期値を設定しているだけなので、
気に入らない人は自分で $HOME/.emacs の中とか、あるいは
 /etc/emacs/site-start.d/99localset.el とか作成してその中で
変更してもらえばいいだろう、と考えてます。

# 日本語使わない人で yatex 使ってる人もいるらしいので
# 一応 xdvi-ja.small が無い場合は xdvi に fallback するはずです。

# ああ、ちょっと yatex の部分だけフォローしようと思ったのに
# 長くなってしまった。仕事に行かなきゃ。

-- 
     # (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
    <kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)