changeset 82094:76546b143f2d

* subr.el (start-file-process-shell-command) (process-file-shell-command): New defuns. * progmodes/compile.el (compilation-start): Apply `start-file-process-shell-command'.
author Michael Albinus <michael.albinus@gmx.de>
date Tue, 24 Jul 2007 20:49:18 +0000
parents ec5e699d1426
children b5773fe4ea48
files lisp/ChangeLog lisp/progmodes/compile.el lisp/subr.el
diffstat 3 files changed, 36 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Tue Jul 24 20:40:26 2007 +0000
+++ b/lisp/ChangeLog	Tue Jul 24 20:49:18 2007 +0000
@@ -1,3 +1,11 @@
+2007-07-24  Michael Albinus  <michael.albinus@gmx.de>
+
+	* subr.el (start-file-process-shell-command)
+	(process-file-shell-command): New defuns.
+
+	* progmodes/compile.el (compilation-start): Apply
+	`start-file-process-shell-command'.
+
 2007-07-24  Alexandre Julliard  <julliard@winehq.org>
 
 	* vc-git.el (vc-git-checkout, vc-directory-exclusion-list): Fix
--- a/lisp/progmodes/compile.el	Tue Jul 24 20:40:26 2007 +0000
+++ b/lisp/progmodes/compile.el	Tue Jul 24 20:49:18 2007 +0000
@@ -1101,8 +1101,7 @@
 	      (unless (getenv "EMACS")
 		(list "EMACS=t"))
 	      (list "INSIDE_EMACS=t")
-	      (copy-sequence process-environment)))
-	    (start-process (symbol-function 'start-process)))
+	      (copy-sequence process-environment))))
 	(set (make-local-variable 'compilation-arguments)
 	     (list command mode name-function highlight-regexp))
 	(set (make-local-variable 'revert-buffer-function)
@@ -1123,22 +1122,14 @@
 		   ;; comint uses `start-file-process'.
 		   (get-buffer-process
 		    (with-no-warnings
-		      (comint-exec outbuf (downcase mode-name)
-				   shell-file-name nil `("-c" ,command))))
-		 ;; Redefine temporarily `start-process' in order to
-		 ;; handle remote compilation.
-		 (fset 'start-process
-		       (lambda (name buffer program &rest program-args)
-			 (apply
-			  (if (file-remote-p default-directory)
-			      'start-file-process
-			    start-process)
-			  name buffer program program-args)))
-		 (unwind-protect
-		     (start-process-shell-command (downcase mode-name)
-						  outbuf command)
-		   ;; Unwindform: Reset original definition of `start-process'.
-		   (fset 'start-process start-process)))))
+		      (comint-exec
+		       outbuf (downcase mode-name)
+		       (if (file-remote-p default-directory)
+			   "/bin/sh"
+			 shell-file-name)
+		       `("-c" ,command))))
+		 (start-file-process-shell-command (downcase mode-name)
+						   outbuf command))))
 	  ;; Make the buffer's mode line show process state.
 	  (setq mode-line-process '(":%s"))
 	  (set-process-sentinel proc 'compilation-sentinel)
--- a/lisp/subr.el	Tue Jul 24 20:40:26 2007 +0000
+++ b/lisp/subr.el	Tue Jul 24 20:49:18 2007 +0000
@@ -2310,6 +2310,15 @@
     (start-process name buffer shell-file-name shell-command-switch
 		   (mapconcat 'identity args " ")))))
 
+(defun start-file-process-shell-command (name buffer &rest args)
+  "Start a program in a subprocess.  Return the process object for it.
+Similar to `start-process-shell-command', but calls `start-file-process'."
+  (start-file-process
+   name buffer
+   (if (file-remote-p default-directory) "/bin/sh" shell-file-name)
+   (if (file-remote-p default-directory) "-c" shell-command-switch)
+   (mapconcat 'identity args " ")))
+
 (defun call-process-shell-command (command &optional infile buffer display
 					   &rest args)
   "Execute the shell command COMMAND synchronously in separate process.
@@ -2341,6 +2350,16 @@
 		  infile buffer display
 		  shell-command-switch
 		  (mapconcat 'identity (cons command args) " ")))))
+
+(defun process-file-shell-command (command &optional infile buffer display
+					   &rest args)
+  "Process files synchronously in a separate process.
+Similar to `call-process-shell-command', but calls `process-file'."
+  (process-file
+   (if (file-remote-p default-directory) "/bin/sh" shell-file-name)
+   infile buffer display
+   (if (file-remote-p default-directory) "-c" shell-command-switch)
+   (mapconcat 'identity (cons command args) " ")))
 
 ;;;; Lisp macros to do various things temporarily.