Пользовательские php-теги emacs выделяют синтаксис

Я хочу установить собственный цвет фона в тегах, но другие не трогать

(define-derived-mode php-mode fundamental-mode
  "php-mode"
  :syntax-table php-syntax-table
  (setq font-lock-defaults '(php-keywords)))

(defvar php-syntax-table (make-syntax-table) "Syntax table for php-mode")
(make-face 'php-region-face)
(set-face-background 'php-region-face "red")
(setq php-keywords '(("<\\?php[[:ascii:]]*?\\?>" 0 'php-region-face t)))

Но выделять фоновые теги не правильно, см. Ниже:

1 ответ

Вы захотите настроить многострочную блокировку шрифта и определить границы поиска по блокировке шрифта (чтобы это не занимало слишком много времени). Моя информация (и этот код) взята из этого вопроса.

Здесь я определяю многострочную блокировку шрифта для тегов (<...>). Если это добавлено к вашему определенному производному режиму, он работает так, как вы описываете.

(set (make-local-variable 'font-lock-multiline) t)
(add-hook 'font-lock-extend-region-functions
          'test-font-lock-extend-region)

(defun test-font-lock-extend-region ()
  "Extend the search region to include an entire SGML tag."
  ;; Avoid compiler warnings about these global variables from font-lock.el.
  ;; See the documentation for variable `font-lock-extend-region-functions'.
  (eval-when-compile (defvar font-lock-beg) (defvar font-lock-end))
  (save-excursion
    (goto-char font-lock-beg)
    (let ((found (or (re-search-backward "<" nil t) (point-min))))
(goto-char font-lock-end)
(when (re-search-forward ">" nil t)
  (beginning-of-line)
  (setq font-lock-end (point)))
(setq font-lock-beg found))))

РЕДАКТИРОВАТЬ: по какой-то причине, ТАК не нравится мое форматирование кода.

Другие вопросы по тегам