次世代anything.elリリース真近

忙しい - IMAKADO::BLOG

そういえばanything.elってsvnかgitで開発されていたりするのでしょうか?

知っている限り、そういうのは使っていない。僕は原始的にRCSを導入した。ファイル1個なので。

リポジトリを公開したいのはやまやまなのだが、anythingはフレームワークなので公開してしまうと非互換な変更がしづらくなってしまう。いきなりの仕様変更でユーザーに迷惑をかけたくないので安定したらEmacsWikiに載せる形をとる。

現に1年ほど前anything-config.elのprefixがanything-からanything-c-に変更されたとき、移行に時間がかかった。anything-c-に変更される前からこっちはこっちでいろいろ情報源を定義していたので、これらもanything-c-に変更する必要もあったから。

id:rubikitchさんがanything.elのメンテナンスを引き継ぎ、怒濤の勢いで新機能が追加されて いってますね。

手元ではすでにRCS revisionが1.80まで到達している。ここまで開発意欲をかりたてるプログラムはxmpfilter以来だ。

もともと原作者の意向に「コアをあまり太らせない」というのがあるから、この意向は継承している。それでもかゆいところに手が届き、カスタマイズ性と拡張性は高めておいた。
俺の信念はユニットテストをしっかり書くこと。(将来の自分も含め)コードリーディングする人の助けになるし、バグがでにくくなる。というか、開発中にenbugしていることがわかった時があったり、俺自身がユニットテストに助けられた。anythingフレームワーク自身もユニットテストを支援するための関数を用意している。自分で定義した情報源のテストがやりやすくなるだろう。 俺自身のEmacsライフをよりよいものにするためにanythingを開発している。第1のユーザーでもあるのでanythingのバグに足を引っ張られては本末転倒だ。だからこそテストが大事。

拡張は主にプラグインで行う。元々anything-get-sourcesはtype属性が指定されてたらanything-type-attributesの該当部分を挿入しているから、これを任意の属性でできるようにした。いってみればanything-sourcesのコンパイル。そう考えるとtypeは最古のプラグインと考えることができ、現にそうなっている。candidates-in-bufferもプラグインだ。これらは組み込みプラグインなので、元から使えるようになっている。
そんなわけで勝手におれおれ属性を定義して、展開するのは簡単にできる。というか、おれおれ属性の定義は推奨するところである。プラグイン化することで再利用できるし、情報源がコンパクトに記述できる。DSL化だ。

同時に「人間に優しい検索プラグイン」も開発している。どんなのかというと、anything-pattern(つまり入力)を見て、完全一致を最初に表示し、次に前方一致を表示する。こうしておくと通常のemacsの補完に慣れている人にとってとっつきやすい。さらにスペースで複数のパターンも指定できるようにしている。スペース区切りの複数のパターン全てにマッチするもののに絞り込みを行う。anything.elって便利なんだけど、どこか使いづらいんだよなと思ったのが開発のきっかけ。外部プラグインとして別ファイルで配布する。
絞り込み検索さえあればanything-isearchは不要な気がしてならない。前方検索はできるけど後方検索はできないし。さすがに削除はしないけど個人的にはまったく使っていない。コードを読んでみると、use-global-mapとかかなりえげつないことやっている(怖) 使っている人いるかな〜?

persistent-actionでハイライト - asdf

anything-cleanupにフックか、sourceの属性で指定した関数を実行できる機構が欲しいな。と いうか両方かも。

init属性をコンストラクタに見立てた場合のデストラクタみたいなものかな。

次世代版ではcleanup属性とanything-cleanup-hookを用意している。