しょぼしょぼすくりぷと xyzzy編 > ツール/ゲーム ジョークライブラリ集 > インクリメンタルサーチ機能の拡張、色付けなど

インクリメンタルサーチ機能の拡張、色付けなど

xyzzyに標準装備されている インクリメンタルサーチ機能 isearch.lがあります。 それに色付け機能をつけました。

isearch-deco.lの特徴

isearch機能を拡張し、色つけ機能を付けました。

その他に toggle機能と簡易ヘルプ表示機能も持たせています。 mode切り替え機能は 標準、case-fold、正規表現、曖昧検索、 migemo検索 and検索等ができます。 toggleには、色つけ有り無し、

機能

参考:mini bufferに入ったとき IME を OFFにするには

migemoは服部さんところを参考に、本家からも本体をダウンロードしてインストールしておいて下さい。
xyzzy > migemo.l
C/Migemo | KaoriYa.net 64bitじゃない方を使用しています。

TIPS

isearch起動中の操作キー

usage(使い方)                      F1

abort(キャンセル)                  C-g
exit(その場で終了)                 RET
delete-char                        Delete

repeat(再サーチ)                   C-r        ←→  C-s
history(検索履歴辿り)              C-p or up  ←→  down or C-n

toggle decoration(色つけON/OFF)    TAB
toggle 検索パターン切替            C-.

yank-word                          C-w
検索後grep一覧                     F10

ソース

isearch-deco.l

設定例

先に、isearchの設定を済ませて、インクリメンタルサーチ機能をONにしておきます。 できれば先にisearch.lを読んでおいてからこれ"isearch-deco"を後読みしてください。

例
; インクリメンタルサーチ (C-s or C-r)
(load-library "isearch")
(load-library "isearch-deco")

;2行以降はお好きな設定で
(setq *coloring-pattern-min-word-length* 3)
(setq *coloring-pattern-hilight-match* '(:bold t :underline t :foreground 0 :background 1))
(setq *isearch-visible-error* nil) 
  
;設定例 詳細版
(load-library "isearch")
(require "migemo")
(load-library "isearch-deco")

;装飾や色など
(setq *coloring-pattern-hilight-match* '(:bold t :underline t :foreground 0 :background 1))

;色つけに対してマッチした検索文字列の無視する長さ
(setq *coloring-pattern-min-word-length* 3)

;強調表示する方向を考えるか
(setq *coloring-consider-direction* t)

;max limit of search and decorate match strings.
;ある程度以上マッチしたらいちいち色つけ無い 数
(setq *coloring-number-limit* 20)
;ある程度以上マッチしたらいちいち数えない
(setq *isearch-number-limit* 500)

;色つけ処理しない。
(setq *isearch-deco-ignore* nil)

;色つけ処理しない バッファーサイズ(一定サイズ以上)。
(setq *isearch-deco-ignore-buffer-size* (* 1024 500))

;カーソル(キャレット)の側で情報を表示させるか *isearch-deco-ignore* が nil の時作用
(setq *coloring-popup* t)

;isearch-decoで正規表現で検索しない
(setq ed::*isearch-regexp* nil)

(defvar *isearch-mode-pattern-func-list*
      (list
       ;(list "label"  regexp  case convert-func )
       (list "normal" nil  nil nil )
       (list "case-fold" nil  t nil )
       (list "regexp" t nil nil)
       (list "ambiguous" t nil 'convert-ambiguous-pattern)
       (list "migemo" t nil 'migemo-query);migemo.lインストール後 migemo-offのまま使ってください。
       (list "isearch-scanner-hook" t nil nil) ; listの最後はこれ
       ))
;関数は検索語を渡すと、検索パターンが返ってくればOK

(defvar *ambiguous-size* 2);曖昧度

  



上図、インクリメンタルサーチに色がついた動作例:左上が現在のカーソルの位置

mini bufferに入ったとき IME を OFFにするには

検索パターン

参考例として以下の検索パターンを実装しています。
(setq *isearch-mode-pattern-func-list*
      (list
       ;e.g. (list "label"  regexp  case convert-func )
       (list "normal" nil  nil nil )
       (list "case-fold" nil  t nil )
       (list "regexp" t nil nil)
       (list "ambiguous" t nil 'convert-ambiguous-pattern);あいまい検索
       (list "migemo" t nil 'migemo-query);migemo.lインストール後 migemo-offのまま使ってください。
       (list "and search" t nil 'isearch-and-query)
       (list "or search" t nil 'isearch-or-query)
       (list "top-indent" t nil 'isearch-top-level-query);行頭がスペースでないものだけ対象
       (list "oneline-comment" t nil 'isearch-comment-query);1行コメントのみ
       (list "isearch-scanner-hook" t nil nil) ; listの最後はこれ
       ))
;関数は検索語を渡すと、検索パターンが返ってくればOK

関連リンク

静的/動的補完とは? とその設定方法
静的・動的補完の説明とその使い方を実例を上げて説明

multi mode
複数のメジャーモードをあたかも同時に扱うようなmode

キーワードファイルの設定方法
xyzzyのキーワード設定方法

動的なisearchのインクリメンタルサーチに色付け
isearch.lを拡張して、色がつくようにします。



履歴

(01/16/2005)
level-back 関数追加

(01/12/2005)
grep と 連携 (単純に)

(12/31/2004)
速度改善、処理改善,描画ルーチン改善、
処理に一定時間かかったら切り上げる

(12/30/2004)
HOME キーで 次の buffer も あやしく 検索対象に(仮)
(もしかしたら、iseach-exit , isearch-abort , isearch-delete-char
の間違ってた処理が直ったかも)

(12/29/2004)
bufferサイズが一定サイズ以上なら 色つけ処理はしないようにした。

(12/28/2004)
C-i で 色つけを無視したりするのを 切り替えるようにした。(ignore)
C-c で Case fold(大文字/小文字) 切り替えるようにした。
C-a で 正規表現を 切り替えるように
C-u で 簡単なヘルプを表示(usage)

HOME で 他のbuffer も検索対象に(test中)

; popup stringバグ対応
; packageミス対応
; 一文字消去やhistoryの色つけに対応
; C-gをちょっと変更


関連リンク

しょぼしょぼすくりぷと xyzzy編 | ツール/ゲーム ジョークライブラリ集