« Opera でパネルにウィンドウを表示しておくとシンプルで見やすい | Main | Snow Leopard インストール »



Fri, 12 Mar 2010

xyzzy の psearch で新規に検索する前に一旦色を消す

Posted at Fri, 12 Mar 2010 in computer::xyzzy

psearch on xyzzyものすごく便利、と昔も投稿していますが、最近検索結果への色付けをはじめたところ、検索するごとに色をつけていってくれて自動で消してくれる機能がない。というわけで関数を一部上書きしてこんなんにして使っています。

;;;;;;;;;;;;;;;;;
;; ■ psearch ポップアップリストで検索
(require "psearch")
(global-set-key #\C-] 'psearch-popup-string-list)
(global-set-key #\M-] 'psearch-popup-list-again)
(global-set-key #\C-: 'psearch-popup-string-list-word-search)
(global-set-key #\M-: 'psearch-popup-list-again-word-search)
(global-set-key #\C-M-] 'psearch-goto-return-point)
;; インクリメンタルサーチでも使う
(define-key *isearch-map* #\C-] 'psearch-popup-string-list-isearch)
(define-key *isearch-map* #\C-: 'psearch-popup-string-list-word-search-isearch)
;; 色付けをする
(setq *psearch-coloring* t)
(global-set-key '(#\C-c #\]) 'psearch-delete-attributes)
(add-hook '*show-match-hook* 'psearch-coloring)
;; ポップアップリストを作る前に走る hook を追加するために関数を上書き
(in-package "editor")
(export '*before-psearch-hook*)
(defun psearch-popup-list (str case-fold word-search coloring regexp)
  (run-hooks '*before-psearch-hook*)
  (let ((list (psearch-make-list str case-fold word-search coloring regexp)))
    (unless list
      (let ((s (psearch-message-string str regexp)))
    (if regexp
        (plain-error "~A: 正規表現が見つかりません" s)
      (plain-error "~A: 文字列が見つかりません" s))))
    (popup-list list (psearch-goto-function case-fold word-search regexp))
    (let ((match-number *psearch-match-number*) (len (list-length list))
      (s (psearch-message-string str regexp)))
      (if (= len match-number)
      (message "~A: ~D" s len)
    (message "~A: ~D(~D)" s len match-number)))
    (run-hooks '*psearch-hook*)))
(in-package "user")
;; ポップアップリストを出しなおすときは、一旦それまでの色をクリアする
(add-hook '*before-psearch-hook* 'psearch-delete-attributes)

« Opera でパネルにウィンドウを表示しておくとシンプルで見やすい | Main | Snow Leopard インストール »