再びxyzzyにはまる

; ======================================================
; モード別正規表現キーワード
; ======================================================
(defun get-mode-var-symbol (mode name)
  (intern (concat "*" (symbol-name mode) "-" name "*")))

(defun add-each-mode-regex-keywords (mode keywords)
  (let ((ls (get-mode-var-symbol mode "regex-keywords")))
    (if (not (boundp ls)) (progn
      ; ここから先は初めて実行したときのみ
      (set ls '())
      (add-hook (get-mode-var-symbol mode "hook") (lambda () (add-regex-keywords (symbol-value ls))))))
    (set ls (append (symbol-value ls) (compile-regexp-keyword-list keywords)))))

(defun add-regex-keywords (keywords)
  (unless (local-variable-p 'regexp-keyword-list) (make-local-variable 'regexp-keyword-list))
  (setf regexp-keyword-list (append regexp-keyword-list keywords)))

xyzzyでメジャーモード別に正規表現のキーワードを色づけするLispスクリプト
こんな感じに使います

; ======================================================
; lispの色づけ
; ======================================================
(add-each-mode-regex-keywords 'lisp-mode '(
  ("(\\([^ :0-9()\"]+\\)" t (:color 1) nil 1)))

問題点を挙げておくと