Running multi-occur in many buffers
Multi-occur on projects
Update: Damien Cassou tricked me into extracting it in a package. You can get it here: github.com/NicolasPetton/noccur.el.
Occur-mode is one of the awesome modes that come builtin with Emacs.
Sometimes I just want to run multi-occur
on all (or a subdirectory)
of a project I'm working on. Used with keyboard macros it makes it a
snap to perform modifications on many buffers at once.
I wrote a tiny package containing the following functions that does just that:
(require 'projectile) (defun noccur-dired (regexp &optional nlines) "Perform `multi-occur' with REGEXP in all dired marked files. When called with a prefix argument NLINES, display NLINES lines before and after." (interactive (occur-read-primary-args)) (multi-occur (mapcar #'find-file (dired-get-marked-files)) regexp nlines)) (defun noccur-project (regexp &optional nlines) "Perform `multi-occur' in the current project files." (interactive (occur-read-primary-args)) (let* ((directory (read-directory-name "Search in directory: ")) (files (if (and directory (not (string= directory (projectile-project-root)))) (projectile-files-in-project-directory directory) (projectile-current-project-files))) (buffers (mapcar #'find-file (mapcar #'(lambda (file) (expand-file-name file (projectile-project-root))) files)))) (multi-occur buffers regexp nlines))) (provide 'noccur)
It requires projectile for the `noccur-project` function, but `noccur-dired` is very similar and doesn't require it.
The way I use it is the following:
M-x noccur-project RET foo RET
then I can edit the occur buffer's
content with occur-edit-mode
(bound to e
). To save changes in all
modified buffer and go back to occur-mode
press C-c C-c
.