コマンドライン型ランチャーとexplorerの連携
20070225: ちょっとコマンドを追加してみました。verbsとlsです。また、ウインドウタイトルではなくウインドウハンドルを使ってCOMのオブジェクトを探索するようにしました。
こちらにも書いたとおり、Windowsではコマンドライン型ランチャーのcraftlaunchとexplorer.exeを連携させて使ってます。
最前面のディレクトリ(アクティブなディレクトリ)に対して、キーボードで、Linuxと同じ感覚でmkdirとかrmとかしたいなー、ってのを実現してみました。
今まではC言語で作った自前のライブラリで処理していたんですが、COMを使ったものに書き直しました。同様の目的にはAHKが使えるんですが、やっぱり使い慣れた言語でいろいろコマンドを作りたかったのでCOM+Javascriptにしてみました。もちろん、COMなのでRubyでもPerlでもPythonでも同様の実装が作れます。
craftlaunchを前提にしてますが、コマンドライン型のランチャーならなんでも適応できる方法だと思います。explorerを使っていてもキーボードだけでmkdir,rm,mvなんかが実行できちゃって、非常に便利です。
簡単なコマンドラインランチャーもどきも同梱してますので、現在コマンドライン型ランチャーをいれていない人でも試せます。
以下readmeからの転載です。
利用方法
explorehelper.wsf,explorehelper.js,getadir.exeは同じフォルダになければ なりません。
explorehelper.wsf [command] [args]
のように実行します。craftlaunchの場合はexplorhelper.wsfをコマンド登録し、 ctrl-eなどにショートカット登録しておくと良いでしょう。すると、 mkdirと入力→ctrl+eで最前面のフォルダに、フォルダを作成できます。
それぞれのファイルについて
simple_launcher.exe
コマンドライン型ランチャーを導入していない方でも試せるように、AHKで作った 簡単なランチャーを同梱してあります。ただしこのランチャーは
- ホットキー(有効化)はalt+space
- コマンド実行はctrl+e
に固定されています。つまり
「起動」→(「alt+space」でアクティブに)→「command入力」→「ctrl+e」で実行
という操作になります。気にいった人はちゃんとしたコマンドライン型ランチャー の導入をオススメします。
getahwnd.exe
最前面のExplorer.exeのウインドウハンドルを出力するだけのプログラムです。
explorehelper.js
JscriptによるCOMに対するヘルパーです。
explorehelper.wsf
Jscriptによるカスタムコマンドが定義されたファイルです。このファイルを編集 することによってcommandが自由に追加できます。
ビルトインコマンド
- mv
- mkdir
- cmd
- touch
- rm
- chvm : 表示モードを変更します。
- ls : -x, -s, -tオプションのみ受け付けます。つまりフォルダ内をソートします。
- verbs : 右クリックメニューを出します。shift+F10と同じ効果です。
説明の無いものはUnixのそれから類推してください。
カスタムコマンドの追加について
explorehelper.wsfを編集することによってcommandが自由に追加できます。
var procs = {
mv : function() {
var path = get_dir_and_focused_item_path();
var name = InputBox("新しい名前を入力してください。", path.item._base_name());
if(name) get_dir_and_focused_item().item.Name = name;
}._item_proc()._auto_win_activate(),
mkdir : function() {
var path = get_dir_and_focused_item_path();
var name = InputBox("フォルダ名を入力してください。");
if(name) fs().GetFolder(path.win).SubFolders.Add(name);
}._auto_win_activate(),
.
.
.
.
commandは上記のように、procオブジェクトのプロパティとして定義されます。その際、 command名がキー、値は引数なしの関数になります。キーに大文字は使用できません。
commandを定義する際にはexplorehelper.jsで定義されたヘルパを使用することができます。 カスタムcommandを定義しようとする人は当然、JScript(Javascript)が理解できる人 だと思いますので、ヘルパの詳細はexplorehelper.jsを見てください。ここではリスト のみ紹介します。
- InputBox : 入力フォームを表示します。
- MessageBox : メッセージを表示します。
- Confirm : 確認フォームを表示します。
- shell : Shell.Applicationオブジェクト返します。
- wscript_shell : WScript.Shellオブジェクトを返します。
- fs : Scripting.FileSystemObjectを返します。
- win_activate : ディレクトリをアクティブにします。SendKeysする前に実行します。
- get_dir_and_focused_item : アクティブなディレクトリと選択されているアイテムを返します。
- get_dir_and_focused_item_lst : アクティブなディレクトリと選択されている アイテムのリストを返します。
- get_dir_and_focused_item_path : アクティブなディレクトリと選択されているアイテムのパス を返します。
- get_dir_and_focused_item_path_lst : アクティブなディレクトリと選択されている アイテムのパスのリストを返します。
- $wsh_args : argsを格納した配列です。
- Function.prototype._item_proc : アイテムに対する手続きであることを宣言します。 アイテムを選択していない場合、処理が実行されなくなります。
- Function.prototype._auto_win_activate : 手続きを終了後、ウインドウをアクティブにします。
こんな感じです。COMなら大概なんでもできるので、便利です。しかもJScriptとexeなのでUSBメモリなどにいれて持ち運べますので、俺ポータビリティもそこそこあります。
また、いかにAHKスクリプトが簡単でも、普段使い慣れた言語でかけるほうが落ち着きます。AHKなんかをみてると、完全なDSLというのは俺的に扱うのがめんどくさくて(覚える熱意があればいいんだろうけど、趣味で使うものにそれほどの情熱がでるかというと・・・)なじみにくいようだ。Rakeみたいな言語内DSLがいいよね、やっぱ。ああ、2007年はRubyの年になるんでしょうかねえ。
キーボード派のWindows開発環境
そういえば、こういうサイトに定番っぽい開発環境を書いたのがないので、自己紹介?も兼ねて晒してみます。
開発はだいたいWindows上のvmware(Debian)でやってます。ただし、そこは定番どころばっかりなのでパス。まぁvim+screen+zshです。puttyでつないでますよ。sambaでマウントしてますよ。ええ。それぞれ結構設定しまくっていて、グローバルなSVNサーバーにおいてあります。
Windowsでの開発環境
あんまりWindowsは好きではないけど、Macよりは好きだったりする。というわけでWindows。普段使いのOSでもあるので、主に自分用の小物を書くことが多いです。怠け者なので、自動化できるものはすぐプログラムに置き換えちゃいます。でも言語は結構様々。もとから言語にこだわらず、一番適しているものを使う主義なので小物が多いにもかかわらず、言語は結構多いのかも。
今のところ、だいたい
- それなりのGUIが必要なアプリ:Delphi6
- 一枚ウインドウがあるくらいのGUIアプリ:Python(wxWidgets)
- GUIがなく、立ち上がりの速さや軽さが欲しいもの:C(MinGW)
- それ以外の小物:Python
という感じで適材適所。
Linuxではまったく定番な感じ(定番が自分にしっくりきた)だったけど、Windowsにはキーボード派の定番ってのは少ない気がするので、結構独特なのかも。方針は
- キーボードで操作しやすいように。
- なるべくlinuxと同じような感覚(←これ重要)で。
感覚なので一緒じゃなくてもいいのです。
gvim
開発はほとんどこいつです。Delphi以外は。Linuxのvimと同じ設定ファイルを共有してます。俺はvimがなくちゃ生きていけない人間なので、USBメモリにいれてもち運べるようにしてあります。
Firefox
ブラウザはこいつ。ただしPortableFirefoxです。これもUSBメモリにいれて持ち運べるように。学校にいってもUSBメモリをさすだけで普段の環境。拡張も結構つっこんでます。
cltc
タスク切り替えが便利になるソフト。こんな感じで表示されます。インクリメンタル検索での選択や、カーソルキーでの選択ができます。
windowsでタスク切り替えというとAlt+TABですが、これ非常に使いづらい。そこでこのソフト。ここでキモになるのがキー設定で
Ctrl+Shift+zで起動Ctrl+jとCtrl+kでタスクを選択
という風に設定しています。俺と同じLinux開発環境の人は分かるでしょう(笑
Ctrl+zがscreenのエスケープでjkはvim。これだけでかなりLinuxと同じ感覚でタスクが選べるようになります。
MigemizeExplorer
こりゃ定番。説明不要ですよねえ。超便利。
craftlaunch
これがないと始まらない。コマンド型ランチャー。craftlanuchラブ。こいつはデスクトップ用と持ち運び用(USBメモリに入れる用)の2個も用意してます。起動用ホットキーはeclipseなんてもんは使ってないのでCtrl+Spaceです。
俺の場合はほぼ全ての作業の起点がこのソフト。ランチャーとしてのソフト起動から簡易シェルとしてまで大活躍。中でもオススメなのはexplorer.exe(windows標準のシェル)+craftlaunchの連携。
craftlaunchというと「あふ」との連携が有名ですが、俺はあえてexplorer.exeと連携してます。というのも、なにぶん普段使いのOSですから、マルチメディアのファイルなんかも多いわけです。重くてもプレビューが見れたりするのは便利なもんです。日本語のファイル名だし、ファイラーつかってもファイル選択するのがめんどくさいもんです。
どうやって連携してるかというと、基本的に小物アプリ+ショートカットキー。この使い方をはじめるきっかけになったのは「せっかくcraftlaunchからキーボードだけでフォルダ開けるんだから、ホームポジションで楽にキーボードだけで閉じたいなあ」という思い。
finiというシンプルなソフトを使うとそれができます。finiは最前面のアプリを終了するだけです。これをctrl+[(ご存知のとおりvimのエスケープです)にショートカットとして割り当てます。すると
ctrl+space, ctrl+[
の2ステップでウインドウが閉じられます。ctrlは押しっぱなしでいいので非常に軽快に閉じられます。鉄の小指を持つemacs使いの人ならなおのことでしょう(笑
その他の連携
・フォルダの新規作成
windowのexplorerの不満はフォルダを作るのがめんどくさいことですよね。キーボードならAlt+F W Fでしょうか。というわけでfiniのような自作コマンドで対応してます。超テキトーなのですが、あげておきます。
こいつをctrl+nにショートカットとして割り当ててあります。すると・・・
craftlaunchでフォルダを開く→MigemizeExplorerで快適にフォルダをたどる→「フォルダつくりてえ」→ctrl+space フォルダ名入力 ctrl+n
という感じになるわけで、結構ハッピーです。
・コンソール
おなじような感じで、表示されているフォルダをカレントディレクトリとしてcmd.exeを起動するものもつくってあります。ほとんどつかわないけど。
以上のような、変なWindowsで日々暮らしています。cltcでブラウザやvim、コンソールを行き来しながらIDEはあんまり使わないでガリガリ書いています。
まぁ、だいたいvmware上のLinuxにいるんですけど(笑
まとめると
- cltcで
ctrl+zにctrl+j,k。快適ですよ。 - MigemizeExplorerはWindows標準装備になればいいのに。
- craftlaunchはあふと連携してもいいけど、explorerと連携してもハッピーですよ。
という感じです。
エミュレーターのほうはあのあとCPUを若干チューニングして、1フレーム0.1はキリました。今はPPUを書いてるんですが、そろそろ就職に備えて家を探さないといけません。京都と関東を行き来するのはいろいろこたえます。移動中はシグマリオンのPocketSchemeでSchemeでも書いて暇つぶしです。