アーカイブ

2012年 7月 5日 のアーカイブ

 真魚にアウトライン機能もどきを付けたくなったのは、自分で真魚のソースを見るのが久しぶりだったこともあり、探してる部分にいちいち検索で辿り着くのが面倒くさいって事が大きい。目的の機能別にユニット分けして、ユニット数は多くなってもその一つ一つが大きくならないようにってのがあたしの好みのスタイルなんだけど、そうなるように作っててもDelphiだとメインフォームが大きくなっちゃって、真魚でもメインフォームは5000行になっている。その5000行の中から目的の場所を探すのが面倒くさい。探すったってDelphiで真魚を作ってるわけだから、DelphiのIDEで探すわけで、真魚で真魚のソース内を探す機会は少ないけれども、IDEで探すよりも便利な機能が真魚にあれば、もしかしたらIDEが面倒くさくて探すときは真魚になるかも知れない。

 ちゃんとDelphiにはコードエクスプローラがついてて、構造を解析して表示してくれるわけで、そこらの解析機能付きテキストエディタより、IDEでやってくれる方がよっぽどしっかりしてるのは間違いない。ところがこれって、確かにあると便利な場合もあるかも知れないが、少なくとも真魚のソース内を移動するためには全然便利じゃない。真魚のメニューとかツールバーとかに項目が一つ増えるとコードエクスプローラにも項目が一つ増えるんだけど、あたしが探してジャンプしたい場所ってのは関数であって、メニューとかツールバーのメンバにジャンプしたい事はない。コードエクスプローラの性質からして、ジャンプしやすさよりも構造の視認を優先するものだろうから、これはこれで良いんだろうけど、あたしの目的には合致しない。コンストラクタに移動したい、デストラクタに移動したいって時に、5000行から普通にスクロールさせて探すのは無理だし、フォームから移動できるのはイベントハンドラばっかりだし、しょうがないからinterface部で探してShift+Ctrl+↓とかするんだけど、それじゃコードエクスプローラの方が本来は使いやすいはずなのに、コードエクスプローラは使わない。つまり使いにくいんだよ。単に的確に構造解析を出す事が、使いやすさに結びつくとは限らないって事だよな。ソースが長くならなければ解析してジャンプする機能はいらないわけで、ソースが長くなったときに使いやすいかどうかが、必要な機能かどうかって事になるんだと思う。これ別にDelphiの解析だけじゃなくて、テキストエディタがそういうのを実装する場合にも言えることで、機能がついてるのはいいけどそれって便利なんですかって事まで考えてんのかしら。よそのテキストエディタに付いてる機能だからってんで付けるんじゃなく、あれば便利だって確信があって付けてるかどうかよ。gPadさんでCの関数は便利に出来てると思うが、Delphiは対応してないから、まだ真魚ソースを便利に移動できるテキストエディタには出会ってない。HTMLとかTXTとかは、書式をgPadさんで設定した正規表現にに合わせれば上手く行くが、そうでなければ全然便利になる物じゃない。

 はたしてDelphiのコードエクスプローラより使いやすい解析を真魚に実装できるんだろうか。Delphiソースに限定すれば、関数だけ抽出すればコードエクスプローラやinterface部より使いやすくなる可能性はある。その上、行の順番ではなくアルファベット順にもソート出来れば幸せになれる。いくつかのプログラミング言語では関数の抽出は意義がある事かも知れない。でもそれじゃオールマイティじゃないんだよね。オールマイティじゃないからこそ、ユーザー設定で細かく指定できるようにして、どこで妥協するかをユーザー自身が決められるようにすべきだと思う。そうなるとgPadさんが正解よ。でも真魚はそういう設定をユーザーにさせないつもりだから、正解の実装は出来ない。だったら色分けと同じで、正規表現じゃ無理なほど詳細に作り込むことで、ユーザー設定の余地もないくらいにするしかない。そこまでは出来ないと思うけど。

 Grepに定型文を用意するみたいな物だから、普通にやってたらGrepと機能がかぶって、じゃあGrepでいいじゃんって事になるから、それ以上に便利にって考えると、やっぱり階層化が必要かも知れない。なんかもうやっぱり面倒くさくなった。これ、出来ないかも。いや、便利じゃなくてもとりあえず機能だけ付けて多機能なフリするのは出来ても、便利な機能として用意するのは難しいかも。すまん、こんな風に書いちゃった以上、名前は伏せるが、とりあえずのアウトライン機能が全然便利じゃない某多機能テキストエディタに触れてしまった。真魚も面倒くさがってその程度かそれ以下の実装しか出来ない気がする。

 初心者なのでウィキペディア等で調べたんだけど、世の中にはアウトラインプロセッサとかアウトライナーとかいう物があって、文章を書くときに大見出しを作って中見出しを作って小見出しを作ってっていう感じで使うんだそうだ。そのアプリで独自の形式で保存すれば構造もセーブ出来ると思うからいいんだけど、その方法ではなくて普通にテキストファイルとして保存しつつ、なおかつそのテキストファイルから見出しを抽出して階層化するって事までこなしちゃうテキストエディタがあるわけだ。それに関する話。

 どのテキストエディタがって話になると、あたしが最近試したのはgPadさん(面白いので今後ずっとgPadさんはさん付けで行こうと思ったけど、面倒なので以下敬称略)ぐらいなので主にgPadの話になるが、これってたぶんアウトラインじゃないと思う。たぶんちゃんとアウトラインと呼べるのは見出しを階層化してこそであって、gPadは階層化しないで見出しを列挙してるんだよね。それにしたってどうやって列挙してんだか、あたしには見当もつかなかったけど、設定関連を見ていったらだいたいこうやってるんだなってのはわかった。まぁ、分からないようだと設定できないから、設定できるようにした意味もないからダメだけどね。どうやらまずは正規表現で見出しを抽出するらしい。Cなら関数を見出しにしてるから、voidとかstaticとかで始まって引数のカッコがあるような行が、とりあえず見出しの候補になってるらしい。でもそれだけじゃなくて、Cだと中括弧が次に続く事が分かってるわけだから、とりあえずの見出し候補から中括弧の有無で絞り込んで見出しにしてるっぽい。HTMLの場合はタグで始まる行をとりあえずの見出しとし、次の行がインデントしてあるかどうかで絞り込んでるっぽい。なるほどなぁって思った。

 そのgPadの場合はツールバーに見出しが列挙されるけれども、むかーしむかしあるところで見た覚えのある何かとしか記憶にない別のテキストエディタでは、ドッキングウィンドウ的な場所に構造化して表示されてたはず。構造化するならその折りたたみとかもできなきゃ行けないからgPadのようにツールバー表示は出来ないよな。ツールバーに表示するために、あえて構造化せず最小限の見出し抽出だけにしたんだろうけど、あたしはその簡易化されたアウトライン機能を見て「このくらいならパクれそうだな」と思う事が出来たので、どうパクったらいいか考え始めている。

 真魚でパクるとしたら、ツールバーでもドッキング窓でもなく、ダイアログボックスを出すつもりでいる。「しおり行へ移動」みないな感じで、「見出し抽出」って項目をクリックするとダイアログボックスにリストアップされる感じで。しおり機能は自分で使わないし、真魚の内部構造的にも向いてなくて無理矢理やってるから嫌いなんだけど、よそのテキストエディタのしおり移動が不便なので、こうやって作って欲しいという提案の意味合いで見世物でやってるんだけど、たぶん誰もパクってくれてないのでガッカリしている。まぁ、そんなだからこそあたしはまだ真魚を作り続けて、今後も提案していこうと思ってるんだけどね。でも見出しの機能に関しては提案でも何でもない。自分に出来る範囲で考えたらそのくらいしか出来ないだろうっていう事でやろうとしている。やろうとはしてるけどやらないかも知れない。

 って、まだまだ書きたいことに突入してない。その辺書いて嫌になって結局出来ないなって事になったりして。