1

php/htmlファイルのマイナーモードを書いています。ブロックをフォント化するために関数(cf. font-lock-keywords)を使用します。<?php ?>

複数行のブロックをフォント化するにはfont-lock-multiline、tに設定する必要があります。

すべてが非常にうまく実行されています。この場合、それらは単なる問題です。複数行のブロックがあり、終了タグ(?>)を削除すると、ブロックはフォント化されません。タグを元に戻すと、ブロックが再度フォント化されません。

私は3つの質問があります:

1/この問題の簡単な解決策はありますか

font-lock-fontify-buffer2でない場合/これらの2つの文字を入力するたびにトリガーする方法はありますか:'?''>'

3 /より良い、この種の関数をトリガーする方法はありますか:入力する?>と、開始タグが見つかり、このブロックに<?phpaを強制します。font-lock-fontify-region

4

1 に答える 1

1

これは基本的なアプローチであり、ロジックは不十分ですが、1 つのオプションを示しています。

(defvar foo-minor-mode-map (make-keymap) "foo-minor-mode keymap.")
(define-key foo-minor-mode-map (kbd ">") 'foo-electric-gt)

(defun foo-electric-gt (&optional arg)
  (interactive "*p")
  (when (looking-back "\\?$")
    (save-excursion
      (let ((end (- (point) 1))
            (beg (+ (search-backward "<?php") 5)))
        (font-lock-fontify-region beg end))))
  (insert-char ?> arg))

(define-minor-mode foo-minor-mode
  "foo mode.

\\{foo-minor-mode-map}"
  :keymap 'foo-minor-mode-map)
于 2011-08-17T12:50:23.373 に答える