# HG changeset patch # User Richard M. Stallman # Date 1097939545 0 # Node ID 7a899182458cdedf14a8d483f18be04b305ecba3 # Parent 3d3c9896482e20efd1a687c3dcd3370012fbbc83 (compilation-start): Assume compilation-mode will make the buffer read-only. (compilation-mode): Take arg name-of-mode. (compilation-setup): Make buffer read-only. (compilation-handle-exit): Bind inhibit-read-only. diff -r 3d3c9896482e -r 7a899182458c lisp/progmodes/compile.el --- a/lisp/progmodes/compile.el Sat Oct 16 15:07:09 2004 +0000 +++ b/lisp/progmodes/compile.el Sat Oct 16 15:12:25 2004 +0000 @@ -903,18 +903,18 @@ (error nil)) (error "Cannot have two processes in `%s' at once" (buffer-name))))) - ;; Clear out the compilation buffer and make it writable. - ;; Change its default-directory to the directory where the compilation - ;; will happen, and insert a `default-directory' to indicate this. - (setq buffer-read-only nil) (buffer-disable-undo (current-buffer)) - (erase-buffer) - (buffer-enable-undo (current-buffer)) - (cd thisdir) - ;; output a mode setter, for saving and later reloading this buffer - (insert "-*- mode: " name-of-mode - "; default-directory: " (prin1-to-string default-directory) - " -*-\n" command "\n") + ;; Make compilation buffer read-only. The filter can still write it. + ;; Clear out the compilation buffer. + (let ((inhibit-read-only t)) + (erase-buffer) + ;; Change its default-directory to the directory where the compilation + ;; will happen, and insert a `cd' command to indicate this. + (setq default-directory thisdir) + ;; output a mode setter, for saving and later reloading this buffer + (insert "-*- mode: " name-of-mode + "; default-directory: " (prin1-to-string default-directory) + " -*-\n" command "\n")) (set-buffer-modified-p nil)) ;; If we're already in the compilation buffer, go to the end ;; of the buffer, so point will track the compilation output. @@ -925,10 +925,9 @@ (with-current-buffer outbuf (if (not (eq mode t)) (funcall mode) + (setq buffer-read-only nil) (with-no-warnings (comint-mode)) (compilation-shell-minor-mode)) - ;; In what way is it non-ergonomic ? -stef - ;; (toggle-read-only 1) ;;; Non-ergonomic. (if highlight-regexp (set (make-local-variable 'compilation-highlight-regexp) highlight-regexp)) @@ -1108,7 +1107,7 @@ :version "21.4") ;;;###autoload -(defun compilation-mode () +(defun compilation-mode (&optional name-of-mode) "Major mode for compilation log buffers. \\To visit the source for a line-numbered error, move point to the error message line and type \\[compile-goto-error]. @@ -1121,7 +1120,7 @@ (kill-all-local-variables) (use-local-map compilation-mode-map) (setq major-mode 'compilation-mode - mode-name "Compilation") + mode-name (or name-of-mode "Compilation")) (set (make-local-variable 'page-delimiter) compilation-page-delimiter) (compilation-setup) @@ -1187,6 +1186,7 @@ "Prepare the buffer for the compilation parsing commands to work. Optional argument MINOR indicates this is called from `compilation-minor-mode'." + (setq buffer-read-only t) (make-local-variable 'compilation-current-error) (make-local-variable 'compilation-messages-start) (make-local-variable 'compilation-error-screen-columns) @@ -1248,7 +1248,7 @@ (defun compilation-handle-exit (process-status exit-status msg) "Write MSG in the current buffer and hack its mode-line-process." - (let ((buffer-read-only nil) + (let ((inhibit-read-only t) (status (if compilation-exit-message-function (funcall compilation-exit-message-function process-status exit-status msg)