観察日記 2011-07-20

RubyKaigiの感想が書き終わらないので大昔のログでも。

cmd.exeさんとconhost.exeさん

うささんうささん、こんそーるほすとぷろせすってなに

ターミナルアプリケーションのことを指してるように聞こえる。
ruby.exeとかも変更が必要って意味?
いや
cmd.exeの代替物を作れと言ってるんじゃないかなあ
あぁ
作ってくれって意味で煽ってるのに
分離されてる、ってのが微妙だ。
何と何が分離されているんだろう
コンソールウィンドウのオーナープロセス、と言えばいいんですかねえ。
普通cmd.exeですよね。
cmd.exeをいじらないといけないだろうというのはまぁ予想しているので、
何が問題なのがわからないにょ
コンソールウィンドウはWindowsそのものが作成・管理してて、コンソールAPIと直結してるので
コンソールウィンドウの問題はコンソールAPIごとの置き換えが必要となる、ような
なるほど
Windows作り変えましょう。
じゃあ8でよろ
しかしまあ、普通のコンソールアプリケーションはコンソールAPIを叩かないと思うので
stdin,out,errを分捕った上でうまく振舞うttyを自作すればよい、とも言える。
その例がck。
なるほど
cmd.exeはもちろんコンソールAPIと直結してるのでそのまま使うのは諦めるとして
ck+適当なシェル... まあcygwinのを使うのが楽ですよね。
g>MinTTY
{ko1_ndk} google web bot: 「MinTTY」なら『Cygwin』をWindowsのUIのように操作出来る! : ライフ ... - http://www.lifehacker.jp/2009/03/minttycygwinwindows.html (and 1,010 hit)
これつかえばいいのかにゃ
MinTTYは使ったことないけど同じようなことになりますね。
エンコーディング対応は知らない。
ckはUTF-8はサポートしてたと思った。
* Comprehensive character encoding support, including UTF-8.
がんばってた
日本語入力はどうなってるんでしょうねえ。
すごーく頑張ってたら普通にインライン入力できるはずだけど
* Wide character display and Windows IME support. 次の行
http://code.google.com/p/mintty/
{_ocha_} (AutoCheck): mintty - Terminal window for Cygwin and MSYS - Google Project Hosting [AR]
まじか
前そこまでできたっけ
俺も実はちょっと作ってみたことあるんだけど
作るめんどくささと嬉しさと比較してやめちゃったような記憶がある。
なるほろ
(cmd.exeをそんな嫌いじゃないので)
{unak} Mintty is based on code from PuTTY 0.60 by Simon Tatham and team.
あ、なるほどねえ。
そういえばPuTTYよくできてるな
するとputty使いである俺には嬉しいかもしれない。
しかし
cygwinとmsysとどっちか要るのはWindowsわかってない。
うむ
うーん
やっぱ不具合があるな。リダイレクト周りで。
難しいんだよね。
ほう?
コンソールアプリじゃないけど標準入出力にアクセスする
という特殊なアプリを起動しようとしたとき
ブロックする。
ふむ
そんなアプリ世の中に何個もないと思うけどね。(自力でコンソールをアロケートするものは除くが)
http://d.hatena.ne.jp/gnarl/20100428/1272441051 ふぅん?
{_ocha_} (AutoCheck): はてな: Cygwin+mintty、Windowsの対話型コンソールアプリを正しく実行できない - <s>gnarl,</s>技術メモ”’<marquee><textarea>¥ [AR]
そうきたか
ckがこういう仕組みだったかな。
Windows使ってる人はたいへんですね
ほう
で、これをやると、コンソール絡みの元の問題が全部復活したりするので
はっはっは。
しょぼりん
ckじゃなくてckw?
ckwかな
忘れた
ckはcygwin

http://www.howtogeek.com/howto/4996/what-is-conhost.exe-and-why-is-it-running/
{_ocha_} (AutoCheck): What is conhost.exe and Why Is It Running? - How-To Geek [AR]
conhostねえ
何でこんな大騒ぎになるのかよく・・・
なるほど。
具体的に何してるんだこいつ
ttyそのものだな
ふーん
tty=conhost
sh=cmd.exe
ってこと?
かなあ。
知らなかった、へぇ
単純にそうは言い切れないけど。
conhostはttyよりもっと機能少なくて、その少ない分はcmd.exeにある。
なるほろ
で、conhost.exeごといじらないといけないから大変だおって事か
例えばコンソールの文字アトリビュートとか設定したりなんだりするのはconhost.exeじゃなくてcmd.exeさんのお仕事
なーるほろ
IME制御とかはconhostさんがやってる。
なんかフックとか打ち込んでたりもするな。
なかなか大事になってしまうことはなんとなくわかった
キーボードフックかなあ。APIフックかなあ。
とかまあそんな感じ。
なるほろり
ま、なんせ、コンソールウィンドウを持って、描画したり入力したりとかはconhost.exeさんのお仕事ですね。
実質それだけだと思うが。
で、コンソールAPIを介してcmd.exeと情報やり取りしてる感じ
まさにさっきと似たような方向になってきた
あー
コンソールアプリケーションが走ってる時はそのアプリとconhost.exeがやりとりしてるのかな
cmd.exeは完全Unicodeアプリケーション
cmd.exe経由?
ほう
conhost.exeが文字コード変換とか取り扱ってやがる。
へー
cmd.exeさんは悪くなかったのか
でと、直接のやりとりはないけど(アプリからconhost.exeの存在は見えない)、
さっき言ったように裏でカーネル経由でやりとりされますよー、という。
カーネル経由でサービスとして動いてるconhostさんに流れ込んでる感じですか
サービスでいいのか?
csrss.exeというサービスが仲介者
うーん
なるほろ
conhost.exeだけ作り変えれば理想の環境が得られる、ような
conhost.exeさんにも相当の機能を載せれば、zsh.exeさんとか大勝利ですか
たぶん
にゃるほろり
ますます中の人じゃないと手も足も出ないな
conhost.exeさん、非公開API叩きまくりだから、
ちょっと一筋縄ではないな。
cmd.exeさんはさほどでもないのだが。
cmd.exeさんはzsh改みたいなやつで置き換えたい
置き換えたいがconhostさんがなんとかならないとどうにもならんと
cmd.exeさんはコードページとかさっぱり知りませんなムード
だってぼくUnicodeしか使いませんよ的な
まぁ、それもありか
chcpとかの効果はconhost.exeに行ってて、Unicodeにすでになってるのがcmd.exeに行くと
そうそう
なーるほどねぇ
ぼくUnicodeでコンソール出力バッファに書いてコンソール入力バッファから貰うだけだもーん
サロゲートペアとかも悪いのはconhost.exeさんだったのか
というわけで思い出したのでwineをみれば
なんか役に立つかも。
あぁ、なるほど
さすがにWineのリポジトリはでかいな
conhostさんいないな
conhostさんがいる必要はないか
programs/winedbg/winedbg.c: /* FIXME: should CP_ACP be GetConsoleCP()? */
既視感のある問いだ
みんなそこで悩むんだな。
console系API呼び出しをどう処理してるかが参考になるんじゃないかなー、と。

おまけ

きんもー☆