コマンドラインランチャー作りました

なんとなく思い立って、Windows用コマンドラインランチャー「iceberg」をリリースしました。設定はLuaな設定ファイルのみという硬派なソフトなのでエンジニア向けです。

ダウンロードとドキュメントは以下から。とりあえずWindows64bit版しか今はないです。

image

これはなに?

シンプルなコマンドライン型ランチャーです。かなり昔から自分用につくって細々使い続けてきたものなので、ソースは割と悲惨です。何回か頑張って書き直しましたが気力が持ちません。使い続けているだけあってそこそこ安定しているはずです。一方あんまり使っていない機能はしらないうちに動かなくなっているかも知れません。というか動かなくなっていたので公開にあたってちょこちょこ直しました。

開発に至った思想は以下のような感じです。

  • 旧craftlaunchを使っていたのだが以下の不満があった。

    • アイコンくらいほしい。
    • 引数を渡すために ; と書かなくてはならないのが嫌だった。
    • 拡張言語がなにかしらほしかった。

      • そうこうしているうちにPythonで拡張できるcraftlaunchが出てきたが なんとなく自分の思ってたのと違った
    • 設定をバージョン管理システムで管理したかった

      • そうこうしているうちに(ry なcraftlaunchがでてきたんですが…
    • 見た目がもう少し派手でもいいんじゃないかと…

    • 曖昧マッチ(firefoxにffでマッチするような)がほしかった

特徴としては以下かなと。

  • Luaで拡張できる
  • 「普通に」引数が渡せる。ダブルクオーテーションで囲えば空白もOK
  • 前方一致、部分一致、あいまい検索ができる
  • migemo対応
  • 簡易ファイラとしても動作
  • 外部プログラムとの連携機能あり

    • 外部プログラムからicebergの入力欄に文字を入れるとか
  • 空白にもコマンドを割り当てられる

技術的な話

実装言語はC++ & Luaです。なぜLuaかというとやはり組み込みやすさが段違いで、拡張言語としての扱いやすさはPythonより高いと思っているからです。そろそろC#に移行しないといけませんかねえ…。

工夫した点というかハマったのは使用しているGUIライブラリであるfltkの挙動ですね。マルチバイトフォントのレンダリングがとてつもなく遅いのです。なのでリスト表示部分は自前でwin32のAPIを呼んでいます。コマンドラインランチャはサクサク感がウリですから、もたるのはちょっと。ただ入力欄はfltkのままなのでここに長い日本語を一気にぶち込むと少し固まります。とはいえ、こうしてハマってもすぐソースがよめるのがfltkの良いところだと思います。

あと、内部的にutf8で処理してます。はっきりいって無駄が多いんですけど、utf8はいろんなライブラリ混ぜるなら楽ですね。fltkもutf8なら日本語通るし、Luaもutf8なら日本語OK。PCの性能もあがっているので文字コード変換が増えてもつくりが楽だしこれでいいかなあ、と。

結構前から64bit Windowsの環境しかもってないのですが、もちろん昔は32bitで動かしていたのでたぶん、MinGWで git clone , ./tool/install_requires.sh , make dist , make package とやればコンパイルできる…はず。

一応OS依存部分は分岐させてあるので、その気になればMacとかLinuxにも移植できる…はず。

comments powered by Disqus