`markdown-mode' adds a hook to `after-change-functions', which checks
for completed wiki links and tries to highlight them. This clobbers the
match data, and, although it tries to save the position of the point, it
seems that `replace-match' arranges to leave point at the end of the
match by looking at the match data after the hook functions have run.
The result is that point ends up in the wrong place after `replace-
match'. During `query-replace' and friends, the effect is that only the
first change in any given line is actually replaced, regardless of how
many matches there might be.
Giving the broken function a few choice words of advice fixes
everything.
(mdw-advise-to-inhibit-raise-frame select-frame-set-input-focus)
(mdw-advise-to-inhibit-raise-frame select-frame-set-input-focus)
+;; Bug fix for markdown-mode, which breaks point positioning during
+;; `query-replace'.
+(defadvice markdown-check-change-for-wiki-link
+ (around mdw-save-match activate compile)
+ "Save match data around the `markdown-mode' `after-change-functions' hook."
+ (save-match-data ad-do-it))
+
;; Transient mark mode hacks.
(defadvice exchange-point-and-mark
;; Transient mark mode hacks.
(defadvice exchange-point-and-mark