Re-apply commit 27bcf9a together with a workaround for `process-file'.

Thanks to Michael Albinus for hunting this bug and for providing
this workaround.
This commit is contained in:
Bastien Guerry 2012-12-21 09:45:53 +01:00
parent 3b9c1a0008
commit 9333426c12
2 changed files with 39 additions and 34 deletions

View File

@ -135,15 +135,19 @@ specifies the value of ERROR-BUFFER."
current-prefix-arg
shell-command-default-error-buffer
t)))
(let ((error-file
(if error-buffer
(make-temp-file
(expand-file-name "scor"
(if (featurep 'xemacs)
(temp-directory)
temporary-file-directory)))
nil))
(let ((input-file (org-babel-temp-file "input-"))
(error-file (if error-buffer (org-babel-temp-file "scor-") nil))
(shell-file-name
(if (file-executable-p
(concat (file-remote-p default-directory) shell-file-name))
shell-file-name
"/bin/sh"))
exit-status)
;; There is an error in `process-file' when `error-file' exists.
;; This is fixed in Emacs trunk as of 2012-12-21; let's use this
;; workaround for now.
(unless (file-remote-p default-directory)
(delete-file error-file))
(if (or replace
(and output-buffer
(not (or (bufferp output-buffer) (stringp output-buffer)))))
@ -152,12 +156,14 @@ specifies the value of ERROR-BUFFER."
;; Don't muck with mark unless REPLACE says we should.
(goto-char start)
(and replace (push-mark (point) 'nomsg))
(write-region start end input-file)
(delete-region start end)
(setq exit-status
(call-process-region start end shell-file-name t
(if error-file
(list output-buffer error-file)
t)
nil shell-command-switch command))
(process-file shell-file-name input-file
(if error-file
(list output-buffer error-file)
t)
nil shell-command-switch command))
;; It is rude to delete a buffer which the command is not using.
;; (let ((shell-buffer (get-buffer "*Shell Command Output*")))
;; (and shell-buffer (not (eq shell-buffer (current-buffer)))
@ -176,14 +182,14 @@ specifies the value of ERROR-BUFFER."
(progn (setq buffer-read-only nil)
(delete-region (max start end) (point-max))
(delete-region (point-min) (min start end))
(write-region (point-min) (point-max) input-file)
(delete-region (point-min) (point-max))
(setq exit-status
(call-process-region (point-min) (point-max)
shell-file-name t
(if error-file
(list t error-file)
t)
nil shell-command-switch
command)))
(process-file shell-file-name input-file
(if error-file
(list t error-file)
t)
nil shell-command-switch command)))
;; Clear the output buffer, then run the command with
;; output there.
(let ((directory default-directory))
@ -193,11 +199,11 @@ specifies the value of ERROR-BUFFER."
(setq default-directory directory))
(erase-buffer)))
(setq exit-status
(call-process-region start end shell-file-name nil
(if error-file
(list buffer error-file)
buffer)
nil shell-command-switch command)))
(process-file shell-file-name nil
(if error-file
(list buffer error-file)
buffer)
nil shell-command-switch command)))
;; Report the output.
(with-current-buffer buffer
(setq mode-line-process
@ -231,6 +237,9 @@ specifies the value of ERROR-BUFFER."
;; (kill-buffer buffer)
))))
(when (and input-file (file-exists-p input-file))
(delete-file input-file))
(when (and error-file (file-exists-p error-file))
(if (< 0 (nth 7 (file-attributes error-file)))
(with-current-buffer (get-buffer-create error-buffer)

View File

@ -2547,18 +2547,14 @@ Emacs shutdown."))
Passes PREFIX and SUFFIX directly to `make-temp-file' with the
value of `temporary-file-directory' temporarily set to the value
of `org-babel-temporary-directory'."
(if (file-remote-p default-directory)
(make-temp-file
(concat (file-remote-p default-directory)
(expand-file-name
prefix temporary-file-directory)
nil suffix))
(let ((temporary-file-directory
(let ((temporary-file-directory
(if (file-remote-p default-directory)
(concat (file-remote-p default-directory) "/tmp")
(or (and (boundp 'org-babel-temporary-directory)
(file-exists-p org-babel-temporary-directory)
org-babel-temporary-directory)
temporary-file-directory)))
(make-temp-file prefix nil suffix))))
temporary-file-directory))))
(make-temp-file prefix nil suffix)))
(defun org-babel-remove-temporary-directory ()
"Remove `org-babel-temporary-directory' on Emacs shutdown."