<a href="http://www.atmarkit.co.jp/fdotnet/special/monad01/monad01_01.html">次世代Windowsシェル</a>はシェル以上のものになりなさい

MSHというのだそうだ。ふうむ。職場でWindows 2000 Professionalを使っているのだが、コマンドプロンプトの「できることの少なさ」にはいい加減辟易していたので、機能が増えるのは大変結構なことだ。
しかし、使用方法に新しさがないね。aliasとか、lsとか、cdとかいうコマンド名にも悪い意味で芸がない。いや、本当のコマンド名は別で、ただaliasを使ってUNIXコマンド名を使えるようにしてあるということは分かっているし、たぶん、そうすることでUNIXユーザーを少しでもWindowsに移行させようという狙いなのも分かる。でも、シェルとかシェルスクリプトとか、そういう概念まで似せてしまうことはないのにとも思う。そういうことするから、例えばこの記事の最後に、

現行のコマンド・プロンプトに不満のある方や、コマンドラインでのオペレーションやスクリプト記述が好きな方は、MSHを1つの新しい.NETアプリケーションとして楽しむことができるはずだ。

とか書かれちゃうんだよ。Windows 95が出たときのような*1斬新な何かはないのか。

シェルの不便さ

僕は普段LinuxSolarisbashを使っている。シェルはとても便利なインターフェイスなのだが、所詮CUIなので、シェル特有の面倒臭さというのもある。
例えばディレクトリを指定するのが煩わしいと思うことがある。どこか遠いディレクトリへcdしたいとする。ホームディレクトリから4階層くらい深いところにあるディレクトリへ移動したい。そしたら、シェルで

$ cd foo/bar/hoge/arege

とか打ち込んでEnter、ということをする。この位の短い名前のディレクトリならまだいいけど、例えば

$ cd directory_with_very_long_name/is_difficult_to_type/and_also_difficult/to_find_out

とかね。まあ例えばbashだとTabキーでファイル名の候補を補完してくれたりするのだが、階層が深い上に実物を見てみないとどのディレクトリへ降りていいのかわからない、というような場合には、

$ cd directory_with_very_long_name
$ ls
$ cd is_difficult_to_type
$ ls
$ cd and_also_difficult
$ ls
$ cd to_find_out

なーんて、時間と手間をかけて探す羽目になるわけだ。
こう書くと、「それは、

alias cd 'cd; ls'

とかすればいいんですよ」なんていう人がいる(僕の職場でも実際にこういう使いかたをしている人はいる)わけだが、この方法だと、極端にたくさんのファイルが置いてあるディレクトリにcdするとその瞬間にコンソールがガバーとスクロールしてしまい、ムキーと叫ぶ羽目になるのだ。
あと、これはbashというかreadline特有の話なのかもしれないけど、文脈でTab補完候補を判断してくれないという苛立ちがある。つまり、上の例だと

$ cd directory_with_very_long_name/(…次なんだっけ?)

というところでTabキーを押すと、探したいのはディレクトリ名だけ(だってcdなんだもん当り前でしょ)なのに、ファイル名も候補に入れてくれちゃうのだ。空気嫁、と思ってしまうのは僕だけか?
これはcdだけじゃなく、mvとかcpとかでも同じことで、コピー先を探すときにTabキー補完で行き先を探すのは大変なストレスだ。むしろ途中で区切ってlsできないという点ではmvやcpの方がつらい。というか最初からmvかcpを例にすればよかったね。ちっ。

GUIとシェルの融合

というところで、前から欲しいと思っている改善案があるのだ。それは、

$ cd directory_with_very_long_name/(…次なんだっけ?)

というところでTabキー(でもWindowsキー+Eとかでもいいのだけど)を押すと、いわゆるファイルマネージャ、Windowsではエクスプローラと呼ばれるものがモーダルダイアログでカレントディレクトリを開いた状態で立ち上がって、hjklキー*2とかカーソルキーとかでディレクトリやファイル名を選んでまたTabキーを押すとモーダルダイアログが消えて

$ cd directory_with_very_long_name/is_difficult_to_type/(…次なんだっけ?)

とかなってくれると非常に便利じゃないかと思うのだ。さらに言うと、そのモーダルダイアログでディレクトリ選んでEnterキーを押すとそこへ移動してさらに下の階層を見ることができて、3階層くらい降りたところでTabキーを押すと

$ cd directory_with_very_long_name/is_difficult_to_type/and_also_difficult/to_find_out

じゃじゃーん。てな具合に入力できれば、GUICUIのいいとこどりを実現できると思うのだがどうでしょうか。誰かそんなターミナルエミュレータを開発してください。…あ、もしかして広い世界にはそんなのが既に実現されていたりするんでしょうか?だとしたら是非教えてください。
MSHもこのくらいのことができれば、またWindows 95のように「すげえ」と全世界から称賛の嵐が吹き荒れるんじゃないでしょうかどうでしょうか。

*1:とかいうとMacユーザーの方々に怒られてしまいそうだが

*2:そう、ワタシはviユーザ