残暑というかもう真夏じゃねーか、という気温でいやんな感じです。でも夕方の風邪は大分過ごしやすくなってきました。
そんな秋の声が聞こえはじめている季節とは関係なく、今作っているtoolについて書いてみます。
なにこれ?
OCaml純正のfzfっぽいものです。しばらく前に書いたやつですが、一応それっぽく動くようになりました。最大の特徴はOCamlで書かれていることと、こういうfinder系では他にない(私が知らないだけという可能性が100%)、検索時にMigemoれることです。
見た目はこんな感じです。fzfっぽいのは仕様です。
Migemoっている風景は以下。
なんで作った?
簡単に言うと
- Migemoれるfinderが何となく欲しかった
- OCamlで作ってみたかった
- golangでこっそりにたものを習作として作ったことはありますが、golangはあんまり好きになれなかったので
- なんとなく
です。せっかくPure OCaml実装のMigemoを作っていたので、それをライブラリとして使ってみたかった、というのもあります。実際にはMigemoは他のツールに組み込むために作ったので、たまたまですが・・・。ちなみに自前でつくったmigemoは、若干機能がたりないけど、今もEmacsで普通に使えています。
出来ること
必要最小限です。
- 部分一致・Migemoの切り替え
- default queryの設定
- 検索結果をpipeで流す
- match部分のハイライト
まだ複数の単語でのマッチとかが出来ないのと、Migemoのライブラリが少し機能が足りないので、いますぐfzfの代わりに!というわけではないです。ただ、OCamlでもちゃんとこういうのは作れるんだぞ、というのはわかっていただけるかと。ちゃんとってなんだ。
これからの展望
まだまだ実用には遠いので、いろいろいじっていこうと思います。
- 複数単語でマッチできる
- Migemoの読み込みが遅い
- 毎回辞書を読み込むので、どうしても0.x秒くらい起動に遅延してしまいます
- これはライブラリの方で頑張るしか無いんですが
- Migemoで送り仮名で検索できない
- これはライブラリ側の問題ですね
- 検索候補を非同期で読み込めるように
- pipe周りを色々やらないといけない・・・
興味があったら見てみてもらえると嬉しいなー、というところです。
OCamlはライブラリがないなら作ってしまえばいいじゃない、という感じなので、自前で色々作る練習にもなりますよ。