anything-match-pluginの制限→candidates-fileプラグイン推奨
http://d.hatena.ne.jp/joan9/20090211/1234332160
その他のsourceではミニバッファで検索語句をスペース区切りで入力していくと絞り込みがで きるのだけど、locateのところだけうまくいってない。
不便なので原因を調査して絞り込みできるようにしたい。(そもそもできないってことはない よね?)
残念ながらこれはanything-match-pluginの制限で、locateに関してはできません。locateのcandidatesはサブプロセスであり、anythingの入力がそのままlocateの引数に渡ります。その他のsourceは文字列リストなので絞り込みができます。anything-match-plugin的にサブプロセスに対する挙動をどうするか決めかねています。僕自身サブプロセスは使っていません。
そのかわり、ファイルリストを作成してそのファイルをcandidates-in-bufferで候補化する方法があります。ファイルリストはfindとcronで更新しておきましょう。findの出力を一時ファイルに書き込んでリネームすると、アトミックに更新されます。
$ find ~ > /tmp/tmp; mv /tmp/tmp /log/home.filelist
http://www.emacswiki.org/emacs/RubikitchAnythingConfiguration より
;; candidates-file plug-in (defun anything-compile-source--candidates-file (source) (if (assoc-default 'candidates-file source) `((init acf-init ,@(let ((orig-init (assoc-default 'init source))) (cond ((null orig-init) nil) ((functionp orig-init) (list orig-init)) (t orig-init)))) (candidates-in-buffer) ,@source) source)) (add-to-list 'anything-compile-source-functions 'anything-compile-source--candidates-file) (defun acf-init () (destructuring-bind (file &optional updating) (anything-mklist (anything-attr 'candidates-file)) (with-current-buffer (anything-candidate-buffer (find-file-noselect file)) (when updating (buffer-disable-undo) (font-lock-mode -1) (auto-revert-mode 1))))) (defvar anything-c-source-home-directory '((name . "Home directory") ;; /log/home.filelist にホームディレクトリのファイル名が1行につきひとつ格納されている (candidates-file "/log/home.filelist" updating) (requires-pattern . 5) (candidate-number-limit . 20) (type . file))) (defvar anything-c-source-find-library '((name . "Elisp libraries") ;; これは全Emacs Lispファイル (candidates-file "/log/elisp.filelist" updating) (requires-pattern . 4) (type . file) (major-mode emacs-lisp-mode)))