X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fprocess.el;h=749f99d2120f61588bed75af18e5bf44bdfc5c58;hb=d5e4e63d5665c99c6ae51a2a7e8dd6783400fd90;hp=fb46f3560495f9ef5098a371277b8fa172387d80;hpb=6883ee56ec887c2c48abe5b06b5e66aa74031910;p=chise%2Fxemacs-chise.git diff --git a/lisp/process.el b/lisp/process.el index fb46f35..749f99d 100644 --- a/lisp/process.el +++ b/lisp/process.el @@ -33,6 +33,9 @@ ;;; Code: +(defvar binary-process-output) +(defvar buffer-file-type) + (defgroup processes nil "Process, subshell, compilation, and job control support." :group 'external @@ -62,14 +65,10 @@ BUFFER is the buffer or (buffer-name) to associate with the process. Third arg is command name, the name of a shell command. Remaining arguments are the arguments for the command. Wildcards and redirection are handled as usual in the shell." - (cond - ((eq system-type 'vax-vms) - (apply 'start-process name buffer args)) - ;; We used to use `exec' to replace the shell with the command, - ;; but that failed to handle (...) and semicolon, etc. - (t - (start-process name buffer shell-file-name shell-command-switch - (mapconcat 'identity args " "))))) + ;; We used to use `exec' to replace the shell with the command, + ;; but that failed to handle (...) and semicolon, etc. + (start-process name buffer shell-file-name shell-command-switch + (mapconcat #'identity args " "))) (defun call-process (program &optional infile buffer displayp &rest args) "Call PROGRAM synchronously in separate process. @@ -114,31 +113,19 @@ Otherwise waits for PROGRAM to terminate and returns a numeric exit status or a signal description string. If you quit, the process is first killed with SIGINT, then with SIGKILL if you quit again before the process exits." - (let ((temp (cond ((eq system-type 'vax-vms) - (make-temp-name "tmp:emacs")) - ((or (eq system-type 'ms-dos) - (eq system-type 'windows-nt)) - (make-temp-name - (concat (file-name-as-directory - (temp-directory)) - "em"))) - (t - (make-temp-name - (concat (file-name-as-directory - (temp-directory)) - "emacs")))))) + (let ((temp + (make-temp-name + (concat (file-name-as-directory (temp-directory)) + (if (memq system-type '(ms-dos windows-nt)) "em" "emacs"))))) (unwind-protect (progn - (if (or (eq system-type 'ms-dos) - (eq system-type 'windows-nt)) + (if (memq system-type '(ms-dos windows-nt)) (let ((buffer-file-type binary-process-output)) (write-region start end temp nil 'silent)) (write-region start end temp nil 'silent)) (if deletep (delete-region start end)) (apply #'call-process program temp buffer displayp args)) - (condition-case () - (delete-file temp) - (file-error nil))))) + (ignore-file-errors (delete-file temp))))) (defun shell-command (command &optional output-buffer) @@ -188,7 +175,7 @@ In either case, the output is inserted after point (leaving mark after it)." ;; in the buffer itself. (defun shell-command-sentinel (process signal) (if (memq (process-status process) '(exit signal)) - (message "%s: %s." + (message "%s: %s." (car (cdr (cdr (process-command process)))) (substring signal 0 -1)))) @@ -245,6 +232,7 @@ In either case, the output is inserted after point (leaving mark after it)." (let ((buffer (get-buffer-create (or output-buffer "*Shell Command Output*"))) (success nil) + (exit-status nil) (directory default-directory)) (unwind-protect (if (eq buffer (current-buffer)) @@ -254,11 +242,12 @@ In either case, the output is inserted after point (leaving mark after it)." (progn (setq buffer-read-only nil) (delete-region (max start end) (point-max)) (delete-region (point-min) (max start end)) - (call-process-region (point-min) (point-max) - shell-file-name t t nil - shell-command-switch command) + (setq exit-status + (call-process-region (point-min) (point-max) + shell-file-name t t nil + shell-command-switch command)) (setq success t)) - ;; Clear the output buffer, + ;; Clear the output buffer, ;; then run the command with output there. (save-excursion (set-buffer buffer) @@ -266,9 +255,10 @@ In either case, the output is inserted after point (leaving mark after it)." ;; XEmacs change (setq default-directory directory) (erase-buffer)) - (call-process-region start end shell-file-name - nil buffer nil - shell-command-switch command) + (setq exit-status + (call-process-region start end shell-file-name + nil buffer nil + shell-command-switch command)) (setq success t)) ;; Report the amount of output. (let ((lines (save-excursion @@ -280,7 +270,9 @@ In either case, the output is inserted after point (leaving mark after it)." (if success (display-message 'command - "(Shell command completed with no output)")) + (if (eql exit-status 0) + "(Shell command succeeded with no output)" + "(Shell command failed with no output)"))) (kill-buffer buffer)) ((and success (= lines 1)) (message "%s" @@ -290,7 +282,7 @@ In either case, the output is inserted after point (leaving mark after it)." (buffer-substring (point) (progn (end-of-line) (point)))))) - (t + (t (set-window-start (display-buffer buffer) 1)))))))) @@ -345,7 +337,7 @@ Fourth arg SERVICE is name of the service desired, or an integer process as a string" ;; by "William G. Dubuque" (with-output-to-string - (call-process shell-file-name nil t nil "-c" command))) + (call-process shell-file-name nil t nil shell-command-switch command))) (defalias 'shell-command-to-string 'exec-to-string)