言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

エディタを作る2


Fonc 用エディタの動機をさらに書く。Fonc の為にダンアメランが描画周りをやって、大島さんがフレームワークを作ると言ってるけど、そう言うのを待つの嫌だし、エディタって意外と他の部分と非依存に作れるのでは?と思った。emacs なんかターミナルでも X でも Windows でも動くし。スクイークのエディタも MVC のコードで動いてるし。私のコードはよく捨てられる運命にあるので、リスクの少ないニッチな部分で頑張ろうと思う。

実装はあまり進んでないけど、アイデアは固まってきたので書く。基本は、単純なコアを作って、周りをマクロの階層構造で作っていこうと思っている。例えばコアはメモ帳程度の GUI と、マクロで使うための最低限の API があって、その周りに UNDO とコピペが可能なくらいのちょっとマシな機能を提供するマクロがあって、その周りにさらに高級な機能があるという風にする。ポイントは最低限のコアでも一応マクロを編集する程度の事は出来て、問題が発生した時は何時でもマクロを脱ぎ捨ててコアの編集機能が使えるという事。つまり、emacs みたいにマクロが無いと起動すらしないというのでは無くて、一応エディタとして使える。また、スクイークみたいに低レベルの機能が高レベルの機能に依存していて、意外な所で意外な部分が壊れる恐怖にビクビクする事も無い。ファイルベースの Fonc だと、こういう依存性のチェックがスクイークよりよっぽど簡単だ。

どれがコアでどれが高レベルなのか考えるのはなかなか難しい。Fonc の場合コンパイルして実行する Pepsi より、マクロとして使う coke の方が速いらしいので、純粋に機能だけ考えれば良い。今の所、ファイルのロードとセーブ、カーソルキーと選択とバックスペースと、マクロ実行の機能だけ入れて、マクロ部分を書き始めた所。最初に emacs キーバインディングを実現するマクロを書いてみようと思う。コア機能ではスクロールさえ出来ないしマウスも使えない。

それでもマクロの実行が出来るだけで随分面白い。例えばハイパーリンクが実現出来る。単に他のファイルを読むマクロをファイルに書いて、選択して実行するだけの事だけど。勿論電卓としても使える。構想だけで言うと Web Browser Workspace から始まって、Javascript Workspadce, Tilescript と言語を変え環境を変えて進んできた私のワークスペースシリーズの集大成になるのではと期待している。