Eli Zaretskii <e...@gnu.org> writes: >> >> Tramp is in a loop, waiting for results from the remote side. I don't >> >> know how to implement this differently. >> > >> > What kind of loop? Can you point me to the code which loops there? >> >> The umbrella function is tramp-send-command. It sends the command to >> remote via tramp-send-string, and waits then for a proper shell prompt >> via tramp-wait-for-output. The latter function calls >> tramp-wait-for-regexp, which loops using tramp-accept-process-output. > > Did you try either calling accept-process-output with a non-zero > timeout of, say, 5 msec, or inserting a (sit-for 0.005) into the loop > which calls tramp-accept-process-output? > > Waiting for a process to respond should try not to spin without > sleeping for a few milliseconds between polling attempts.
A constant delay busy-wait would be better than what's there today. A straightforward exponential back-off (start with something small like 0.005 and double on each "still-waiting" case till something larger like 0.5) could be even better. However, I thought you'd be proposing something like registering a "callback". Out of curiosity, since I am unfamiliar with the relevant Emacs internals, would it not be possible to add a function to the equivalent of `after-change-functions' that processes the output? -- Suhail