X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=lisp%2Fprocess.el;h=e28718972f9752caaf06a560756f3fc8bedf1786;hp=c0602ded6365d078d4758508fc14d6507dfa6e9e;hb=98a6e4055a1fa624c592ac06f79287d55196ca37;hpb=a1655b870904de973c366d85ebdc8adde4ef5e1e diff --git a/lisp/process.el b/lisp/process.el index c0602de..e287189 100644 --- a/lisp/process.el +++ b/lisp/process.el @@ -20,7 +20,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -105,8 +105,10 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you (setq infile (expand-file-name infile)) (setq inbuf (generate-new-buffer "*call-process*")) (with-current-buffer inbuf - (insert-file-contents-internal infile nil nil nil nil - coding-system-for-read))) + ;; Make sure this works with jka-compr + (let ((file-name-handler-alist nil)) + (insert-file-contents-internal infile nil nil nil nil + 'binary)))) (let ((stderr (if (consp buffer) (second buffer) t))) (if (consp buffer) (setq buffer (car buffer))) (setq buffer @@ -129,7 +131,7 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you (if buffer (set-marker (process-mark proc) (point buffer) buffer)) (unwind-protect - (progn + (prog1 (catch 'call-process-done (when (not discard) (set-process-sentinel @@ -256,7 +258,7 @@ In either case, the output is inserted after point (leaving mark after it)." (if (and output-buffer (not (or (bufferp output-buffer) (stringp output-buffer)))) (progn (barf-if-buffer-read-only) - (push-mark) + (push-mark nil (not (interactive-p))) ;; We do not use -f for csh; we will not support broken use of ;; .cshrcs. Even the BSD csh manual says to use ;; "if ($?prompt) exit" before things which are not useful @@ -403,7 +405,7 @@ Remaining arguments are strings to give program as arguments." (defun open-network-stream (name buffer host service &optional protocol) "Open a TCP connection for a service to a host. -Returns a subprocess-object to represent the connection. +Returns a process object to represent the connection. Input and output work as for subprocesses; `delete-process' closes it. Args are NAME BUFFER HOST SERVICE. NAME is name for process. It is modified if necessary to make it unique. @@ -419,7 +421,7 @@ Fifth argument PROTOCOL is a network protocol. Currently 'tcp (Transmission Control Protocol) and 'udp (User Datagram Protocol) are supported. When omitted, 'tcp is assumed. -Ouput via `process-send-string' and input via buffer or filter (see +Output via `process-send-string' and input via buffer or filter (see `set-process-filter') are stream-oriented. That means UDP datagrams are not guaranteed to be sent and received in discrete packets. (But small datagrams around 500 bytes that are not truncated by `process-send-string' @@ -429,8 +431,21 @@ lost packets." (defun shell-quote-argument (argument) "Quote an argument for passing as argument to an inferior shell." - (if (eq system-type 'windows-nt) - (nt-quote-process-args (list shell-file-name argument)) + (if (and (eq system-type 'windows-nt) + (let ((progname (downcase (file-name-nondirectory + shell-file-name)))) + (or (equal progname "command.com") + (equal progname "cmd.exe")))) + ;; the expectation is that you can take the result of + ;; shell-quote-argument and pass it to as an arg to + ;; (start-process shell-quote-argument ...) and have it end + ;; up as-is in the program's argv[] array. to do this, we + ;; need to protect against both the shell's and the program's + ;; quoting conventions (and our own conventions in + ;; mswindows-construct-process-command-line!). Putting quotes + ;; around shell metachars gets through the last two, and applying + ;; the normal VC runtime quoting works with practically all apps. + (mswindows-quote-one-vc-runtime-arg argument t) ;; Quote everything except POSIX filename characters. ;; This should be safe enough even for really weird shells. (let ((result "") (start 0) end)