pefnac-0.5.2(canfep-like canna frontend processor)


pefnacとは?

みなさんは、canfepというコンソール環境で利用できる日本語入力フロンドエ ンドをご存知だと思います。Nozomu Kobayashi氏の作品(*1)で、永きに渡って、 canuum,skkfep,pofep等と共に、コンソール環境での日本語入力を支えているプ ログラムです。

私も、主にLinux環境において、ありがたく利用させていただいております。 特に、Xを起動するのがはばかられるようなpoorなマシンを何台か所有している 身としましては手放せないツールと成っております。

ただ、こんなに有用なcanfepなのですが、非常に残念な事に、利用する環境 (タイミング?)により、画面が乱れたり、変換が旨くできなかったりという 問題も有るようです。

# 特に、私の場合は、NetBSD(hpcmips, x68k)環境で顕著に問題が出ました。

そこで、インターネット上の情報や、ソースを探るうちに、どうやらcanfep 自身のtermcap library(特にtgetstr, tgoto辺り)の扱いに若干の難が有るこ とが判って来ました。

で、本来ならば、修正内容をcanfepへのパッチとして、オリジナルの作者様に 御報告するべきところなのですが、いかんせん、私がC++を理解していない為 (特に、変数のスコープの扱い辺り)、canfepへの修正は断念いたしました。

その代わりにcanfepのソースをベースにし、Cで書き直して完成させたものを、

pefnac

として、公開したいと思います。

Download

かな漢字変換に失敗しました

非力なCPU環境(私の場合はNetBSD/x68k with 68030 20Mhzでした...)で利用していると上記 のメッセージが出て正常に変換できない事があります。 これはcannaserverからの応答をpefnacが待ち受けてる場面でタイムアウトが発生している 為のようです。実際にはcannaに含まれるcanna APIを受け持つライブラリ内のルーチンが タイムアウトを起こしているのですが、これは~/.cannax/rkc.confにタイムアウト値の指定 をすれば回避する事ができます。設定の詳細はCanna37p?に含まれるRKCCONF.jpを参照して いただくとして、とりあえず以下のように設定すれば現象を回避できます...
host "*" {
  server_timeout 5000;
};
...と言いたかったのですが、実はcanna APIルーチンは特定の条件下でrkc.confを正常に 読み込めない場合があるようです。これを修正するには下記のパッチを当ててCanna37p?を make && make installし直す必要があります。ご注意ください。
===== CUT HERE CUT HERE CUT HERE CUT HERE CUT HERE =====
*** ./lib/RKindep/strops.c.ORG      2008-08-26 01:32:16.000000000 +0900
--- ./lib/RKindep/strops.c  2008-08-26 01:33:40.000000000 +0900
***************
*** 59,65 ****
    if (used + size < oldsize)
      return 0;
    newsize = oldsize ? (oldsize * 2 + size) : (size < 20) ? 20 : size;
!   tmp = realloc(sb->sb_buf, newsize);
    if (!tmp)
      return -1;
    sb->sb_buf = tmp;
--- 59,69 ----
    if (used + size < oldsize)
      return 0;
    newsize = oldsize ? (oldsize * 2 + size) : (size < 20) ? 20 : size;
!   if (sb->sb_buf){
!     tmp = realloc(sb->sb_buf, newsize);
!   }else{
!     tmp = calloc(1, newsize);
!   }
    if (!tmp)
      return -1;
    sb->sb_buf = tmp;
===== CUT HERE CUT HERE CUT HERE CUT HERE CUT HERE =====
もし、重要なcannaserverにunofficialなパッチは当てれないと仰る場合は
1493 const NumberDefaultRec top_num_defaults[] = {
1494   { CONF_DUMMYCODE, 0u },
1495 };
1496
1497 const NumberDefaultRec host_num_defaults[] = {
1498   { CONF_SERVER_TIMEOUT, 1500u },
1499 };
1500
1501 const char *
1502 RkcConfMgr_get_string(cx, item, hostname)
1503 const RkcConfMgr *cx;
1504 ConfItem item;
1505 const char *hostname;
上記(lib/RKC/conf.c)の「1500u」の部分を適当に書き換えてmake && make install しても(タイムアウトに関しては)いけるかもしれません。

謝辞

また、最後に成りますが、pefnacは、当然canfep(by Nozomu Kobayashi)の 存在無しには有り得ませんでした。大変有益なソフトウェアを自由なライセ ンスの元に公開されたNozomu Kobayashi氏に感謝致します。
(*1) のぞむの Linux なウェブページ
m-ito@myh.no-ip.org

[更新]