68user's page 掲示板

Prev< No. 1610> Next  [最新発言に戻る] [過去ログ一覧]
No. 1610 # rosegarden 2001/01/19 (金) 13:54:58
あえて、クロスポストに答える形で書き込みます。
ちょっと面白いこと(だから内容はマニア向け)があり、
それを書いてみたいので...。
>>1609 じゅじゅ
> 結局掲示板の設置の方は、その改行コードの変更の仕方が
> よくわからなかったので、
ftp での転送が悪かったからだろうという回答は出ているので、
直接改行コードの変更の話にしましょう。
改行コードを変えるのには、例えば、perl などで
% perl -pni.bak -e 's/^M$//' hoge.cgi
等とすれば良いのです。上で、^M は表現上 2 文字になっていますが、
この部分はコントロールキーを押しながら M を入力します。
ところが、困ったことにもろに打ち込むとリターンを打ったのと同じで、
これを打ち込めません。これは初心者の FAQ で、通常コントロール V
を打ってからコントロール M を打ちます。(以下、CTRL-M 等と書きます。)
すると文字通り ^M が打てるんですが、カスタマイズされている場合もあります。
あるいは、カスタマイズしたい場合もあるでしょう。
そう言った場合には stty(1) を使うんですが、
% stty -a
speed 9600 baud; 25 rows; 80 columns;
(中略)
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
                eol2 = <undef>; erase = ^H; intr = ^C; kill = ^U; lnext = ^V;
                min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
                stop = ^S; susp = ^Z; time = 0; werase = ^W;
となったときの lnext に「次の一文字を文字通り引用」(literal char???) する
キーが割り当ててあります。上の場合には、だから ^V です。このコマンドは ^H に
「前の文字の削除」を割り当てたい場合にも使います。通常 ~/.login に
stty erase ^H
とか
stty erase ^? (^? は DEL キー)
をいれておけば、それぞれ、CTRL-H や DEL に前の文字の削除を割り当てられます。
これも初心者の FAQ で DEL キーで前の文字を消すにはどうしたら良いのか?
なんて嫌なるくらいに聞かれます。答えは、上のようにすれば良いんですが、
問題はどうやって ^H だとか ^? をいれるかです。この答えも、ここまで
読んだ人なら明らかで、lchar キーを使えば言い訳ですね。上の場合すなわち ^V です。

ちなみに、上の perl のコマンド実行をする場合には tcsh だと ^M が ^J に
変わるので、ash なんかを起動してやった方が良いです。また、^V はコマンドラインや
ed あるいは vi なら有効ですが、emacsen の場合 CTRL-Q が lchar もどきの動作を
します(デフォルトなら)。

ここから本題にはいりますが、上の stty -a の出力は FreeBSD 4-stable のものです。
実は、5-current だと
speed 9600 baud; 25 rows; 80 columns;
(中略)
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
    eol2 = <undef>; erase = ^H; erase2 = ^H; intr = ^C; kill = ^U;
    lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q;
    status = ^T; stop = ^S; susp = ^Z; time = 0; werase = ^W;
となります。良く見ると、erase2 というのがありますが、これは BS と DEL
両方に前の一文字削除を割り当てられるようにするためです。一般に、
% stty erase ^H ^?
なんてできませんから。こういった需要は多いはずなのに今までサポートされて
なかったんでしょうね。ちなみに、この erase2 については man stty しても
説明がみあたらず、-current の RELNOTES.TXT に書いてあります。
というわけで、FreeBSD には release ごとに結構な相違があります。

# これは昨日見つけて、どこかにこの発見(?)を書きたかった(笑)。

# ところで 3.x-RELEASE にはないが、4.x-RELEASE にはある
# du や df コマンドの -h (human friedly) オプションというのはご存知でしょうか?
# まあ、皆さん知っているでしょうね。この程度なら。

# 長くなりすみません。

Prev< No. 1610> Next  [最新発言に戻る] [過去ログ一覧]