用 Helm 展示 El-search 的结果

作为 el-search-occur 的补充,下图搜索 Magit 中 pcase 的使用:

昨天写的代码(在 El-search 作者的帮助下),不确定有多大实用价值:

(defun el-search-helm ()
  (interactive)
  (el-search--message-no-log "Preparing helm...")
  (unless el-search--current-search
    (user-error "No active search"))
  (let* ((search el-search--current-search)
         (stream-of-matches (funcall (el-search-object-get-matches search)))
         (candidates (mapcar
                      (pcase-lambda ((and match `(,buffer ,match-beg ,file)))
                        (with-current-buffer buffer
                          (cons (buffer-substring-no-properties
                                 match-beg (el-search--end-of-sexp match-beg))
                                match)))
                      (seq-into stream-of-matches 'list))))
    (require 'helm)
    (helm :sources
          (helm-build-sync-source
              (el-search--get-search-description-string el-search--current-search)
            :candidates candidates
            :multiline t
            :action (pcase-lambda (`(,buffer ,match-beg ,file))
                      (if file
                          (find-file file)
                        (switch-to-buffer buffer))
                      (goto-char match-beg)))
          :buffer "*helm el-search*")))
1 个赞