# HG changeset patch # User Juri Linkov # Date 1269967125 -10800 # Node ID a788d758fe0a21c0d53591221f1c7765cc8c58fa # Parent 0958f6c3f7c62efa832a6ba8830dc0a7f5df3bbc * replace.el (occur-accumulate-lines): Move occur-engine related functions `occur-accumulate-lines' and `occur-engine-add-prefix' to be located after `occur-engine'. diff -r 0958f6c3f7c6 -r a788d758fe0a lisp/ChangeLog --- a/lisp/ChangeLog Tue Mar 30 19:29:02 2010 +0300 +++ b/lisp/ChangeLog Tue Mar 30 19:38:45 2010 +0300 @@ -4,6 +4,12 @@ 2010-03-30 Juri Linkov + * replace.el (occur-accumulate-lines): Move occur-engine related + functions `occur-accumulate-lines' and `occur-engine-add-prefix' + to be located after `occur-engine'. + +2010-03-30 Juri Linkov + Make occur handle multi-line matches cleanly with context. http://lists.gnu.org/archive/html/emacs-devel/2010-03/msg01280.html diff -r 0958f6c3f7c6 -r a788d758fe0a lisp/replace.el --- a/lisp/replace.el Tue Mar 30 19:29:02 2010 +0300 +++ b/lisp/replace.el Tue Mar 30 19:38:45 2010 +0300 @@ -1005,23 +1005,6 @@ :group 'matching :version "22.1") -(defun occur-accumulate-lines (count &optional keep-props pt) - (save-excursion - (when pt - (goto-char pt)) - (let ((forwardp (> count 0)) - result beg end moved) - (while (not (or (zerop count) - (if forwardp - (eobp) - (and (bobp) (not moved))))) - (setq count (+ count (if forwardp -1 1))) - (setq beg (line-beginning-position) - end (line-end-position)) - (push (occur-engine-line beg end keep-props) result) - (setq moved (= 0 (forward-line (if forwardp 1 -1))))) - (nreverse result)))) - (defun occur-read-primary-args () (list (read-regexp "List lines matching regexp" (car regexp-history)) @@ -1175,12 +1158,6 @@ (set-buffer-modified-p nil) (run-hooks 'occur-hook))))))) -(defun occur-engine-add-prefix (lines) - (mapcar - #'(lambda (line) - (concat " :" line "\n")) - lines)) - (defun occur-engine (regexp buffers out-buf nlines case-fold-search title-face prefix-face match-face keep-props) (with-current-buffer out-buf @@ -1356,6 +1333,29 @@ str) (buffer-substring-no-properties beg end))) +(defun occur-engine-add-prefix (lines) + (mapcar + #'(lambda (line) + (concat " :" line "\n")) + lines)) + +(defun occur-accumulate-lines (count &optional keep-props pt) + (save-excursion + (when pt + (goto-char pt)) + (let ((forwardp (> count 0)) + result beg end moved) + (while (not (or (zerop count) + (if forwardp + (eobp) + (and (bobp) (not moved))))) + (setq count (+ count (if forwardp -1 1))) + (setq beg (line-beginning-position) + end (line-end-position)) + (push (occur-engine-line beg end keep-props) result) + (setq moved (= 0 (forward-line (if forwardp 1 -1))))) + (nreverse result)))) + ;; Generate context display for occur. ;; OUT-LINE is the line where the match is. ;; NLINES and KEEP-PROPS are args to occur-engine.