Function: tramp-accept-process-output

tramp-accept-process-output is a byte-compiled function defined in tramp.el.gz.

Signature

(tramp-accept-process-output PROC)

Documentation

Like accept-process-output for Tramp processes.

This is needed in order to hide last-coding-system-used, which is set for process communication also. If the user quits via C-g, it is propagated up to tramp-file-name-handler.

Source Code

;; Defined in /usr/src/emacs/lisp/net/tramp.el.gz
(defun tramp-accept-process-output (proc &optional _timeout)
  "Like `accept-process-output' for Tramp processes.
This is needed in order to hide `last-coding-system-used', which is set
for process communication also.
If the user quits via `C-g', it is propagated up to `tramp-file-name-handler'."
  (declare (advertised-calling-convention (proc) "29.2"))
  ;; There could be other processes which use the same socket for
  ;; communication.  This could block the output for the current
  ;; process.  Read such output first.  (Bug#61350)
  ;; The process property isn't set anymore due to Bug#62194.
  (when-let* (((process-get proc 'tramp-shared-socket))
	      (v (process-get proc 'tramp-vector)))
    (dolist (p (delq proc (process-list)))
      (when (tramp-file-name-equal-p v (process-get p 'tramp-vector))
	(with-tramp-suspended-timers
	  (with-local-quit (accept-process-output p 0 nil t))))))

  (with-current-buffer (process-buffer proc)
    (let ((inhibit-read-only t)
	  last-coding-system-used
	  result)
      ;; This must be protected by the "locked" property.
      (with-tramp-locked-connection proc
	;; JUST-THIS-ONE is set due to Bug#12145.  `with-local-quit'
	;; returns t in order to report success.
	(if (with-local-quit
	      (setq result (accept-process-output proc 0 nil t)) t)
	    (tramp-message
	     proc 10 "%S %S %s\n%s"
	     proc (process-status proc) result (buffer-string))
	  ;; Propagate quit.
	  (keyboard-quit)))
      result)))