2010/06/03

Emacs上での正規表現による検索で結果をハイライトしっぱなしにする

たまーに、「emacs」「検索」「ハイライト」で過去のエントリを見てもらっているようなのですが、あれはバグっているのです。バグっているというか、フォントロックの仕組みをちゃんと理解していなかったので、実行するとメジャーモードの色づけを葬ってしまう。

いまは改良してこうなっています。(Emacs 22.2.1)
(defun keep-highlight-regexp (re)
(interactive "sRegexp: \n")
(make-face 'my-highlight-face)
(set-face-foreground 'my-highlight-face "black")
(set-face-background 'my-highlight-face "yellow")
(defvar my-highlight-face 'my-highlight-face)
(setq font-lock-set-defaults nil)
(font-lock-set-defaults)
(font-lock-add-keywords 'nil (list (list re 0 my-highlight-face t)))
(font-lock-fontify-buffer))

(defun cancel-highlight-regexp ()
(interactive)
(setq font-lock-set-defaults nil)
(font-lock-set-defaults)
(font-lock-fontify-buffer))

(global-set-key "\C-f" 'keep-highlight-regexp)
(global-set-key "\C-d" 'cancel-highlight-regexp)
[Ctrl]-[f]で検索開始、[Ctrl]-[d]でハイライト解除。それぞれ、自分では通常のキーバインドとして使ってないので、グローバルに設定しています。

No comments :