Xeft.elはDeft likeなノート検索インターフェイスを提供するElispパッケージです。
dynamic moduleを使ってXapianを検索エンジンとして利用することで、Deftよりも高速で高機能な検索機能を提供していることが特徴です。 Emacs 26以上で利用できます。
Xapianとは
Xapian projectはC++で開発されているオープンソース検索エンジンライブラリです。
Xapian is a highly adaptable toolkit which allows developers to easily add advanced indexing and search facilities to their own applications. It has built-in support for several families of weighting models and also supports a rich set of boolean query operators.
公式ページによると、PythonやJava、Node.jsなど様々な言語ランタイムにバインドできるサポートがあるようです。 current usersを見るとDoxygenなどが検索エンジンとして内包しているようですね。知らなかった。
Xeft.elでは検索機能をこのXapianを利用して実現しているため、XapianのQuery syntaxを利用して検索することもできます。
インストール
Xeft.elはGithubにもmirrorがありますが、READMEにあるとおりプライマリーリポジトリはsourcehutのようです。
straight.elでsourcehutからインストールします。
|
|
Xeft.elはGNU Elpaでも配信されているのでそちらからインストールしてもよいと思います。 後述のdynamic moduleのビルドを考えるとGNU Elpaの方がいいかもしれません。
次にXeft.elが対象とするノートファイルが保存されているディレクトリを設定します。 必要に応じてXeft.elが作成するデータベースを保存するディレクトリや、検索対象ディレクトリの再帰設定などもしておきます。
|
|
Xeft.elは前述のとおりdynamic moduleを利用してXapianを利用しているので、そのビルドが必要です。 初回に起動したときに、ビルド済みバイナリをダウンロードするか、手元でビルドするかを聞かれます。 ここでは、手元でビルドします。
Xapianのビルド
ここでのXapianのビルドにはMacOSを利用します。
ビルドにはXapianのライブラリが必要です。 XapianはMacOS向けにはbrewやmacportで配信されているのでこれらのツールでインストールできます。 ここでは、Nixpkgs経由でインストールします。
|
|
あとはXeft.elをもってきたディレクトリで make
します。
NixpkgsでインストールしたXapianは、 PREFIX=/Users/{user}/.nix-profile
でビルドできます。
straight.el
を利用した場合、dynamic moduleは build
以下に配置したいのですが、 repo
以下にしかMakefileやdynamic module用のソースがないためビルドに失敗します。
直接 repo
以下でビルドし、成果物を build
以下に配置する必要があります。またstraightがリビルドしたタイミングで消去されたりするので注意が必要です。
この記事の時点では最新のv3.3で作業しています。 CHANGELOGによると、v3.0のbreaking changeでDBの後方互換が崩れているので、もしv2.0系を利用している場合はデータベースを一回消す必要があります。
Xeft.elにパッチをあてる
v3.3を利用していると検索中に停止して動作しないことがあります。
エラーを見てみると、 void-function string-split
と怒られているので、typoの修正を行っておきます。
|
|
sourcehutではメーリングリストによるpatch送信が通例のようですので、このpatchはXeft.elの作者様にメールしておきます。
便利に使うための設定いくつか
検索ハイライト色を変更する
検索結果は目立つ色にハイライトしておきたいので、変更します。
|
|
SKKによる日本語入力を有効にする
Xapianは日本語検索をサポートしているので、日本語検索がすぐできるよう、XeftバッファではSKKを有効にしておきます。
|
|
ノートの作成時にOrgフォーマットのテンプレートを挿入する
ここではXeft.elからノートを作成したときに、 #+date:
ヘッダーの挿入とバレットを自動で挿入するようにします。
|
|
まとめ
Xeft.elはDeftに比べると大量のノートに対する検索は高速でかなり快適です。日本語もそのまま使え、クエリもあるので非常に便利です。
Deftはelispだけで実装されているためポータビリティが高いですが、Xeft.elはdynamic moduleが必要なためポータビリティはDeftに比べるとやや劣ります。 しかし、Emacsユーザーの多くはWindowsでもWSLを利用しているでしょうし、LinuxやMacユーザーにはそれほど大ききなビハインドではないと思いますので、Xeft.elはおすすめです。
Org roamでは全文検索にDeftを案内していますが、Xeftでも代用できます。ノートが大きくなってパフォーマンスが辛い人には非常によい選択肢ではないでしょうか。