mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-23 10:34:07 +00:00
* simple.el (process-file): New function, similar to call-process
but supports file handlers. * vc.el (vc-do-command): Use it, instead of call-process. * net/tramp-vc.el (vc-do-command): Do not advise it if process-file is fboundp. * net/tramp.el (tramp-file-name-handler-alist): Add entry for process-file. (tramp-handle-process-file): New function. (tramp-file-name-for-operation): Support process-file.
This commit is contained in:
parent
f2aa54499e
commit
0457dd5538
@ -1,3 +1,15 @@
|
||||
2004-10-23 Kai Grossjohann <kai.grossjohann@gmx.net>
|
||||
|
||||
* simple.el (process-file): New function, similar to call-process
|
||||
but supports file handlers.
|
||||
* vc.el (vc-do-command): Use it, instead of call-process.
|
||||
* net/tramp-vc.el (vc-do-command): Do not advise it if
|
||||
process-file is fboundp.
|
||||
* net/tramp.el (tramp-file-name-handler-alist): Add entry for
|
||||
process-file.
|
||||
(tramp-handle-process-file): New function.
|
||||
(tramp-file-name-for-operation): Support process-file.
|
||||
|
||||
2004-10-23 Ulf Jasper <ulf.jasper@web.de>
|
||||
|
||||
* calendar/icalendar.el (icalendar--weekday-array): New constant.
|
||||
|
@ -217,6 +217,7 @@ Since TRAMP doesn't do async commands yet, this function doesn't, either."
|
||||
;; Daniel Pittman <daniel@danann.net>
|
||||
;;-(if (fboundp 'vc-call-backend)
|
||||
;;- () ;; This is the new VC for which we don't have an appropriate advice yet
|
||||
(unless (fboundp 'process-file)
|
||||
(if (fboundp 'vc-call-backend)
|
||||
(defadvice vc-do-command
|
||||
(around tramp-advice-vc-do-command
|
||||
@ -242,7 +243,7 @@ Since TRAMP doesn't do async commands yet, this function doesn't, either."
|
||||
(setq ad-return-value
|
||||
(apply 'tramp-vc-do-command buffer okstatus command
|
||||
(or file (buffer-file-name)) last flags))
|
||||
ad-do-it))))
|
||||
ad-do-it)))))
|
||||
;;-)
|
||||
|
||||
|
||||
|
@ -1770,6 +1770,7 @@ on the FILENAME argument, even if VISIT was a string.")
|
||||
(delete-file . tramp-handle-delete-file)
|
||||
(directory-file-name . tramp-handle-directory-file-name)
|
||||
(shell-command . tramp-handle-shell-command)
|
||||
(process-file . tramp-handle-process-file)
|
||||
(insert-directory . tramp-handle-insert-directory)
|
||||
(expand-file-name . tramp-handle-expand-file-name)
|
||||
(file-local-copy . tramp-handle-file-local-copy)
|
||||
@ -3469,6 +3470,18 @@ This will break if COMMAND prints a newline, followed by the value of
|
||||
(tramp-run-real-handler 'shell-command
|
||||
(list command output-buffer error-buffer))))
|
||||
|
||||
(defun tramp-handle-process-file (program &optional infile buffer display &rest args)
|
||||
"Like `process-file' for Tramp files."
|
||||
(when infile (error "Implementation does not handle input from file"))
|
||||
(when (and (numberp buffer) (zerop buffer))
|
||||
(error "Implementation does not handle immediate return"))
|
||||
(when (consp buffer) (error "Implementation does not handle error files"))
|
||||
(shell-command
|
||||
(mapconcat 'tramp-shell-quote-argument
|
||||
(cons program args)
|
||||
" ")
|
||||
buffer))
|
||||
|
||||
;; File Editing.
|
||||
|
||||
(defsubst tramp-make-temp-file ()
|
||||
@ -3960,6 +3973,8 @@ ARGS are the arguments OPERATION has been called with."
|
||||
; COMMAND
|
||||
((member operation
|
||||
(list 'dired-call-process 'shell-command
|
||||
; Post Emacs 21.3 only
|
||||
'process-file
|
||||
; XEmacs only
|
||||
'dired-print-file 'dired-shell-call-process))
|
||||
default-directory)
|
||||
|
@ -1879,6 +1879,39 @@ specifies the value of ERROR-BUFFER."
|
||||
(with-current-buffer
|
||||
standard-output
|
||||
(call-process shell-file-name nil t nil shell-command-switch command))))
|
||||
|
||||
(defun process-file (program &optional infile buffer display &rest args)
|
||||
"Process files synchronously in a separate process.
|
||||
Similar to `call-process', but may invoke a file handler based on
|
||||
`default-directory'. The current working directory of the
|
||||
subprocess is `default-directory'.
|
||||
|
||||
File names in INFILE and BUFFER are handled normally, but file
|
||||
names in ARGS should be relative to `default-directory', as they
|
||||
are passed to the process verbatim. \(This is a difference to
|
||||
`call-process' which does not support file handlers for INFILE
|
||||
and BUFFER.\)
|
||||
|
||||
Some file handlers might not support all variants, for example
|
||||
they might behave as if DISPLAY was nil, regardless of the actual
|
||||
value passed."
|
||||
(let ((fh (find-file-name-handler default-directory 'process-file))
|
||||
lc stderr-file)
|
||||
(unwind-protect
|
||||
(if fh (apply fh 'process-file program infile buffer display args)
|
||||
(setq lc (file-local-copy infile))
|
||||
(setq stderr-file (when (and (consp buffer) (stringp (cadr buffer)))
|
||||
(make-temp-file "emacs"))))
|
||||
(prog1
|
||||
(apply 'call-process program
|
||||
(or lc infile)
|
||||
(if stderr-file (list (car buffer) stderr-file) buffer)
|
||||
display args)
|
||||
(when stderr-file (copy-file stderr-file (cadr buffer))))
|
||||
(when stderr-file (delete-file stderr-file))
|
||||
(when lc (delete-file lc)))))
|
||||
|
||||
|
||||
|
||||
(defvar universal-argument-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
|
@ -953,7 +953,7 @@ that is inserted into the command line before the filename."
|
||||
(vc-exec-after
|
||||
`(unless (active-minibuffer-window)
|
||||
(message "Running %s in the background... done" ',command))))
|
||||
(setq status (apply 'call-process command nil t nil squeezed))
|
||||
(setq status (apply 'process-file command nil t nil squeezed))
|
||||
(when (or (not (integerp status)) (and okstatus (< okstatus status)))
|
||||
(pop-to-buffer (current-buffer))
|
||||
(goto-char (point-min))
|
||||
|
Loading…
Reference in New Issue
Block a user