overlayのサンプル

Emacsで文字列を装飾したり、属性を持たせる場合は propertize関数が
使えますが、バッファにある既存の文字列を加工する場合には
overlayという機構が使えるようです。


勉強がてらサンプルを書いてみました。

コード

(defvar akkari-n-list nil)

(defun akkari-n ()
  (interactive)
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward "\\(赤座あかり\\)" nil t nil)
      (let ((lay (make-overlay (match-beginning 1) (match-end 1)))
            (color (background-color-at-point)))
        (push lay akkari-n-list)
        (overlay-put lay 'face `((:foreground ,color)))))))

(defun un-akkari-n ()
  (interactive)
  (dolist (lay akkari-n-list)
    (delete-overlay lay))
  (setq akkari-n-list nil))

実行

実行すると


消えました。


以上です。