chiark / gitweb /
el/dot-emacs.el: Advice to fix `markdown-mode' to preserve match data.
authorMark Wooding <mdw@distorted.org.uk>
Mon, 28 Dec 2015 15:28:44 +0000 (15:28 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Mon, 28 Dec 2015 15:28:44 +0000 (15:28 +0000)
`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.

el/dot-emacs.el

index 2fb1520d6fd390ce7299018b939ae9f3155a6674..d657295da6c66160aceb1beb84af4068ab5f1d51 100644 (file)
@@ -226,6 +226,13 @@ (defmacro mdw-advise-to-inhibit-raise-frame (function)
 
 (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