comparison lisp/progmodes/compile.el @ 920:7b984ce24013

*** empty log message ***
author Roland McGrath <roland@gnu.org>
date Tue, 04 Aug 1992 02:02:27 +0000
parents 48ca3bf4b5f8
children 7aa20c8e89b7
comparison
equal deleted inserted replaced
919:567b06901789 920:7b984ce24013
308 (define-key map "\C-c\C-k" 'kill-compilation) 308 (define-key map "\C-c\C-k" 'kill-compilation)
309 (define-key map " " 'scroll-up) 309 (define-key map " " 'scroll-up)
310 (define-key map "\^?" 'scroll-down) 310 (define-key map "\^?" 'scroll-down)
311 (define-key map "\M-n" 'compilation-next-error) 311 (define-key map "\M-n" 'compilation-next-error)
312 (define-key map "\M-p" 'compilation-previous-error) 312 (define-key map "\M-p" 'compilation-previous-error)
313 (define-key map "\C-x[" 'compilation-previous-file)
314 (define-key map "\C-x]" 'compilation-next-file)
313 map) 315 map)
314 "Keymap for compilation log buffers.") 316 "Keymap for compilation log buffers.")
315 317
316 (defun compilation-mode () 318 (defun compilation-mode ()
317 "Major mode for compilation log buffers. 319 "Major mode for compilation log buffers.
380 )) 382 ))
381 (setq compilation-in-progress (delq proc compilation-in-progress)) 383 (setq compilation-in-progress (delq proc compilation-in-progress))
382 )))) 384 ))))
383 385
384 386
387 ;; Return the cdr of compilation-old-error-list for the error containing point.
388 (defun compile-error-at-point ()
389 (compile-reinitialize-errors nil (point))
390 (let ((errors compilation-old-error-list))
391 (while (and errors
392 (> (point) (car (car errors))))
393 (setq errors (cdr errors)))
394 errors))
395
385 (defun compilation-next-error (n) 396 (defun compilation-next-error (n)
386 "Move point to the next error in the compilation buffer. 397 "Move point to the next error in the compilation buffer.
387 Does NOT find the source line like \\[next-error]." 398 Does NOT find the source line like \\[next-error]."
388 (interactive "p") 399 (interactive "p")
389 (or (compilation-buffer-p (current-buffer)) 400 (or (compilation-buffer-p (current-buffer))
390 (error "Not in a compilation buffer.")) 401 (error "Not in a compilation buffer."))
391 (setq compilation-last-buffer (current-buffer)) 402 (setq compilation-last-buffer (current-buffer))
392 (let ((p (point)) 403
393 (errors nil) 404 (let ((errors (compile-error-at-point)))
394 (first t)) 405
395 406 ;; Move to the error after the one containing point.
396 (save-excursion ;save point in case of later error 407 (goto-char (car (if (< n 0)
397 (while (and (if (< n 0) 408 (let ((i 0)
398 (null errors) 409 (e compilation-old-error-list))
399 (< (length errors) n)) 410 ;; See how many cdrs away ERRORS is from the start.
400 (or first (< compilation-parsing-end (point-max)))) 411 (while (not (eq e errors))
401 (setq first nil) 412 (setq i (1+ i)
402 413 e (cdr e)))
403 (if (< compilation-parsing-end (point-max)) 414 (if (> (- n) i)
404 (progn 415 (error "Moved back past first error")
405 ;; Move forward a bit and parse. 416 (nth (+ i n) compilation-old-error-list)))
406 ;; Hopefully we will parse enough to find the one we want. 417 (let ((compilation-error-list (cdr errors)))
407 (forward-line n) 418 (compile-reinitialize-errors nil nil n)
408 (compile-reinitialize-errors nil (point)))) 419 (if compilation-error-list
409 (setq errors compilation-old-error-list) 420 (nth (1- n) compilation-error-list)
410 421 (error "Moved past last error"))))))))
411 ;; Look for the error containing P (the original point).
412 (if (< n 0)
413 (while (and errors
414 (> p (car (car errors))))
415 (setq errors (cdr errors)))
416 (while (and errors
417 (>= p (car (car errors))))
418 (setq errors (cdr errors))))
419 (ignore))
420
421 ;; Move to the error after the one containing point.
422 (setq p (car (if (< n 0)
423 (let ((i 0)
424 (e compilation-old-error-list))
425 ;; See how many cdrs away ERRORS is from the start.
426 (while (not (eq e errors))
427 (setq i (1+ i)
428 e (cdr e)))
429 (if (> (- n) i)
430 (error "Moved back past first error")
431 (nth (+ i n) compilation-old-error-list)))
432 (if errors
433 (nth (1- n) errors)
434 (error "Moved past last error"))))))
435
436 (goto-char p)))
437 422
438 (defun compilation-previous-error (n) 423 (defun compilation-previous-error (n)
439 "Move point to the previous error in the compilation buffer. 424 "Move point to the previous error in the compilation buffer.
440 Does NOT find the source line like \\[next-error]." 425 Does NOT find the source line like \\[next-error]."
441 (interactive "p") 426 (interactive "p")
442 (compilation-next-error (- n))) 427 (compilation-next-error (- n)))
428
429
430 (defun compile-file-of-error (data)
431 (setq data (cdr data))
432 (if (markerp data)
433 (buffer-file-name (marker-buffer data))
434 (setq data (car data))
435 (expand-file-name (cdr data) (car data))))
436
437 (defun compilation-next-file (n)
438 "Move point to the next error for a different file than the current one."
439 (interactive "p")
440 (or (compilation-buffer-p (current-buffer))
441 (error "Not in a compilation buffer."))
442 (setq compilation-last-buffer (current-buffer))
443
444 (let ((reversed (< n 0))
445 errors file)
446
447 (if (not reversed)
448 (setq errors (or (compile-error-at-point)
449 (error "Moved past last error")))
450
451 ;; Get a reversed list of the errors up through the one containing point.
452 (compile-reinitialize-errors nil (point))
453 (setq errors (reverse compilation-old-error-list)
454 n (- n))
455
456 ;; Ignore errors after point. (car ERRORS) will be the error
457 ;; containing point, (cadr ERRORS) the one before it.
458 (while (and errors
459 (< (point) (car (car errors))))
460 (setq errors (cdr errors))))
461
462 (while (> n 0)
463 (setq file (compile-file-of-error (car errors)))
464
465 ;; Skip past the other errors for this file.
466 (while (string= file
467 (compile-file-of-error
468 (car (or errors
469 (if reversed
470 (error "This is the first erring file")
471 (let ((compilation-error-list nil))
472 ;; Parse some more.
473 (compile-reinitialize-errors nil nil 2)
474 (setq errors compilation-error-list)))
475 (error "This is the last erring file")))))
476 (setq errors (cdr errors)))
477
478 (setq n (1- n)))
479
480 ;; Move to the following error.
481 (goto-char (car (car (or errors
482 (if reversed
483 (error "This is the first erring file")
484 (let ((compilation-error-list nil))
485 ;; Parse the last one.
486 (compile-reinitialize-errors nil nil 1)
487 compilation-error-list))))))))
488
489 (defun compilation-previous-file (n)
490 "Move point to the previous error for a different file than the current one."
491 (interactive "p")
492 (compilation-next-file (- n)))
443 493
444 494
445 (defun kill-compilation () 495 (defun kill-compilation ()
446 "Kill the process made by the \\[compile] command." 496 "Kill the process made by the \\[compile] command."
447 (interactive) 497 (interactive)
461 (if (or (eq compilation-error-list t) 511 (if (or (eq compilation-error-list t)
462 (consp argp)) 512 (consp argp))
463 (progn (compilation-forget-errors) 513 (progn (compilation-forget-errors)
464 (setq compilation-parsing-end 1))) 514 (setq compilation-parsing-end 1)))
465 (if (and compilation-error-list 515 (if (and compilation-error-list
466 (not limit-search) 516 (or (not limit-search)
517 (> compilation-parsing-end limit-search))
467 (or (not find-at-least) 518 (or (not find-at-least)
468 (> (length compilation-error-list) find-at-least))) 519 (> (length compilation-error-list) find-at-least)))
469 ;; Since compilation-error-list is non-nil, it points to a specific 520 ;; Since compilation-error-list is non-nil, it points to a specific
470 ;; error the user wanted. So don't move it around. 521 ;; error the user wanted. So don't move it around.
471 nil 522 nil
472 (switch-to-buffer compilation-last-buffer) 523 (switch-to-buffer compilation-last-buffer)
473 (set-buffer-modified-p nil) 524 (set-buffer-modified-p nil)
474 (let ((at-start (= compilation-parsing-end 1))) 525 (if (< compilation-parsing-end (point-max))
475 (funcall compilation-parse-errors-function limit-search find-at-least) 526 (let ((at-start (= compilation-parsing-end 1)))
476 ;; Remember the entire list for compilation-forget-errors. 527 (funcall compilation-parse-errors-function
477 ;; If this is an incremental parse, append to previous list. 528 limit-search find-at-least)
478 (if at-start 529 ;; Remember the entire list for compilation-forget-errors.
479 (setq compilation-old-error-list compilation-error-list) 530 ;; If this is an incremental parse, append to previous list.
480 (setq compilation-old-error-list 531 (if at-start
481 (nconc compilation-old-error-list compilation-error-list))))))) 532 (setq compilation-old-error-list compilation-error-list)
533 (setq compilation-old-error-list
534 (nconc compilation-old-error-list compilation-error-list)))
535 )))))
482 536
483 (defun compile-goto-error (&optional argp) 537 (defun compile-goto-error (&optional argp)
484 "Visit the source for the error message point is on. 538 "Visit the source for the error message point is on.
485 Use this command in a compilation log buffer. 539 Use this command in a compilation log buffer.
486 \\[universal-argument] as a prefix arg means to reparse the buffer's error messages first; 540 \\[universal-argument] as a prefix arg means to reparse the buffer's error messages first;
563 617
564 See variables `compilation-parse-errors-function' and 618 See variables `compilation-parse-errors-function' and
565 \`compilation-error-regexp-alist' for customization ideas." 619 \`compilation-error-regexp-alist' for customization ideas."
566 (interactive "P") 620 (interactive "P")
567 (setq compilation-last-buffer (compilation-find-buffer)) 621 (setq compilation-last-buffer (compilation-find-buffer))
568 (compile-reinitialize-errors argp nil (prefix-numeric-value argp)) 622 (compile-reinitialize-errors argp nil (1- (prefix-numeric-value argp)))
569 ;; Make ARGP nil if the prefix arg was just C-u, 623 ;; Make ARGP nil if the prefix arg was just C-u,
570 ;; since that means to reparse the errors, which the 624 ;; since that means to reparse the errors, which the
571 ;; compile-reinitialize-errors call just did. 625 ;; compile-reinitialize-errors call just did.
572 ;; Now we are only interested in a numeric prefix arg. 626 ;; Now we are only interested in a numeric prefix arg.
573 (if (consp argp) 627 (if (consp argp)