[Anthy-dev 241] Re: uim 0.0.9 released

Back to archive index

KIHARA Hideto deton****@m1*****
2003年 10月 10日 (金) 21:29:18 JST


Fri, Oct 10, 2003 at 02:24:14AM +0900 において
TOKUNAGA Hiroyuki さん曰く:
>  の部分を除いてapplyさせていただきました。さすがにtest.shを実行した際に
> あれだけ大量のメッセージが流れるとちょっと不便なので…。

環境変数LIBUIM_VERBOSEに設定する値でメッセージの表示量を調整できるように、
siod_verbose_levelをLIBUIM_VERBOSEの値をもとに設定するようにしてみました
(uim.c:uim_init_scm())。
5以上に設定すると大量にメッセージが出ます。

>  .uimに関する望ましい解決策は、.uimの処理に失敗した場合は、.uimは無視し
> て、無視した旨エラーメッセージを吐く、というものだと思います。

~/.uim読み込み時のエラーを*catchするようにしてみました(uim.c:load_conf())。
~/.uim読み込み時にエラーが発生すると、~/.uimの読み込みはそこで中止します。
~/.uim中で、エラーが発生するより前の部分は実行されますが、
エラー以降の部分は実行されません。

エラーメッセージを表示するため、~/.uim読み込み時に
一時的にsiod_verbose_levelを1に設定しています。
(ちなみに、3にすると、"loading /home/deton/.uim"のような
メッセージも表示されるようになります。)

diff -urp uim-0.1.0.old/uim/uim.c uim-0.1.0/uim/uim.c
--- uim-0.1.0.old/uim/uim.c	Fri Oct 10 20:45:24 2003
+++ uim-0.1.0/uim/uim.c	Fri Oct 10 20:39:30 2003
@@ -323,16 +323,23 @@ load_conf()
   struct passwd *pw;
   char *hd;
   FILE *fp;
+  long svl = siod_verbose_level;
+  long ret;
+
   pw = getpwuid(getuid());
-  hd = alloca(strlen(pw->pw_dir)+10);
+  hd = alloca(strlen(pw->pw_dir)+40);
   sprintf(hd, "%s/.uim", pw->pw_dir);
   fp = fopen(hd, "r");
-  if (fp) {
-    fclose(fp);
-    vload(hd, 0, 1);
-    return 0;
-  }
-  return -1;
+  if (fp == NULL)
+    return -1;
+  fclose(fp);
+
+  if (siod_verbose_level < 1)
+    siod_verbose_level = 1;	/* to show error message of SIOD */
+  sprintf(hd, "(*catch 'errobj (load \"%s/.uim\" #f #f))", pw->pw_dir);
+  ret = repl_c_string(hd, 0, 0, 0);
+  siod_verbose_level = svl;
+  return ret;
 }
 
 int uim_set_candidate_cb(uim_context uc,
@@ -393,7 +400,18 @@ uim_init_scm()
       "-n2048",
       "-v0",
     };
+  char verbose_argv[4] = "-v4";
+  char *env;
 
+  if ((env = getenv("LIBUIM_VERBOSE"))) {
+    if (isdigit(*env)) {
+      if (isdigit(*(env+1)))
+	verbose_argv[2] = '9';	/* SIOD's max verbose level is 5 */
+      else
+	verbose_argv[2] = *env;
+    }
+    siod_argv[6] = verbose_argv;
+  }
   /* init siod */
   siod_output = stderr;
   process_cla (7, siod_argv, 1);

* uim.c:uim_init_scm()で環境変数LIBUIM_VERBOSEの値をもとに
  siod_verbose_levelを設定するようにしたので、LIBUIM_VERBOSEの値を変更。
diff -urp uim-0.1.0.old/test.sh.in uim-0.1.0/test.sh.in
--- uim-0.1.0.old/test.sh.in	Fri Oct 10 20:45:17 2003
+++ uim-0.1.0/test.sh.in	Fri Oct 10 20:40:19 2003
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 
-LIBUIM_VERBOSE=1; export LIBUIM_VERBOSE
+LIBUIM_VERBOSE=4; export LIBUIM_VERBOSE
 LD_LIBRARY_PATH=uim/.libs/; export LD_LIBRARY_PATH
 # not to read ~/.uim
 LIBUIM_VANILLA=1; export LIBUIM_VANILLA

-- 
木原 英人 / KIHARA, Hideto / deton****@m1*****
http://www1.interq.or.jp/~deton/




Anthy-dev メーリングリストの案内
Back to archive index