m-buffer 0.11
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"))
with:
(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 (n.d.a) 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 (n.d.b) 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.
———. n.d.b. https://www.russet.org.uk/blog/3062.