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

[debian-devel:17435] Re: evince + symlink で豆腐(Re: evince で VL-Gothic フォントを利用しようとすると豆腐になる



On Wed, Oct 01, 2008 at 12:54:23AM +0900, Junichi Uekawa wrote:
> こんにちは、
> 
> At Fri, 26 Sep 2008 11:35:59 +0900,
> Hideki Yamane wrote:
> > 
> > On Fri, 26 Sep 2008 05:53:08 +0900
> > OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx> wrote:
> > > のように、フォント名 (問題の場合、s が "ttf-japanese-gothic") が、上記の
> > > 拡張子 (".ttf", ".ttc", ".pfa", ".pfb") を持っていないため、正当なフォン
> > > トとみなされずに使われないことが、原因のようです。
> > 
> >  ありがとうございます、大変助かります。手元でも確認できました。
> > 
> >  #…ということは、OpenType font でも同様の問題が出てくる可能性がある?
> >   ファイル名的には *.otf ですよね
> > 
> >  とりあえず、フォントパッケージの方を直して対処したいと思います。
> 
> この問題は直りましたね。
> 
> ところで、すこし気になっていたのが、update-alternatives --config で設定
> 変更しただけでは、fontconfig の cache の再作成などは行われないのですが、
> それで問題ない?
> 
> update-alternatives に設定変更のトリガーの仕組み(今はないとおもいます
> が)があったほうがよい?

update-alternativesはチョイスが1つのときにちゃんと動かないバグがあります。
とくにリンクがこわれていても勝手に何もしなくていいとかんが得てしまいます。
こんな感じに変更すると良いのかな?

@@ -630,9 +631,9 @@
                  "Nothing to configure.\n"), $name;
        return -1;
     }
-    if ($#versions == 0) {
+    if ($#versions == 0 && $mode eq 'auto' && $best eq readlink("$altdir/$name")) {
        print "\n";
-       printf _g("There is only 1 program which provides %s\n".
+       printf _g("There is only 1 program which provides %s in auto mode\n".
                  "(%s). Nothing to configure.\n"), $name, $versions[0];
        return -1;
     }


いま、--configでauto/manualを変更できるようにして遊んでいて気づきました。

ただマニュアルのときにトリガーを自動でさせるのは、もう一工夫いるかもしれません。
現状は以下です。

--- /usr/sbin/update-alternatives.orig	2008-09-28 21:43:51.000000000 +0900
+++ /usr/sbin/update-alternatives	2008-10-01 01:01:36.000000000 +0900
@@ -253,7 +253,7 @@
 {
     my ($spath, $preferred) = (@_);
 
-    printf STDOUT _g("Using '%s' to provide '%s'.") . "\n", $spath, $name;
+    printf STDOUT _g("Using '%s' to provide '%s' in mode=%s.") . "\n", $spath, $name, $mode;
     checked_symlink("$spath","$altdir/$name.dpkg-tmp");
     checked_mv("$altdir/$name.dpkg-tmp", "$altdir/$name");
 
@@ -359,6 +359,7 @@
 }
 
 if (read_link_group()) {
+	printf "XXXXX name=%s, alt-point-to=%s, mode=%s\n", $name, readlink("$altdir/$name"), $mode;
     if ($action eq 'remove') {
 	# FIXME: Be consistent for now with the case when we try to remove a
 	# non-existing path from an existing link group file.
@@ -630,9 +631,9 @@
 	          "Nothing to configure.\n"), $name;
 	return -1;
     }
-    if ($#versions == 0) {
+    if ($#versions == 0 && $mode eq 'auto' && $best eq readlink("$altdir/$name")) {
 	print "\n";
-	printf _g("There is only 1 program which provides %s\n".
+	printf _g("There is only 1 program which provides %s in auto mode\n".
 	          "(%s). Nothing to configure.\n"), $name, $versions[0];
 	return -1;
     }
@@ -641,13 +642,13 @@
                      "  Selection    Alternative\n".
                      "-----------------------------------------------\n"),
                   $#versions+1, $name);
+    printf(STDOUT "%s       0    %s (auto mode)\n", ($mode eq "auto" && readlink("$altdir/$name") eq $best) ? '*' : '  ', $best);
     for (my $i = 0; $i <= $#versions; $i++) {
-	printf(STDOUT "%s%s %8s    %s\n",
-	    (readlink("$altdir/$name") eq $versions[$i]) ? '*' : ' ',
-	    ($best eq $versions[$i]) ? '+' : ' ',
+	printf(STDOUT "%s %8s    %s (manual mode)\n",
+	    (readlink("$altdir/$name") eq $versions[$i] && $mode eq "manual") ? '*' : ' ',
 	    $i+1, $versions[$i]);
     }
-    printf(STDOUT "\n"._g("Press enter to keep the default[*], or type selection number: "));
+    printf(STDOUT "\n"._g("Press select number (type enter for the current selection[*]): "));
     return 0;
 }
 
@@ -657,14 +658,19 @@
 	return if config_message() < 0;
 	$preferred=<STDIN>;
 	chop($preferred);
-    } until $preferred eq '' || $preferred>=1 && $preferred<=$#versions+1 &&
+    } until $preferred eq '' || $preferred>=0 && $preferred<=$#versions+1 &&
 	($preferred =~ m/[0-9]*/);
     if ($preferred ne '') {
-	$mode = "manual";
-	$preferred--;
-	my $spath = $versions[$preferred];
+        if ($preferred == 0) {
+	    $action = "auto";
+	    $mode = "auto";
+	} else {
+	    $mode = "manual";
+	    $preferred--;
+	    my $spath = $versions[$preferred];
 
-	set_links($spath, $preferred);
+	    set_links($spath, $preferred);
+	}
     }
 }

まあ、コードスタイルなど綺麗にもしないといけませんね。

青木