I need to perform this kind of (query-)substitutions in
"fig" --> "figure"
But I don't want to match text inside commands e.g.
I figured out to use face properties to select the strings to be replaced and I wrote this piece of code
(goto-char (point-min) (while (search-forward-regexp "\\<\\([Ff]ig\\)\\(s?\\)\\>\\.?" nil t) (save-excursion (let ((b (make-marker)) (e (make-marker))) (set-marker b (match-beginning 0)) (set-marker e (point)) (goto-char b) (font-lock-fontify-buffer) (let* ((face 'query-replace) (bg (face-background face))) (set-face-background face "OliveDrab3") (unwind-protect (unless (or (string= (face-at-point) "font-lock-constant-face") (string= (face-at-point) "font-lock-builtin-face")) (perform-replace "\\<\\([Ff]ig\\)\\(s?\\)\\>\\.?" "\\1ure\\2" t t nil 1 nil b e)) (set-face-background face bg))) )))
It works quite well but fails if I run it at the file opening. It seems that
emacs needs to scan the buffer in some way I don't understand.
I tried to put
(font-lock-fontify-buffer) at the beginning of the script but it doesn't work.
1 - How can I force
emacs to fontify the whole buffer before running my code?
2 - Any (tested) idea to achieve the same result with some other technique?