Na verdade, #
também pode começar um comentário quando precedido por $
. Se #
inicia um comentário ou não, depende se ele está dentro do texto citado ou não.
Você pode tentar o código abaixo para fazer o Emacs (tentar) seguir a semântica da m4 com mais precisão:
(defun m4--quoted-p (pos)
"Return non-nil if POS is inside a quoted string."
(let ((quoted nil))
(dolist (o (nth 9 (save-excursion (syntax-ppss pos))))
(if (eq (char-after o) ?\') (setq quoted t)))
quoted))
(defconst m4-syntax-propertize
(syntax-propertize-rules
("#" (0 (when (m4--quoted-p (match-beginning 0))
(string-to-syntax "."))))))
(add-hook 'm4-mode-hook
(lambda () (set (make-local-variable 'syntax-propertize-function)
m4-syntax-propertize)))
Note que syntax-propertize-function
só existe em versões suficientemente recentes do Emacs (> = 24.1, IIRC).