# -*- org -*- #+TITLE: 使用 Anything 实现增量 occur #+SETUPFILE: ../templates/level-1.org [[../index.org][首页]] [[file:index.org][程序设计]] [[file:emacs.org][GNU Emacs 的配置与扩展]] [[file:../org-images/delayed-anything-occur.png][file:../org-images/delayed-anything-occur-thumbnail.png]] #+BEGIN_SRC emacs-lisp (defun wl-anything-delayed-occur-candidates () (setq anything-occur-buf (get-buffer-create "*Anything Occur*")) (with-current-buffer anything-occur-buf (erase-buffer) (let ((count (occur-engine anything-pattern (list anything-c-source-occur-current-buffer) anything-occur-buf list-matching-lines-default-context-lines (if (and case-fold-search search-upper-case) (isearch-no-upper-case-p anything-pattern t) case-fold-search) list-matching-lines-buffer-name-face nil list-matching-lines-face (not (eq occur-excluded-properties t))))) (when (> count 0) (let ((lines (split-string (buffer-string) "\n" t))) (cdr lines)))))) (defvar wl-anything-c-source-delayed-occur '((name . "Occur") (init . (lambda () (setq anything-c-source-occur-current-buffer (current-buffer)))) (candidates . wl-anything-delayed-occur-candidates) (action . (("Goto line" . (lambda (candidate) (goto-line (string-to-number candidate) anything-c-source-occur-current-buffer))))) (requires-pattern . 3) (volatile) (delayed))) (defun wl-search () (interactive) (anything 'wl-anything-c-source-delayed-occur nil nil nil nil "*Anything Occur*")) #+END_SRC