diff src/process.c @ 104316:bb8ce3c842e7

* process.c (status_notify): Don't perform redisplay. (Fdelete_process, list_processes_1, process_send_signal): Expliticly perform redisplay. (wait_reading_process_output): Always check process status, but don't perform redisplay unless DO_DISPLAY is non-zero (Bug#2930).
author Chong Yidong <cyd@stupidchicken.com>
date Mon, 17 Aug 2009 21:04:05 +0000
parents a812c049e63c
children fec993ec6e85
line wrap: on
line diff
--- a/src/process.c	Mon Aug 17 19:12:10 2009 +0000
+++ b/src/process.c	Mon Aug 17 21:04:05 2009 +0000
@@ -786,6 +786,7 @@
       p->status = Fcons (Qexit, Fcons (make_number (0), Qnil));
       p->tick = ++process_tick;
       status_notify (p);
+      redisplay_preserve_echo_area (13);
     }
   else if (p->infd >= 0)
     {
@@ -817,6 +818,7 @@
 	    = Fcons (Qsignal, Fcons (make_number (SIGKILL), Qnil));
 	  p->tick = ++process_tick;
 	  status_notify (p);
+	  redisplay_preserve_echo_area (13);
 	}
     }
   remove_process (process);
@@ -1543,7 +1545,10 @@
        }
     }
   if (exited)
-    status_notify (NULL);
+    {
+      status_notify (NULL);
+      redisplay_preserve_echo_area (13);
+    }
   return Qnil;
 }
 
@@ -4756,11 +4761,8 @@
       /* If status of something has changed, and no input is
 	 available, notify the user of the change right away.  After
 	 this explicit check, we'll let the SIGCHLD handler zap
-	 timeout to get our attention.  When Emacs is run
-	 interactively, only do this with a nonzero DO_DISPLAY
-	 argument, because status_notify triggers redisplay.  */
-      if (update_tick != process_tick
-	  && (do_display || noninteractive))
+	 timeout to get our attention.  */
+      if (update_tick != process_tick)
 	{
 	  SELECT_TYPE Atemp;
 #ifdef NON_BLOCKING_CONNECT
@@ -4786,6 +4788,7 @@
 		 the loop, since timeout has already been zeroed out.  */
 	      clear_waiting_for_input ();
 	      status_notify (NULL);
+	      if (do_display) redisplay_preserve_echo_area (13);
 	    }
 	}
 
@@ -6201,7 +6204,10 @@
       p->status = Qrun;
       p->tick = ++process_tick;
       if (!nomsg)
-	status_notify (NULL);
+	{
+	  status_notify (NULL);
+	  redisplay_preserve_echo_area (13);
+	}
       break;
 #endif /* ! defined (SIGCONT) */
     case SIGINT:
@@ -7015,8 +7021,6 @@
     } /* end for */
 
   update_mode_lines++;  /* in case buffers use %s in mode-line-format */
-  redisplay_preserve_echo_area (13);
-
   UNGCPRO;
 }