From: Stefan Monnier Date: Fri, 13 Jun 2008 16:22:16 +0000 (+0000) Subject: * progmodes/compile.el (compilation-start): Don't disable undo in X-Git-Tag: emacs-pretest-23.0.90~4811 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ec4e0abcd2ec5e1523fca615487878e89a9e366e;p=emacs.git * 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. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7e310e10c33..932dc0b10e9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2008-06-13 Stefan Monnier + + * 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. + 2008-06-13 David Reitter * textmodes/flyspell.el (mail-mode-flyspell-verify): diff --git a/lisp/comint.el b/lisp/comint.el index 4abb17ed17a..00528f38ab0 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -1740,12 +1740,8 @@ Make backspaces delete the previous character." ;; Insert STRING (let ((inhibit-read-only t) - ;; Avoid the overhead of save-excursion, since we just - ;; fiddle with the point - (saved-point (point-marker))) - - ;; The point should float after any insertion we do - (set-marker-insertion-type saved-point t) + ;; The point should float after any insertion we do. + (saved-point (copy-marker (point) t))) ;; We temporarly remove any buffer narrowing, in case the ;; process mark is outside of the restriction 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 ()