emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/eat e0fa65c225 2/3: Don't let 'eat--process-input-queue' t


From: ELPA Syncer
Subject: [nongnu] elpa/eat e0fa65c225 2/3: Don't let 'eat--process-input-queue' to recurse
Date: Tue, 17 Oct 2023 04:00:16 -0400 (EDT)

branch: elpa/eat
commit e0fa65c22592e30c0d9aa1e3578077802af385ff
Author: Akib Azmain Turja <akib@disroot.org>
Commit: Akib Azmain Turja <akib@disroot.org>

    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 b9072bdbd1..328d909bcb 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]