読者です 読者をやめる 読者になる 読者になる

anything.el用のソースでcandidates-in-bufferを使うとき気をつけること

anything.el用のソースではcandidates-in-bufferというオプションを指定できます。

表示する候補をバッファから抽出してくれるというもののようですが、
このオプションを指定すると、絞り込みの機能がデフォルトになってしまいます。

どういうことかというと

例えば、anything-migemo.elがあれば、migemoというオプションを指定することで、
絞り込みでmigemoれるようになります。
これは、絞り込みの機能をanything-migemo.elの関数に変更することで実現しています。

しかし、candidates-in-bufferを指定していると、絞り込み機能がデフォルトになり、
migemoオプションを指定していても、migemoれなくなってしまいます。

対処

以下のように、candidatesオプションを使うことで、絞り込み機能がデフォルトになるのを防げます。

(defvar anything-c-source-hatena-bookmark
  `((name . "Hatena::Bookmark")
...
    (candidates-in-buffer)

ではなく、

(defvar anything-c-source-hatena-bookmark
  `((name . "Hatena::Bookmark")
...
    (candidates . anything-candidates-in-buffer)

のようにする。

ちなみに

anything-sourcesのヘルプにちゃんと記述はありました。

- candidates-in-buffer (optional)

  Shortcut attribute for making and narrowing candidates using
  buffers.  This newly-introduced attribute prevents us from
  forgetting to add volatile and match attributes.

  See docstring of `anything-candidates-in-buffer'.

  (candidates-in-buffer) is equivalent of three attributes:
    (candidates . anything-candidates-in-buffer)
    (volatile)
    (match identity)

  (candidates-in-buffer . candidates-function) is equivalent of:
    (candidates . candidates-function)
    (volatile)
    (match identity)

  This attribute is implemented by plug-in.

※抜粋

まとめ

anything.elのソースを定義するときは、オプションによる作用をちゃんと把握するようにしないと、
意図しない作用があるかもしんないから気をつけよう。

というか

anything-hatena-bookmark.elが動かなくて調べ始めたんだけど、anything.elの挙動が変わったのかも。
だとすると、プラグイン側で追従するのは辛い感じだよなぁと思ったり。

※ ちなみに、ここで言及しているanything.elのバージョンは1.3.9です。
※ ちなみに、私はanything.elのソース定義したことありません。
※ そんな立場の人間が記事書くなよって感じですが、備忘録も兼ねてってことで。