From e0fa65c22592e30c0d9aa1e3578077802af385ff Mon Sep 17 00:00:00 2001 From: Akib Azmain Turja Date: Tue, 17 Oct 2023 11:30:50 +0600 Subject: [PATCH] Don't let 'eat--process-input-queue' to recurse * eat.el (eat--defer-input-processing): New variable. * eat.el (eat-mode, eat--eshell-local-mode): Make 'eat--defer-input-processing' buffer-local. * eat.el (eat--process-input-queue): If 'eat--defer-input-processing' is non-nil, do nothing, otherwise bind it to non-nil while sending input. --- eat.el | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/eat.el b/eat.el index b9072bd..328d909 100644 --- a/eat.el +++ b/eat.el @@ -6572,6 +6572,7 @@ END if it's safe to do so." isearch-push-state-function eat--pending-input-chunks eat--process-input-queue-timer + eat--defer-input-processing eat--pending-output-chunks eat--output-queue-first-chunk-time eat--process-output-queue-timer @@ -6711,6 +6712,9 @@ The input chunks are pushed, so last input appears first.") (defvar eat--process-input-queue-timer nil "Timer to process input queue.") +(defvar eat--defer-input-processing nil + "Non-nil meaning process input later.") + (defvar eat--shell-prompt-annotation-correction-timer nil "Timer to correct shell prompt annotations.") @@ -6755,10 +6759,15 @@ OS's." (proc (eat-term-parameter terminal 'eat--process)) ((process-live-p proc))) (with-current-buffer buffer - (let ((chunks (nreverse eat--pending-input-chunks))) - (setq eat--pending-input-chunks nil) - (dolist (str chunks) - (eat--send-string proc str)))))) + ;; We don't want to recurse this function. + (unless eat--defer-input-processing + (let ((inhibit-quit t) ; Don't disturb! + (eat--defer-input-processing t)) + (while eat--pending-input-chunks + (let ((chunks (nreverse eat--pending-input-chunks))) + (setq eat--pending-input-chunks nil) + (dolist (str chunks) + (eat--send-string proc str))))))))) (defun eat--process-output-queue (buffer) "Process the output queue on BUFFER." @@ -7541,6 +7550,7 @@ symbol `buffer', in which case the point of current buffer is set." eat--mouse-grabbing-type eat--pending-input-chunks eat--process-input-queue-timer + eat--defer-input-processing eat--pending-output-chunks eat--output-queue-first-chunk-time eat--process-output-queue-timer