Если все, что вы хотите сделать, это ждать завершения процесса, вам, вероятно, вообще не следует использовать sleep-for
. Вместо этого вызовите процесс синхронно, а не асинхронно:
http://www.gnu.org/software/emacs/manual/html_node/elisp/Synchronous-Processes.html#Synchronous-Processes
Таким образом, Emacs будет блокироваться, пока процесс не завершится.
Если вы должны (или действительно хотите) использовать асинхронный процесс, например, потому что он занимает очень много времени и вы не хотите, чтобы Emacs зависал в течение этого времени (вы говорите о 60 секундах, что довольно долго), тогда правильный способ ожидания завершения процесса - использовать sentinel . Часовой является обратным вызовом, который вызывается всякий раз, когда изменяется состояние процесса, например, когда он завершается.
(defun my-start-process ()
"Returns a process object of an asynchronous process."
...)
(defun my-on-status-change (process status)
"Callback that receives notice for every change of the `status' of `process'."
(cond ((string= status "finished\n") (insert "ZZZ"))
(t (do-something-else))))
;; run process with callback
(let ((process (my-start-process)))
(when process
(set-process-sentinel process 'my-on-status-change)))