Pythonでコマンドラインランチャを作ろう!第八回−Excaliburの今後の見通し

前置き

こんにちはつかさです( ゝω・)☆
今日はExcaliburについての話題です。しばらくいじってなくてPythonとかいままで何やってたか忘れそうなので、整理の意味でまとめてみます。自動補完の続きは、次回からということで。間を空けずにやらないと忘れちゃうから、できるだけはやくしないと(;^ω^)

Excaliburの開発の動機とか

fenrirみたいなランチャを作ってみたいというのがまずあり、次にそれよりも使い勝手よくするためにはどうしたらいいかという発想になってきました。それで、craftlaunchと組み合わせたらいいんじゃね、みたいなことを思いついたわけですね。それについて詳しく見てみる。

Excaliburの今後

すべての動作の基点ということに特化したものにする。今までfenrirなり、他のソフトウェアをいじるなりして追求してきたことをここで解決したい、ということです。
普通にデフォルトのwindowsを使う場合、それは汎用的な使用を前提にしている。デスクトップしかり、エクスプローラーしかり。けれど、PCというのは個人的な使用がたいていの人の大半を占めるわけだ。友達の家に行ってPCを使わせてもらうとか設定してあげるとか共用のPCを使うとかだったらあれだけど、そうではなくてPCの使用というのは、個人的にデータをため、ソフトウェアをカスタマイズし、自分のためたデータを利用して云々、ということに必ずなってくる。この用途とは、デフォルトのwindowsはかけ離れているんですね。よく使うソフトかそうでないか、というので分けることができない、ということ。そのためにランチャだとかファイラだとか、個人的な使用を前提としたものを用いて、使い勝手をよくする。どこかでこういう事俺書いてたよな、とおもったらここでしたね。
そこでとりあえず追求することになるのは、普段よく使うソフトをいかに早く起動するか、です。ランチャを起動した後、2〜3のキーを叩くだけでそれが起動するようにする、というように実装することになる。craftlaunchとかもそういう発想ですね。けれど、登録がめんどいという欠点があった。
fenrirは、今までの登録式ランチャの弱点である、登録がめんどくさいということの克服を意図しており、そのためにパスを一気に取得してランチャにする、という検索の思考がある。
この利点を残したままで、よく使うソフトは使うソフトで分けておき、少ない手数で起動できるようにしよう、と。

fenrirについて

すべてのファイル、フォルダを平等に検索する。ファイルのパスというのを基準にしており、それを分ける方法が、使ったものを上位にもってくる以外にない。よく使うファイル、フォルダ、という観点がない。どんなファイルも同様にパスの絞り込み、実行という手続きになる
だからこれを克服することになるんじゃないかと。

よく使うファイル、フォルダについて

ファイルを使うときには、名前の一部でも覚えていてそれをたどる、という方法の他に時系列という記憶でたどるという二つの方法があると思う。
たとえば、最近ダウンロードしたものについては、名前で覚えているよりも最近ダウンロードした、ということでたどっていくことが多いわけだ。ダウンロードしてくるファイル名は、それの制作者なりだれかなりがつけたものになる。それが自分でつけたものではない以上命名規則に統一性があるわけがなく、最近ダウンロードしたもの、という時系列をたどって探すしかなくなる。ファイル名では探せない例ですね。
他にも、名前でいちいちたどるのが面倒な場合がある。よく使用するソフトだとか、いちいち名前を打ち込むよりもcraftlaunchみたく登録しておき、常に上位に来る方がいい。fenrirだったら、確かによく使う、ということで上位に来ている可能性は高いけれども確実ではない訳だ。
というわけで、だいたい上の二つくらいを、名前で検索する、ということに組み込めたらいいんじゃないかなと思うわけです。

具体的なファイルの使用用途による区別

一応、僕的に区分すると

  • 実行ファイル
  • ダウンロードファイル
  • 編集しているファイル(Wordやソースコード
  • 名前で探せるファイル
  • 時たま必要になるソフト

では、それぞれみていきましょー^^

実行ファイル

ファイラ、ブラウザ、メモソフト、などでしょうか。
とりあえずこれらは、パスに関係なく上位に来る方がいい。コマンドの登録だとか空欄コマンドだとか。
これらをスタートアップに登録し、常時起動させておくというのもありはありだけど、その場合デスクトップ上の情報量が増えてしまってうざったい。というわけでいちいち消しているけれど、タスクバーを消すとかタスクトレイに入れるとかAltTabが使いやすくなるとかの方法があれば、いいのかもしれない。

ネットからダウンロードしたファイル

これもよく使う。最近使ったもの、という時系列で覚えているものですね。これについては、どうせいちいちダウンロードしたファイルの名前なんて覚えていないから、ダウンロードフォルダのみを素早く開ければいい。

編集中のファイル

ソースコードだとか、word、一太郎などでつくった文書などしょうか。メモ書きは、どうせhowmでやっているから僕の場合は除外できる。これも、すぐに実行できる方がいい。あとこれは陳腐化するから、時系列で最近使ったファイルとして表示してくれるとうれしい。

名前で探すことができるもの

fenrirで十分な領域ですね。これは、時間がたつことで陳腐化しなかったり、最近のもの、最近使ったものだと言うことで重要度が測れないものです。MP3ファイルだとか、メモだとか、画像だとかはいつ作成したかに関わらず使うし、時系列でたどることは少ない。これらは名前でたどるほうがいい。
でも、MP3とか画像だとか、名前で現状統一できてない状態なんだよな。画像なら、それを閲覧しながら簡単に名前も変えられる、というようにしたりとかできたらいいかもしれない。

恒常的に使うわけではないが時たま必要になるソフト

文字数数えるとか物差しとかPCの状況を知るやつとか、でしょうか。これらは、時系列でも名前でもそこにたどりつくことは無理だから、Shorter Launcherとかを利用して、ランチャから呼び出すという感じになると思う。

対策

名前での絞り込みと、時系列での絞り込みの二つを利用できるようにする、というようにやることが絞られる訳です。
それぞれどうやって実装するか、が問題になります。

名前

基本fenrirの方法の応用でおkだと思う。
あとは、migemoを実装するくらいでしょうか。これは、今の僕には少しきつい領域。
あとは、fenrirでやっている、使ったパスは上位に移動するアレとか。

時系列

時系列が必要になるのは、上に見たように最近作ったファイルとダウンロードしてきたファイルですね。
ダウンロードしてきたファイルについては、それのダウンロードフォルダを開き、それを時系列でソートし、上にいくほど最近ダウンロードしたファイルがならぶ、というようにすればいい。考えたら、今みたくいちいち月ごとのフォルダを作成して、というのも微妙なのかもしれないな。ダウンロードフォルダみたいなのを作って、鬱陶しくなったらそれを月ごとフォルダに分けるというようにしてもいいかもしれない。MP3ファイルでやっているみたいに。
もう一つ、これが必要になるのが最近作成したファイル。これは、Winキーを押したときの、最近使ったファイルみたいなのを実装できたら一番いいんだとは思う。けれど多分難しいので、別のやり方を。
最近使ったかどうかは、最終更新日時で分かるから、それを利用する。これも同様に、その作成したファイルを入れているフォルダを開き、それを時系列ソート、更新日時順でやるのがいいのかなと思う。もっと手を加えたら、あらかじめフォルダを登録しておき、それをひとつのフォルダにあるみたいに表示させる、というのもありかもしれない。

他のこと

空欄コマンドなり他の起動方法なりを追求する。できるだけ少ないコマンドでできるように。最初は、そもそも起動直後はウィンドウさえ表示させず、カーソルの点滅かなにかで起動したことだけ知らし、数文字打ち込んだら初めてウィンドウが出るようにしようか、とかさえ思っていた。どうも無理そうなので、たぶんやらないけど。

また、同時に他のソフトの使い方でどうにかなる部分は、それも含めて考える。たとえば、タスク切り替えソフトを充実させればあふやブラウザをいちいち起動する必要もなくなるというように。必要なのは最初に起動し、その切り替えを楽にする。今のままだと、最小化するのに非常に手間がかかり(いちいち最小化ボタンを押さないと駄目)結果いちいち消し、そのたびにタスクバーを押すなりなんなりしている。こういうのをすべて、最初から考える必要。タスクバーをなくす方向になるのでしょうか。今の状況だと、どうしたって情報量をデスクトップから減らすのに一番いいのはタスクバープラスAltTabあるいはいちいち消すしかない。どうにかして、タスク切り替えソフトとランチャをくっつけたものにしてしまうというのはどうだろうか。
この場合、Excaliburでこういうほぼ常駐ソフトに対策する必要はなくなる。

Excaliburについて

今まで、多少停滞して開発は滞っていた。それは、最初から完全なものにしようとして、困難なことを最初にやろうとしていたからです。
現状突き当たっていた問題は、migemoの導入であった。
migemoは、どうしたって導入しなければ使い物にならない。ファイル名の検索を含ませる限り。それがないと、絶対にfenrirより使い勝手がよくなることはない。
それで、しばらくmigemoを導入することを追求していたが、予想以上に困難だった。ctypesというのをimportすればいいことまでは分かったが、リファレンスを見てもさっぱり意味が分からない。そもそも、ポインタというのが意味不明。そこで、これはC言語をまず習得してある程度理解しなければならないのかな、と思ってCの勉強を始めた。で、ある程度まで理解したのだけれど、やはりctypesでの使い方が分からない。
しょうがないから、Cでひとつソフトでも作ってそれでちゃんと理解し、そしてそれをctypesで活かすか、と考えていたんだけれど、あるとき次のことを思いついた。別に、いきなり完成を目指さなくていいんじゃないか。だいたいできて、それでも難しかったらCで同じようなの作ったらいいんじゃないか。というか、wxWidgetsってCでも使えたんじゃないか、ここである程度まで完成させ、型を作ってそれを活かして別のをつくるというほうが、延々と悩んでいるよりもよくないか、と。

今後の大きな流れ

migemo以外の、fenrirが現状到達している地点まで行き、そのあとで、時系列だとかの上に書いたようなのを、付け足していく、という感じですね。
そして、それと並行してCの勉強をして、移植なりする、と。

Excaliburの開発で進めること

と、いうわけでExcaliburの開発を再開します。とりあえず、fenrirの地点まで行く方法について大まかに考察する。

あと残っていることで重要なのは、次のこと。

自動補完。craftlaunchみたいなあれですね。それのひな形を作る。これはもう半分までできている。あとは、リストボックスを表示するのをしたらいいだけ。

次にパスの表示。これはほぼ完成している。厳密に言えばディレクトリモード(フォルダ展開時とか、fenrirのオプションでは書かれている)なるものを付け加えないといけないんだけれど、まあいいでしょう。

あと、パスを取得する方法。walkを使うやつです。これも、まあ難しくはないでしょう。

あとは、細々としたこと。iniファイルの設定、表示位置の設定、キーボードショートカット、などなど。