branch: elpa/eat
commit 440b816f8e9fea21128973faaf6d1359b5fe3b22
Author: Akib Azmain Turja <a...@disroot.org>
Commit: Akib Azmain Turja <a...@disroot.org>

    Don't queue input
    
    * eat.el (eat--pending-input-chunks)
    (eat--defer-input-processing, eat--process-input-queue-timer):
    Remove.
    All references updated.
    * eat.el (eat--send-input): Send the input immediately.
    * eat.el (eat--process-input-queue): Remove.
    * eat.el (eat--eshell-process-output-queue)
    (eat--process-output-queue): Loop while output queue isn't
    empty, set 'eat--output-queue-first-chunk-time' to 't' in the
    loop.
    * eat.el (eat--filter, eat--eshell-filter): Don't start a timer
    if 'eat--output-queue-first-chunk-time' is 't'.
---
 eat.el | 133 +++++++++++++++++++++++++----------------------------------------
 1 file changed, 51 insertions(+), 82 deletions(-)

diff --git a/eat.el b/eat.el
index 89558f8731..ac4826e7e8 100644
--- a/eat.el
+++ b/eat.el
@@ -6598,9 +6598,6 @@ END if it's safe to do so."
           isearch-search-fun-function
           isearch-wrap-function
           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
@@ -6732,17 +6729,6 @@ The output chunks are pushed, so last output appears 
first.")
 (defvar eat--process-output-queue-timer nil
   "Timer to process output queue.")
 
-(defvar eat--pending-input-chunks nil
-  "The list of pending input chunks.
-
-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.")
 
@@ -6772,30 +6758,9 @@ OS's."
 
 (defun eat--send-input (_ input)
   "Send INPUT to subprocess."
-  (push input eat--pending-input-chunks)
-  (unless eat--process-input-queue-timer
-    (setq eat--process-input-queue-timer
-          (run-with-idle-timer 0 nil #'eat--process-input-queue
-                               (current-buffer)))))
-
-(defun eat--process-input-queue (buffer)
-  "Process the input queue on BUFFER."
-  (when (buffer-live-p buffer)
-    (with-current-buffer buffer
-      ;; 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)
+  (when-let* ((eat-terminal)
               (proc (eat-term-parameter eat-terminal 'eat--process)))
-          (when (process-live-p proc)
-            (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)))))))
-      (when eat--process-input-queue-timer
-        (cancel-timer eat--process-input-queue-timer))
-      (setq eat--process-input-queue-timer nil))))
+    (eat--send-string proc input)))
 
 (defun eat--process-output-queue (buffer)
   "Process the output queue on BUFFER."
@@ -6813,10 +6778,12 @@ OS's."
             (when eat--process-output-queue-timer
               (cancel-timer eat--process-output-queue-timer))
             (setq eat--output-queue-first-chunk-time nil)
-            (let ((queue eat--pending-output-chunks))
-              (setq eat--pending-output-chunks nil)
-              (dolist (output (nreverse queue))
-                (eat-term-process-output eat-terminal output)))
+            (while eat--pending-output-chunks
+              (let ((queue eat--pending-output-chunks)
+                    (eat--output-queue-first-chunk-time t))
+                (setq eat--pending-output-chunks nil)
+                (dolist (output (nreverse queue))
+                  (eat-term-process-output eat-terminal output))))
             (eat-term-redisplay eat-terminal)
             ;; Truncate output of previous dead processes.
             (when (and eat-term-scrollback-size
@@ -6853,17 +6820,19 @@ OS's."
       (unless eat--output-queue-first-chunk-time
         (setq eat--output-queue-first-chunk-time (current-time)))
       (push output eat--pending-output-chunks)
-      (let ((time-left
-             (- eat-maximum-latency
-                (float-time
-                 (time-subtract
-                  nil eat--output-queue-first-chunk-time)))))
-        (if (<= time-left 0)
-            (eat--process-output-queue (current-buffer))
-          (setq eat--process-output-queue-timer
-                (run-with-timer
-                 (min time-left eat-minimum-latency) nil
-                 #'eat--process-output-queue (current-buffer))))))))
+      (unless (eq eat--output-queue-first-chunk-time t)
+        (let ((time-left
+               (- eat-maximum-latency
+                  (float-time
+                   (time-subtract
+                    nil eat--output-queue-first-chunk-time)))))
+          (if (<= time-left 0)
+              (eat--process-output-queue (current-buffer))
+            (setq eat--process-output-queue-timer
+                  (run-with-timer
+                   (min time-left eat-minimum-latency) nil
+                   #'eat--process-output-queue
+                   (current-buffer)))))))))
 
 (defun eat--sentinel (process message)
   "Sentinel for Eat buffers.
@@ -7415,20 +7384,22 @@ PROGRAM can be a shell command."
       (when eat--process-output-queue-timer
         (cancel-timer eat--process-output-queue-timer))
       (setq eat--output-queue-first-chunk-time nil)
-      (let ((queue eat--pending-output-chunks))
-        (setq eat--pending-output-chunks nil)
-        (if (eval-when-compile (< emacs-major-version 27))
-            (eshell-output-filter
-             process (string-join (nreverse queue)))
-          (combine-change-calls
-              (eat-term-beginning eat-terminal)
-              (eat-term-end eat-terminal)
-            ;; TODO: Is `string-join' OK or should we use a loop?
-            (if (eval-when-compile (< emacs-major-version 30))
-                (eshell-output-filter
-                 process (string-join (nreverse queue)))
-              (eshell-interactive-process-filter
-               process (string-join (nreverse queue))))))))))
+      (while eat--pending-output-chunks
+        (let ((queue eat--pending-output-chunks)
+              (eat--output-queue-first-chunk-time t))
+          (setq eat--pending-output-chunks nil)
+          (if (eval-when-compile (< emacs-major-version 27))
+              (eshell-output-filter
+               process (string-join (nreverse queue)))
+            (combine-change-calls
+                (eat-term-beginning eat-terminal)
+                (eat-term-end eat-terminal)
+              ;; TODO: Is `string-join' OK or should we use a loop?
+              (if (eval-when-compile (< emacs-major-version 30))
+                  (eshell-output-filter
+                   process (string-join (nreverse queue)))
+                (eshell-interactive-process-filter
+                 process (string-join (nreverse queue)))))))))))
 
 (defun eat--eshell-filter (process string)
   "Process output STRING from PROCESS."
@@ -7439,19 +7410,20 @@ PROGRAM can be a shell command."
       (unless eat--output-queue-first-chunk-time
         (setq eat--output-queue-first-chunk-time (current-time)))
       (push string eat--pending-output-chunks)
-      (let ((time-left
-             (- eat-maximum-latency
-                (float-time
-                 (time-subtract
-                  nil eat--output-queue-first-chunk-time)))))
-        (if (<= time-left 0)
-            (eat--eshell-process-output-queue
-             process (current-buffer))
-          (setq eat--process-output-queue-timer
-                (run-with-timer
-                 (min time-left eat-minimum-latency) nil
-                 #'eat--eshell-process-output-queue process
-                 (current-buffer))))))))
+      (unless (eq eat--output-queue-first-chunk-time t)
+        (let ((time-left
+               (- eat-maximum-latency
+                  (float-time
+                   (time-subtract
+                    nil eat--output-queue-first-chunk-time)))))
+          (if (<= time-left 0)
+              (eat--eshell-process-output-queue
+               process (current-buffer))
+            (setq eat--process-output-queue-timer
+                  (run-with-timer
+                   (min time-left eat-minimum-latency) nil
+                   #'eat--eshell-process-output-queue process
+                   (current-buffer)))))))))
 
 (declare-function eshell-sentinel "esh-proc" (proc string))
 
@@ -7586,9 +7558,6 @@ symbol `buffer', in which case the point of current 
buffer is set."
                   eat-terminal
                   eat--synchronize-scroll-function
                   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