Emacs の ruby-mode で次のコードを入力すると、「#{foo}」が囲んでいる文字列とは異なる色でフォント化されます。自分の Emacs モードでこれを行うにはどうすればよいですか? ルビーモードのソースコードを解読しようとしましたが、かなりの時間で理解できませんでした。
"a #{foo} a"
最後にそれを理解しました。答えは、フォント化ルールの「オーバーライド」パラメーターを t に設定する必要があるということです。これは、指定されたフェイスが文字列のフェイスをオーバーライドすることを意味します。詳細については、変数「font-lock-keywords」のドキュメントを参照してください。次に例を示します。
(define-derived-mode temp-mode fundamental-mode "Temp"
"Temporary major mode."
(set (make-local-variable 'font-lock-defaults)
'((temp-mode-font-lock-keywords) nil nil nil nil)))
(defconst temp-mode-font-lock-keywords
(list (list "$[A-Za-z0-9]+" 0 font-lock-variable-name-face t)))
ruby-mode.el が設定する場所を検索しますfont-lock-syntactic-keywords
。
(setq ruby-font-lock-syntactic-keywords
'(
;; #{ }, #$hoge, #@foo are not comments
("\\(#\\)[{$@]" 1 (1 . nil))
同様のfont-lock-keywords
変数に関するドキュメントを次に示します。これは、同じタイプのフォント表示を実現するために使用する必要があるものです。