UTF-8 環境 (2)

昨日(id:babie:20051221:p5)の続き。環境変数 LANG 切替と、screen のウィンドウの encoding 切替を、同時に1アクションで行う方法の模索です。


znz さんid:teny さんありがとうございます。id:typestar(はてなよりUnknownPlaceに繋いだ法がイイのか、CLONに繋いだ方が良いのか…)さん何とかなりましたよ。.screenrc のみで 1アクション! いいですねぇ〜。


znz さんので出来た&意味判った。

bind 'U' eval "encoding utf8" "stuff 'export LANG=ja_JP.UTF-8\012'"

"\012" は 改行"LF/NL" だね。


man screen より:

stuff string

    文字列 string をカレントウィンドウの入力バッファに置く。これは "paste" コマンドと似ているが、こちらの方がオーバーヘッドが小さい。 "stuff" コマンドでは大きなバッファのペーストはできない。このコマンドは、キー割り当てで用いると非常に便利である。 "bindkey" も参照すること。

stuff は貼り付けの高速版と。「入力バッファに置く」ということは現在動いてるソフトウェア(vim とか)に向かって一連のコマンドを撃てるってことだな。


teny さんのはできたけどワカラナス……

bind U eval "encoding utf8" "!!!echo 'export LANG=ja_JP.UTF-8'"

魔術……

exec [[fdpat] newcommand [args ...]]

    実行パス newcommand およびその引き数 (省略可) で指定された unix サブプロセスを現在のウィンドウで実行する。 newcommand と標準入力/標準出力/標準エラー出力の間のデータフロー、もともとこのウィンドウで開始されたプロセス (これを「アプリケーションプロセス」と呼ぼう)、 screen そのもの (ウィンドウ)、の三つは、ファイルディスクリプタパターン fdpat で制御する。このパターンは基本的に 3 つの文字からなるシーケンスで、 newcommand の標準入力、標準出力、標準エラー出力を表す。ドット (.) はファイルディスクリプタを screen に接続する。感嘆符 (!) はファイルディスクリプタを既に実行中のプロセスに接続する。コロン (:) は両方を結合させる。ユーザ入力は newcommand に送られる。ただし newcommand が「アプリケーションプロセス」の出力を受けていたり (fdpats の最初の文字が `!'  ま た は`:')、パイプ (|) が fdpat の最後に (4 番目の文字として) 追加されている場合は別である。

...

        exec !.. stty 19200
        exec ! stty 19200
        !!stty 19200

    ウィンドウの tty の速度を設定する。 stty コマンドが標準出力を操作する場合には、もうひとつ `!' を追加すること。

1個目の "!" が echo の実行(exec)を意味して、2個目の "!" が「既に実行中のプロセスに接続する」 fdpat、3個目が「標準出力を操作する場合」の "!" か。わかったようなわからんような。"!!!"で現在のウィンドウにて実行と覚えそう。bad ...


"export ..." が出力される件は、何をやったかすぐわかるので、何も出ないより良いと思います。


その他参考:
http://pc8.2ch.net/test/read.cgi/unix/1111357444/193


いやー、ハテナオヤメソッドを創始者より愛用してるんじゃないでしょうか。しかし、やり過ぎるとアレだな。つまり既にアレ。