m-buffer is a package which provides a high-level convienience API for interacting, searching and changing the contents of an Emacs buffer. It abstracts away from Emacs' use of global state, and provides list-orientated operations removing the need for explicit looping.
Hence, we can replace:
(while (re-search-forward "foo" nil t) (replace-match "bar"))
(m-buffer-replace-match (m-buffer-match (current-buffer) "foo") "bar")
m-buffer also protects global state, so the first form actually needs to be something closer to:
(save-excursion (goto-char (point-min)) (save-match-data (while (re-search-forward "foo" nil t) (replace-match "bar"))))
There have been a few changes since the 0.10 release [@url:www.russet.org.uk/blog/3059] The interface has been improved slightly (in a backward compatible way). In addition some error-checking has been added to pick up what I think was counter-intuitive behaviour. So, previously:
(m-buffer-match-page (current-buffer) :regexp "this")
would return all matches to "this" rather than pages.
The biggest change, however, has been the full use of lenticular source documentation [@url:www.russet.org.uk/blog/3062] which provides a richer explanation of the code base. At the moment, I think that this is very usable, although I am aware that it is less clean than, for example, the documentation for dash, but it still is a nice demonstration of how lenticular text can work.