--- /opt/local-csw/encap/emacs-cvs/share/emacs/21.3.50/lisp/progmodes/compile.el Sat Jan 3 17:38:03 2004 +++ /home/tzz/emacs/mine/compile.el Mon Feb 9 13:35:00 2004 @@ -36,7 +36,6 @@ :group 'tools :group 'processes) - ;;;###autoload (defcustom compilation-mode-hook nil "*List of hook functions run by `compilation-mode' (see `run-hooks')." @@ -133,6 +132,15 @@ A buffer becomes most recent when its compilation is started or when it is used with \\[next-error] or \\[compile-goto-error].") +(defvar compilation-next-error-function nil + "The next-error analogue for other modes. +This variable can be bound to a function by a mode. It is +buffer-local by default. Together with +`compilation-last-buffer', this variable lets modes hook into +\\[next-error].") + +(make-variable-buffer-local 'compilation-next-error-function) + (defvar compilation-in-progress nil "List of compilation processes now running.") (or (assq 'compilation-in-progress minor-mode-alist) @@ -1057,10 +1065,12 @@ errors)) (defsubst compilation-buffer-p (buffer) - (save-excursion - (set-buffer buffer) - (or compilation-shell-minor-mode compilation-minor-mode - (eq major-mode 'compilation-mode)))) + "Test if BUFFER is a compilation buffer." + (with-current-buffer buffer + (or compilation-shell-minor-mode + compilation-minor-mode + (eq major-mode 'compilation-mode) + compilation-next-error-function))) (defun compilation-next-error (n) "Move point to the next error in the compilation buffer. @@ -1406,12 +1416,14 @@ Just \\[universal-argument] as a prefix means reparse the error message buffer and start at the first error. -\\[next-error] normally uses the most recently started compilation or -grep buffer. However, it can operate on any buffer with output from -the \\[compile] and \\[grep] commands, or, more generally, on any -buffer in Compilation mode or with Compilation Minor mode enabled. To -specify use of a particular buffer for error messages, type -\\[next-error] in that buffer. +\\[next-error] normally uses the most recently started +compilation or grep buffer. However, it can operate on any +buffer with output from the \\[compile], \\[grep] commands, or, +more generally, on any buffer in Compilation mode or with +Compilation Minor mode enabled, or any buffer in which +`compilation-next-error-function' is bound to an appropriate +function. To specify use of a particular buffer for error +messages, type \\[next-error] in that buffer. Once \\[next-error] has chosen the buffer for error messages, it stays with that buffer until you use it in some other buffer which @@ -1421,13 +1433,23 @@ \`compilation-error-regexp-alist' for customization ideas." (interactive "P") (setq compilation-last-buffer (compilation-find-buffer)) - (compilation-goto-locus (compilation-next-error-locus - ;; We want to pass a number here only if - ;; we got a numeric prefix arg, not just C-u. - (and (not (consp argp)) - (prefix-numeric-value argp)) - (consp argp)))) + (if (buffer-local-value + 'compilation-next-error-function + compilation-last-buffer) + ;; do the right thing for modes that bind compilation-next-error-function + (progn + (set-buffer compilation-last-buffer) + (funcall compilation-next-error-function argp)) + (compilation-goto-locus (compilation-next-error-locus + ;; We want to pass a number here only if + ;; we got a numeric prefix arg, not just C-u. + (and (not (consp argp)) + (prefix-numeric-value argp)) + (consp argp))))) ;;;###autoload (define-key ctl-x-map "`" 'next-error) + +(defalias 'goto-next-locus 'next-error) +(defalias 'next-match 'next-error) (defun previous-error (argp) "Visit previous compilation error message and corresponding source code. --- /opt/local-csw/encap/emacs-cvs/share/emacs/21.3.50/lisp/replace.el Mon Feb 2 09:23:00 2004 +++ /home/tzz/emacs/mine/replace.el Mon Feb 9 13:36:30 2004 @@ -614,6 +614,19 @@ "Move to the Nth (default 1) previous match in an Occur mode buffer." (interactive "p") (occur-find-match n #'previous-single-property-change "No earlier matches")) + +(defun occur-next-error (&optional argp) + "Move to the Nth (default 1) next match in an Occur mode buffer. +Compatibility function for \\[next-error] invocations." + (interactive "p") + (occur-find-match + (prefix-numeric-value argp) + (if (> 0 (prefix-numeric-value argp)) + #'previous-single-property-change + #'next-single-property-change) + "No more matches") + (occur-mode-goto-occurrence)) + (defcustom list-matching-lines-default-context-lines 0 "*Default number of context lines included around `list-matching-lines' matches. @@ -800,7 +813,10 @@ (setq occur-revert-arguments (list regexp nlines bufs) buffer-read-only t) (if (> count 0) - (display-buffer occur-buf) + (progn + (display-buffer occur-buf) + (setq compilation-last-buffer occur-buf) + (setq compilation-next-error-function 'occur-next-error)) (kill-buffer occur-buf))) (run-hooks 'occur-hook))))