emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/progmodes/compile.el,v


From: Stefan Monnier
Subject: [Emacs-diffs] Changes to emacs/lisp/progmodes/compile.el,v
Date: Fri, 13 Jun 2008 16:22:17 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Stefan Monnier <monnier>        08/06/13 16:22:16

Index: progmodes/compile.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/progmodes/compile.el,v
retrieving revision 1.475
retrieving revision 1.476
diff -u -b -r1.475 -r1.476
--- progmodes/compile.el        11 Jun 2008 02:47:57 -0000      1.475
+++ progmodes/compile.el        13 Jun 2008 16:22:16 -0000      1.476
@@ -1159,7 +1159,6 @@
                  (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 @@
        (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 @@
          (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 @@
 (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))
+  (when (buffer-live-p (process-buffer proc))
       (with-current-buffer (process-buffer proc)
-       (let ((inhibit-read-only t))
-         (save-excursion
+      (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))))))
+              (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 ()




reply via email to

[Prev in Thread] Current Thread [Next in Thread]