howm-wrap でキーワードサーチに Hyper Estraier を利用する on xyzzy

Posted at Fri, 16 Oct 2009 in computer::xyzzy

タイトルの通りです。以前書いた記事(howm の検索に Hyper Estraier を使ってさらに速度改善 on xyzzyHE-grep を使って howm のデータを検索する on xyzzy)のリンク先が NotFound のため、 howm-init.l に追記すれば良いであろう部分を抜き出しました。
現在検証環境がないので未検証です。またコードについても私が書いたものではないので引用ということで。

;;;;;;;;;;;;;;;;;;
;; ■ howm-wrap でキーワードサーチに Hyper Estraier を利用する
(defvar *howm-view-HE-grep-command* "estcmd search -ic CP932 -vh -gs -max -1 -ord @title")
(defvar *howm-view-HE-grep-index-dir* 	 "C:/bin/xyzzy/.estraier-mode/casket") ;インデックスの保存されているディレクトリを指定

(defun howm-view-grep (str file-list &optional fixed-p)
  (when (stringp file-list)
    (setq file-list (list file-list)))
  (when *howm-view-force-case-fold-search*
    (setq str (downcase str)))
  (cond (fixed-p
	 (howm-view-HE-grep str))
	(howm-view-use-grep
	 (howm-view-real-grep str file-list fixed-p))
	(t
	 (howm-view-fake-grep str file-list fixed-p))))

(defun howm-view-HE-grep-initialize-buffer (buffer)
  (set-buffer buffer)
  (erase-buffer buffer)
  (set-buffer-fold-width nil)
  (setq need-not-save t)
  (setq kept-undo-information nil)
  (setq auto-save nil))

(defun howm-view-HE-grep (str)
  (let ((search-backward-f #'search-backward)
	(file-list (ed::read-HE-recent-save-files howm-directory))
	tmpbuf no-dup f)
    (save-excursion
      (setq tmpbuf (get-buffer-create "*howm-view-HE-grep-temp*"))
      (howm-view-HE-grep-initialize-buffer tmpbuf)
      (execute-shell-command (ed::format nil "‾A ‾A ‾A" *howm-view-HE-grep-command*
					 (map-slash-to-backslash *howm-view-HE-grep-index-dir*) str) nil tmpbuf)
      (set-buffer tmpbuf)
      (goto-char (point-min))
      (while (scan-buffer (compile-regexp "^URI: file:///¥¥(.+$¥¥)")
			  :no-dup no-dup)
	(setq no-dup t)
	(setq f (si::www-url-decode (match-string 1)))
	(setq f (substitute-string f "|/" ":/"))
	(when (file-exist-p f)
	  (pushnew f file-list :test #'equal)))
      (delete-buffer tmpbuf))
    (mapcan (lambda (file)
	      (howm-view-fake-grep-file str file search-backward-f))
	    file-list)))