When diff-refine overlays take precedence over hi-lock text properties, then hi-lock can't be used to review diffs. Hi-lock provides two modes: font-lock highlighting and highlighting with overlays. Using overlays solves the problem. But how to decide when overlays should be used? Detecting whether the buffer is read-only, so no more text is expected to be added to the buffer? Then add overlays instead of using font-lock? But this heuristics doesn't work in read-only *vc-change-log* buffers where expanding commits inserts new text that should be highlighted with font-lock. Thus the following patch adds a new variable hi-lock-use-overlays that can be used like: #+begin_src emacs-lisp (add-hook 'diff-mode-hook (lambda () (setq-local hi-lock-use-overlays t))) #+end_src