[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00111] Re: SL-C700+FD-2.02aでのサスペンド復帰について
- Subject: [FDclone-users:00111] Re: SL-C700+FD-2.02aでのサスペンド復帰について
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Mon, 17 Feb 2003 21:49:11 +0900
しらいです。
In Message-Id <20030217175252.767A.HIRAN@kt.rim.or.jp>
Akihiko HIRANO <hiran@kt.rim.or.jp>さんwrites:
> みなさんはじめまして、平野といいます。
> さて、SL-C700 の bash から fd を起動させた状態で SL-C700 をサスペンドおよび
> 復帰させると fd が bash のバックグラウンドジョブになってしまうという現象に
> ついて調べてみました。
FDclone は SIGSTOP を特に無視していませんので、この動作自
体は仕様だと思って下さい。
確かに login shell の時に SIGSTOP されると困りものかも知れ
ませんが、これは他の shell でも似たような実装だと思います。
逆に SIGSTOP させたい時にさせられなくても困るでしょうし。
> (サスペンド時にカーネルが SIGSTOP、復帰時に SIGCONT を各プロセスに送るらしい
> です)
こういう実装を余りアプリ側では想定していないんだと思います。
SL-C700 に標準実装されている bash や elvis も余り suspend に
は強くなさそうです。
> dev_img-1.3でセルフコンパイル・リンク
> (dev_img-1.3でコンパイル・リンクすると stat(), fstat(), lstat()の
> リンクエラーが発生するため /usr/local/include/sys/stat.h を修正)
おかしいですねぇ?私のところでは普通に make 一発で compile
だけは通るのですが。私は以下の URL から取得しました。
http://prdownloads.sourceforge.net/zaurus/dev_img-1.3?download
> _fdrc(FD-2.02a.tar.gz同梱) を ~/.fd2rc としてコピー後、'keymap BS "^?"'
> を追加。
これは embeddedkonsole の実装が何か妙な固執をしているから
です。termcap も terminfo も vt100 では BS は ^H を吐くよう
に記述されているのに、その vt100 を名乗るこの console は ^?
を吐くように設計されています。
/home/QtPalmtop/etc/keytabs/vt100.keytab に「key Backspace」
という項目がありますが、この値を "\x7f" から "\x08" に変更す
れば、termcap/terminfo の記述どおりに ^H を吐くようになりま
す。
この部分には「Some desperately try to save the ^H.」なんて
書いてありますから、実装者も知っててやってるんだと思います。
理由は宗教だか policy だか知りませんけどね。
bash や vi で BS が効いているように見えるのは、これらのア
プリでは BS も DEL も区別せずに同じ動作をするように設計され
ているためで、これは DEL として効いているに過ぎません。
その証拠に、~/.inputrc に「DEL: end-of-line」などと記述す
ると、bash が BS キーでカーソルを行末に持っていくようになり
ます。
かと言って、.fd2rc で BS を ^? に割り振ってしまうと、今度
は remote から terminal emurator で扱う時に BS が使えなくな
ってしまうので、私はこう記述しています。
if [ " $TERM" = " vt100" ]; then
if [ " $CONSOLE" = " /dev/console" ]; then
keymap BS "^?"
fi
fi
同様に、他にも INS/DEL/PPAGE/HOME/END 等も console か否か
で keymap を振り分けています。一体何考えてこういう実装にして
いるんでしょうね?
# PPAGE/NPAGE/HOME/END は Fn + cursor key に割り当てられて
#いますが、INS は設定にあるだけで実際にどのキーなのかは判り
#ません。
> export PATH=/usr/local/bin/:$PATH:/mnt/dev/bin
> export TMPDIR=/var/tmp
TMPDIR でなく TMP を /tmp 以外に割り当てないと、cc が中間
file を作れなくなって止まってしまうと思います。私は /home/tmp
にしていますが、/var/tmp だと手動で作成する必要がありますね。
> fd 起動状態でサスペンド復帰すると fd が bash のバックグラウンドジョブと
> なり bash プロンプトに戻る。
これは bash や ash でもそうなると思います。ターミナルから
起動した shell 以外には軒並 SIGSTOP が送られているようですね。
> bash から fg[Enter] として fd をフォアグラウンドジョブにしても端末I/Oが
> 復元されていないため操作ができない状態となる。ESC[Enter]y[Enter]で fd を
> 終了可能。
2.02b では、SIGCONT 時に端末状態を reset するように実装を
改めました。これで Enter を押す必要は無くなると思います。
# terminal control に用いる ioctl() は reentrant 関数では
#ないので、正確には SIGCONT 時ではなく、SIGCONT 直後のキー
#入力時に reset します。SIGCONT 時は flag を立てるだけ。
> fd から EDIT_FILE で vim を起動している状態でサスペンド復帰すると vim が
> fd のバックグラウンドジョブになり fd の画面に戻る。
> EXECUTE_SH のプロンプトで fg[Enter] とすると vim がフォアグラウンドジョブ
> になる。端末I/Oがおかしいが、':q' で vim を終了可能。
vim でもそうなりますか。標準実装の vi は elvis なんですが、
こいつは普通に ^Z -> fg しても端末状態が元に戻らない実装なの
で、もし vim も同じ状況であるようなら、この症状は vim のせい
です。
他の Linux では vim はちゃんと復帰時に端末状態を元に戻して
いるようなのですが。
> (1) の ~/.bashrc に以下を追加
>
> function fd () { set +m; /usr/local/bin/fd $*; set -m; }
>
> (1) の ~/.fd2rc に以下を追加
>
> set +m
>
> これにより(2) ので発生した現象がすべて回避される。
この設定でも、elvis の場合は上記症状は回避されません。vim
だと回避されるのですか。因みにどこから入手された vim なんで
しょうか?
しらい たかし