CraftLaunch 3 を便利にする自作プラグイン6つ

プログラマブルなコマンドライン ランチャー CraftLaunch 3 が楽しい で CraftLaunch 3.Xを紹介しました。

いままで自作プラグインとして、

を公開しましたが、そのあと、さらに6つ作って便利に使っているので紹介しておきます。

ソースは全て https://github.com/nitoyon/clnch3_extensions に置いています。

url_alias - URL を開きやすくするプラグイン

CraftLaunch から特定の URL を開くのが便利になります。本体の機能でも特定の URL を開く機能はありますが、「コマンド名;パラメータ」の形で入力する必要があって不便なので、; を不要にしてみました。

入力例:

登録は、config.py に次のようにして正規表現で定義します。

# config.py の configure() 関数に次のように記載します

import url_alias
#reload(url_alias)
url_alias.register(window, 
                   { 'regex': re.compile('^rfc(\d+)$', re.IGNORECASE), 
                     'url': 'http://www.ietf.org/rfc/rfc%param%.txt' },
                   { 'regex': re.compile('^@(\w+)$'), 
                     'url': 'http://twitter.com/%param%' },
                  )

BTS やメーリングリストの番号をブラウザで開けるようにするとお仕事でも便利!

control_panel - コントロールパネルや管理ツールをコマンド化する プラグイン

コントロールパネルや管理ツールのアイテムを開けます。

  • [ネットワーク接続] を開くには cpl:Network と入力
  • [イベント ビューワー] を開くには cpl:EventViewer と入力

コントロールパネルや管理ツールの各アイテムは日本語版 Windows ではキーボードでアクセスしにくいので、キーボード派の人には便利じゃないでしょうか。

どういうコマンドが登録されるかは、ControlCommandList.__init__() を見るとだいたい分かると思います。

cpl: を入力するのが面倒な人は、prefix='' とすればプレフィックスなしで登録できますが、不要なものまで登録されて名前空間が汚染されるので嫌な人も多いでしょう。そんな人は、後述の misc.pyaddAlias 関数で別名を登録するほうがお勧めです。

import misc
misc.addAlias( window, u'cpl:Date/Time', u'ClockSet' )

path_plus - 相対パス・フォルダエイリアスを可能にするプラグイン

登録したコマンドからサブフォルダに移動しやすくなります。

たとえば、マイ ドキュメントを ~ コマンドとして登録しておけば、

  • ~\ でマイドキュメント以下のファイルが補完で現れる
  • ~\memo.txt でマイドキュメント直下の memo.txt を開ける

のように使えます。同じように、デスクトップやダウンロードフォルダを登録しておけば便利です。

また、実行ファイルを登録したコマンドについても、コマンド名のあとに \ をつけることで、実行ファイルのフォルダ内のファイルを補完してくれます。たとえば、CraftLaunch コマンドを登録していたとすると、

  • CraftLaunch\ で CraftLaunch インストールフォルダ以下のファイルが補完で現れる
  • CraftLaunch\readme.txt で CraftLaunch の readme を表示できる

といった使い方ができます。

相対パス対応としては、.\hoge\foo のようにしてファイルを開けるようにしています。デフォルトの CraftLaunch では、.\ でカレントフォルダ直下のファイルは開けるものの、1階層以上深いファイルは開けないバグがあります。これは、ShellExecute をするとき、実行するファイルがあるフォルダをカレントディレクトリに設定するのが原因です。この挙動自体は絶対パスで指定するときにはうまくいくのですが、相対パスのときは二重に相対化してしまうので、勝手に修正してみました。

ところで、CraftLaunch のカレントフォルダは、CraftLaunch のショートカットの [初期フォルダー] で指定できます。これは Windows の Tips ですね…。

実装面では、commandline_Launchercommandline_ExecuteFile をラップして置き換えるというアグレッシブなことをしています。何か予想外の問題を引き起こす可能性があるかもしれませんが、私が日常的に使っている限りは問題は起きていません。

python_console - Python のインタラクティブシェルが使えるプラグイン

Python が使えるんなら、Python のコードの評価も CraftLaunch 上でできるようにしてしまおうというプラグインです。

>>> を先頭に入力することで、Python のインタラクティブ シェルと同等の動作をしてくれます。

>>> a = [1,3,5]
>>> a
[1, 3, 5]
>>> for i in a:
...     print i
... 
1
3
5

すごいことをしてそうですが、標準ライブラリの code.InteractiveConsole の機能にほとんどの処理を任せています。ただ、CraftLaunch ではスペースキーが入力できないようになっているので、これを迂回するためのハックを施しています。

run_as_administrator - 管理者として実行できるプラグイン

管理者として実行させたいコマンドを Ctrl-Shift-Enter で実行すると、管理者権限で実行してくれます。Vista 以降で UAC を有効のまま使っている人には便利です。

この挙動は、Windows Vista 以降のスタートメニュー中の [プログラムとファイルの検索] で Ctrl-Shift-Enter を押すと、管理者として実行してくれる動作と合わせています。

実装上は、ShellExecuteW の処理を置き換えていて、Ctrl-Shift-Enter が押されていたときに、lpVerbrunas を指定するようにしています。そのため、コマンドだけではなく、直接パスを入力した場合にも、Ctrl-Shift-Enter が押されていれば管理者として実行してくれます。


misc - 雑多な拡張

独立して作るほどではない雑多な機能を実装しています。

次の2つの機能が入っています。

command_ClearConsole コマンド
コンソールをクリアします。python_console プラグインの出力を消したいときや、プラグイン開発していて例外メッセージに満ち溢れてきたときに便利。
addAlias 関数
コマンドに別名を設定する関数です。control_panel プラグインで便利。

まとめ

工夫次第で自分好みにできる CraftLaunch 3 はやっぱり楽しい!