[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00735] Re: login shell を fdsh とした場合の fd の文字化けについて
- Subject: [FDclone-users:00735] Re: login shell を fdsh とした場合の fd の文字化けについて
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Mon, 14 Jan 2008 03:08:01 +0900
しらいです。
In Message-Id <20080113231519.0992fd02.yasushi_imao@imao.jp>
Yasushi Imao <yasushi_imao@imao.jp>さんwrites:
> はじめまして、今尾といいます。
> ・fdsh をホストの login shell として指定してある
> ・デフォルトの文字コードを ja_JP.UTF-8 にしてある
> という環境下では、なぜか fd の起動をフルパスで指定しないと fd の日本語部
> 分が正常に表示されません。
ううむ、FDclone は CUI 的に用いることを主眼に設計されてい
て、shell としての動作には若干の甘さが目立つかも知れません。
特に login shell になると環境が全く初期化されていませんから。
> どうも fd-unicd.tbl を見つけることができていないような印象ですが、設定な
> どで対処することは可能でしょうか?あるいはなにか他の対策をご教示いただく
> ことはできますでしょうか?
普通に build すると FDclone の起動ディレクトリから各種テー
ブルを探そうとしますが、そもそもこの構成って多分に MS-DOS 文
化に毒されたもので、UNIX の世界では一般的ではないんですね。
どうしてかと言うと、一番の問題点は UNIX では起動ディレクト
リを正確に知る汎用的な方法が存在しないからです。今時の OS だ
と /proc 以下を調べるなんて手もあるでしょうけどね。
なので、十年以上前の公開当初からこの問題は多くの方に指摘さ
れていて、設計の見直しを迫られている点の一つでもあるんです。
勿論、私もそういう声を無視して突っぱね続けて来た訳でもなく
て、その回答の一つが USEDATADIR という compile option です。
確か Debian 辺りではその設定で package 化してる筈です。
config.h 辺りに「#define USEDATADIR」という一行を書いてお
くと、既定値だと /usr/local/share/fd に各種テーブルを置くよ
うな構成で build してくれます。
既定値からの変更の可能で、Makefile.in にある DATADIR の値
を書換えるとそのディレクトリを使うようになります。
login shell に使うような場合はこのような手段で構築したもの
を使った方が賢明だと思いますが、そうでない場合にもある程度は
検索可能にするために、ちょっと patch を作ってみました。
多少探索範囲を広げた程度なので、全てのケースで login shell
に対応出来ている訳ではありませんが、ちょっとはましになると思
います。
FD-2.09f に対する patch になってるので、試してみて下さい。
---- Cut Here ----
diff -u ../old/FD-2.09f/fd.h ./fd.h
--- ../old/FD-2.09f/fd.h Sun Oct 28 00:00:00 2007
+++ ./fd.h Mon Jan 14 01:10:44 2008
@@ -81,6 +81,7 @@
#define CMDLINE_DELIM "\t\n &;()<>|"
#endif
+#define FDPROG "fd"
#define FDSHELL "fdsh"
#define FDENV "FD_"
#define FDESIZ strsize(FDENV)
diff -u ../old/FD-2.09f/main.c ./main.c
--- ../old/FD-2.09f/main.c Sun Oct 28 00:00:00 2007
+++ ./main.c Mon Jan 14 01:54:21 2008
@@ -37,9 +37,15 @@
#define harderr_t int
#endif
+#ifndef BINDIR
+#define BINDIR "/usr/local/bin"
+#endif
#ifndef DATADIR
#define DATADIR progpath
#endif
+#ifndef DEFPATH
+#define DEFPATH ":/bin:/usr/bin"
+#endif
#if MSDOS
# ifndef BSPATHDELIM
@@ -173,6 +179,9 @@
static int NEAR initoption __P_((int, char *CONST []));
static int NEAR evaloption __P_((char *CONST []));
static char *NEAR searchenv __P_((CONST char *, char *CONST []));
+#if !MSDOS
+static char *NEAR searchexecname __P_((CONST char *, char *CONST []));
+#endif
static VOID NEAR setexecname __P_((CONST char *));
static VOID NEAR setexecpath __P_((CONST char *, char *CONST []));
int main __P_((int, char *CONST [], char *CONST []));
@@ -1116,6 +1125,25 @@
return(NULL);
}
+#if !MSDOS
+static char *NEAR searchexecname(argv, envp)
+CONST char *argv;
+char *CONST envp[];
+{
+ CONST char *env;
+ char *cp;
+
+ if (!(env = searchenv(ENVPATH, envp))) env = DEFPATH;
+ if ((cp = searchexecpath(argv, env))) return(cp);
+ if (*argv == '-' && (cp = searchexecpath(++argv, env))) return(cp);
+ if (*argv == 'r' && (cp = searchexecpath(++argv, env))) return(cp);
+ if ((cp = searchexecpath(FDSHELL, env))) return(cp);
+ if ((cp = searchexecpath(FDPROG, env))) return(cp);
+
+ return(NULL);
+}
+#endif /* !MSDOS */
+
static VOID NEAR setexecname(argv)
CONST char *argv;
{
@@ -1157,9 +1185,8 @@
cp = argv;
#else
if (strdelim(argv, 0)) cp = argv;
- else if ((cp = searchenv(ENVPATH, envp)))
- cp = tmp = searchexecpath(argv, cp);
- if (!cp) progpath = strdup2(origpath);
+ else cp = tmp = searchexecname(argv, envp);
+ if (!cp) progpath = strdup2(BINDIR);
else
#endif
{
diff -u ../old/FD-2.09f/mkmfsed.c ./mkmfsed.c
--- ../old/FD-2.09f/mkmfsed.c Sun Oct 28 00:00:00 2007
+++ ./mkmfsed.c Mon Jan 14 01:52:29 2008
@@ -103,10 +103,10 @@
printf("s:__DEFRC__:'\"'$(DEFRC)'\"':\n");
#ifdef USEDATADIR
- printf("s:__TBLPATH__:-DDATADIR='\"'$(DATADIR)'\"':\n");
+ printf("s:__TBLPATH__:-DBINDIR='\"'$(BINDIR)'\"' -DDATADIR='\"'$(DATADIR)'\"':\n");
printf("s:__DATADIR__:$(DATADIR):g\n");
#else
- printf("s:__TBLPATH__::\n");
+ printf("s:__TBLPATH__:-DBINDIR='\"'$(BINDIR)'\"':\n");
printf("s:__DATADIR__:$(BINDIR):g\n");
#endif
---- Cut Here ----
しらい たかし