;;; Code:
\f
+(defvar binary-process-output)
+(defvar buffer-file-type)
+
(defgroup processes nil
"Process, subshell, compilation, and job control support."
:group 'external
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.
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)))))
\f
(defun shell-command (command &optional output-buffer)
;; 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))))
(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))
(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)
;; 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
(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"
(buffer-substring (point)
(progn (end-of-line)
(point))))))
- (t
+ (t
(set-window-start (display-buffer buffer) 1))))))))
\f
process as a string"
;; by "William G. Dubuque" <wgd@zurich.ai.mit.edu>
(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)