Mercurial > hg > xemacs-beta
comparison lisp/process.el @ 398:74fd4e045ea6 r21-2-29
Import from CVS: tag r21-2-29
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:13:30 +0200 |
parents | 1f50e6fe4f3f |
children | b8cc9ab3f761 |
comparison
equal
deleted
inserted
replaced
397:f4aeb21a5bad | 398:74fd4e045ea6 |
---|---|
31 ;; This file is dumped with XEmacs. | 31 ;; This file is dumped with XEmacs. |
32 | 32 |
33 ;;; Code: | 33 ;;; Code: |
34 | 34 |
35 | 35 |
36 (defvar binary-process-output) | |
37 (defvar buffer-file-type) | |
38 | |
39 (defgroup processes nil | 36 (defgroup processes nil |
40 "Process, subshell, compilation, and job control support." | 37 "Process, subshell, compilation, and job control support." |
41 :group 'external | 38 :group 'external |
42 :group 'development) | 39 :group 'development) |
43 | 40 |
113 and returns a numeric exit status or a signal description string. | 110 and returns a numeric exit status or a signal description string. |
114 If you quit, the process is first killed with SIGINT, then with SIGKILL if | 111 If you quit, the process is first killed with SIGINT, then with SIGKILL if |
115 you quit again before the process exits." | 112 you quit again before the process exits." |
116 (let ((temp | 113 (let ((temp |
117 (make-temp-name | 114 (make-temp-name |
118 (concat (file-name-as-directory (temp-directory)) | 115 (concat (file-name-as-directory (temp-directory)) "emacs")))) |
119 (if (memq system-type '(ms-dos windows-nt)) "em" "emacs"))))) | |
120 (unwind-protect | 116 (unwind-protect |
121 (progn | 117 (progn |
122 (if (memq system-type '(ms-dos windows-nt)) | 118 (write-region start end temp nil 'silent) |
123 (let ((buffer-file-type binary-process-output)) | |
124 (write-region start end temp nil 'silent)) | |
125 (write-region start end temp nil 'silent)) | |
126 (if deletep (delete-region start end)) | 119 (if deletep (delete-region start end)) |
127 (apply #'call-process program temp buffer displayp args)) | 120 (apply #'call-process program temp buffer displayp args)) |
128 (ignore-file-errors (delete-file temp))))) | 121 (ignore-file-errors (delete-file temp))))) |
129 | 122 |
130 | 123 |
297 with any buffer | 290 with any buffer |
298 Third arg is program file name. It is searched for as in the shell. | 291 Third arg is program file name. It is searched for as in the shell. |
299 Remaining arguments are strings to give program as arguments." | 292 Remaining arguments are strings to give program as arguments." |
300 (apply 'start-process-internal name buffer program program-args)) | 293 (apply 'start-process-internal name buffer program program-args)) |
301 | 294 |
302 (defun open-network-stream (name buffer host service) | 295 (defun open-network-stream (name buffer host service &optional protocol) |
303 "Open a TCP connection for a service to a host. | 296 "Open a TCP connection for a service to a host. |
304 Returns a subprocess-object to represent the connection. | 297 Returns a subprocess-object to represent the connection. |
305 Input and output work as for subprocesses; `delete-process' closes it. | 298 Input and output work as for subprocesses; `delete-process' closes it. |
306 Args are NAME BUFFER HOST SERVICE. | 299 Args are NAME BUFFER HOST SERVICE. |
307 NAME is name for process. It is modified if necessary to make it unique. | 300 NAME is name for process. It is modified if necessary to make it unique. |
310 an output stream or filter function to handle the output. | 303 an output stream or filter function to handle the output. |
311 BUFFER may be also nil, meaning that this process is not associated | 304 BUFFER may be also nil, meaning that this process is not associated |
312 with any buffer | 305 with any buffer |
313 Third arg is name of the host to connect to, or its IP address. | 306 Third arg is name of the host to connect to, or its IP address. |
314 Fourth arg SERVICE is name of the service desired, or an integer | 307 Fourth arg SERVICE is name of the service desired, or an integer |
315 specifying a port number to connect to." | 308 specifying a port number to connect to. |
316 (open-network-stream-internal name buffer host service)) | 309 Fifth argument PROTOCOL is a network protocol. Currently 'tcp |
310 (Transmission Control Protocol) and 'udp (User Datagram Protocol) are | |
311 supported. When omitted, 'tcp is assumed. | |
312 | |
313 Ouput via `process-send-string' and input via buffer or filter (see | |
314 `set-process-filter') are stream-oriented. That means UDP datagrams are | |
315 not guaranteed to be sent and received in discrete packets. (But small | |
316 datagrams around 500 bytes that are not truncated by `process-send-string' | |
317 are usually fine.) Note further that UDP protocol does not guard against | |
318 lost packets." | |
319 (open-network-stream-internal name buffer host service protocol)) | |
317 | 320 |
318 (defun shell-quote-argument (argument) | 321 (defun shell-quote-argument (argument) |
319 "Quote an argument for passing as argument to an inferior shell." | 322 "Quote an argument for passing as argument to an inferior shell." |
320 (if (eq system-type 'ms-dos) | 323 (if (eq system-type 'windows-nt) |
321 ;; MS-DOS shells don't have quoting, so don't do any. | 324 (nt-quote-process-args (list shell-file-name argument)) |
322 argument | 325 ;; Quote everything except POSIX filename characters. |
323 (if (eq system-type 'windows-nt) | 326 ;; This should be safe enough even for really weird shells. |
324 (concat "\"" argument "\"") | 327 (let ((result "") (start 0) end) |
325 ;; Quote everything except POSIX filename characters. | 328 (while (string-match "[^-0-9a-zA-Z_./]" argument start) |
326 ;; This should be safe enough even for really weird shells. | 329 (setq end (match-beginning 0) |
327 (let ((result "") (start 0) end) | 330 result (concat result (substring argument start end) |
328 (while (string-match "[^-0-9a-zA-Z_./]" argument start) | 331 "\\" (substring argument end (1+ end))) |
329 (setq end (match-beginning 0) | 332 start (1+ end))) |
330 result (concat result (substring argument start end) | 333 (concat result (substring argument start))))) |
331 "\\" (substring argument end (1+ end))) | 334 |
332 start (1+ end))) | 335 (defun shell-command-to-string (command) |
333 (concat result (substring argument start)))))) | 336 "Execute shell command COMMAND and return its output as a string." |
334 | |
335 (defun exec-to-string (command) | |
336 "Execute COMMAND as an external process and return the output of that | |
337 process as a string" | |
338 ;; by "William G. Dubuque" <wgd@zurich.ai.mit.edu> | |
339 (with-output-to-string | 337 (with-output-to-string |
340 (call-process shell-file-name nil t nil shell-command-switch command))) | 338 (call-process shell-file-name nil t nil shell-command-switch command))) |
341 | 339 |
342 (defalias 'shell-command-to-string 'exec-to-string) | 340 (defalias 'exec-to-string 'shell-command-to-string) |
343 | 341 |
344 ;;; process.el ends here | 342 ;;; process.el ends here |