新城@筑波大学情報です。こんにちは。

fjに記事を書いているうちに、解決策が見つかりました。ありがと
うございます。

結論としては、xterm の問題というよりは、例の luit の問題で、
luit を起動した段階で stty してももう遅くて、xterm が luit 
を起動する前に stty する必要があるということでした。xterm も
疑似端末(pseudo tty)を使うし、さらに luit も疑似端末を使いま
す。luit が起動した後に stty しても、luit 側は変りますが、
xterm 側は変らないということでした。疑似端末2個というのは気
が付きませんでした。

In article <uacj7mp28.fsf@anet.ne.jp>
        OOTANI TAKASHI <tksotn@anet.ne.jp> writes:
> MacOSXは知らないので多少キーワードが違うかもしれませんが、
> stty lnext '' flush ''

MacOSX では、discard = ^O; lnext = ^V だったので
         stty discard undef lnext undef
としたら、解除できました。(''だと ^@ と解釈されました。)しか
し、結果は、stty raw; と同じでした。

それで、xterm を env LANG=C で実行してみたら、問題ありません。
env LANG=ja_JP.UTF-8 でも。つまり、xterm の問題というよりは、
例の luit の問題です。実際に、まず xterm を

        env LANG=ja_JP.UTF-8 xterm

で実行し、その中で

        env LANG=ja_JP.eucJP luit

とすると、この段階で ^O や ^V が食われています。luit を起動
した後で、その中で stty raw; や stty discard undef lnext
undef; でも食われます。

でも、luit を起動する前に stty discard undef lnext undef す
れば大丈夫でした。手順としては、こうなります。

(1) env LANG=ja_JP.UTF-8 xterm で xterm を起動する。
(2) stty discard undef lnext undef として ^O や ^V のキーを
    <undef> にする。
(3) env LANG=ja_JP.eucJP luit で、luit を起動する。

まとめるとこうなります。

env LANG=ja_JP.UTF-8 xterm -e "stty discard undef lnext undef; env LANG=ja_JP.eucJP luit"

毎回これだと疲れるので、シェル・スクリプトを作ってみました。

------------------------------------------------------------
#!/bin/sh

xterm=/usr/X11R6/bin/xterm
exec=${SHELL:-/bin/sh}
opt=""
while [ $# != 0 ]; do
    if [ "$1" == "-e" ]; then
        shift
        if [ $# != 0 ]; then
            exec="$1"
            shift
        fi
    else
        opt="$opt $1"
        shift
    fi
done

LANG=ja_JP.UTF-8
export LANG

exec $xterm $opt -e "stty discard undef lnext undef; env LANG=ja_JP.eucJP luit $exec"
------------------------------------------------------------

これに、適当に名前をつけてウインドウ・マネジャのメニューに入
れるといいでしょう。

この問題は、どちらかというと luit の問題ですかね。疑似端末で 
stty した時には、伝播させるか、そもそも luit が起動された段
階で stty raw すべきなのでしょう。(疑似端末って stty も取れ
ますよね。やったことないですけど。)

あと、luit/xterm って、漢字変換はどうなっているのでしょうか?
kinput2 など使えますか?

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\