diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2008-06-13 16:22:16 +0000 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2008-06-13 16:22:16 +0000 |
commit | ec4e0abcd2ec5e1523fca615487878e89a9e366e (patch) | |
tree | d5729bfec5554779621bd93b8c1ae00d0da016d7 /lisp/progmodes | |
parent | 747d0c440f834ebbbf12c1004f2510a8f76372f0 (diff) | |
download | emacs-ec4e0abcd2ec5e1523fca615487878e89a9e366e.tar.gz |
* progmodes/compile.el (compilation-start): Don't disable undo in
comint buffer. Don't override the comint-filter with our own.
(compilation-filter): Change point's insertion-type.
* comint.el (comint-output-filter): Use copy-marker.
Diffstat (limited to 'lisp/progmodes')
-rw-r--r-- | lisp/progmodes/compile.el | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index 07e5600d373..65e8f952b64 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -1159,7 +1159,6 @@ Returns the compilation buffer created." (error nil)) (error "Cannot have two processes in `%s' at once" (buffer-name))))) - (buffer-disable-undo (current-buffer)) ;; first transfer directory from where M-x compile was called (setq default-directory thisdir) ;; Make compilation buffer read-only. The filter can still write it. @@ -1177,7 +1176,9 @@ Returns the compilation buffer created." (erase-buffer) ;; Select the desired mode. (if (not (eq mode t)) - (funcall mode) + (progn + (buffer-disable-undo) + (funcall mode)) (setq buffer-read-only nil) (with-no-warnings (comint-mode)) (compilation-shell-minor-mode)) @@ -1262,7 +1263,10 @@ Returns the compilation buffer created." (setq mode-line-process (list (propertize ":%s" 'face 'compilation-warning))) (set-process-sentinel proc 'compilation-sentinel) - (set-process-filter proc 'compilation-filter) + (unless (eq mode t) + ;; Keep the comint filter, since it's needed for proper handling + ;; of the prompts. + (set-process-filter proc 'compilation-filter)) ;; Use (point-max) here so that output comes in ;; after the initial text, ;; regardless of where the user sees point. @@ -1666,17 +1670,21 @@ Turning the mode on runs the normal hook `compilation-minor-mode-hook'." (defun compilation-filter (proc string) "Process filter for compilation buffers. Just inserts the text, and runs `compilation-filter-hook'." - (if (buffer-live-p (process-buffer proc)) - (with-current-buffer (process-buffer proc) - (let ((inhibit-read-only t)) - (save-excursion - (goto-char (process-mark proc)) - ;; We used to use `insert-before-markers', so that windows with - ;; point at `process-mark' scroll along with the output, but we - ;; now use window-point-insertion-type instead. - (insert string) - (set-marker (process-mark proc) (point)) - (run-hooks 'compilation-filter-hook)))))) + (when (buffer-live-p (process-buffer proc)) + (with-current-buffer (process-buffer proc) + (let ((inhibit-read-only t) + ;; `save-excursion' doesn't use the right insertion-type for us. + (pos (copy-marker (point) t))) + (unwind-protect + (progn + (goto-char (process-mark proc)) + ;; We used to use `insert-before-markers', so that windows with + ;; point at `process-mark' scroll along with the output, but we + ;; now use window-point-insertion-type instead. + (insert string) + (set-marker (process-mark proc) (point)) + (run-hooks 'compilation-filter-hook)) + (goto-char pos)))))) ;;; test if a buffer is a compilation buffer, assuming we're in the buffer (defsubst compilation-buffer-internal-p () |