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'.
This commit is contained in:
parent
c890bb240b
commit
440b816f8e
1 changed files with 51 additions and 82 deletions
133
eat.el
133
eat.el
|
@ -6598,9 +6598,6 @@ END if it's safe to do so."
|
||||||
isearch-search-fun-function
|
isearch-search-fun-function
|
||||||
isearch-wrap-function
|
isearch-wrap-function
|
||||||
isearch-push-state-function
|
isearch-push-state-function
|
||||||
eat--pending-input-chunks
|
|
||||||
eat--process-input-queue-timer
|
|
||||||
eat--defer-input-processing
|
|
||||||
eat--pending-output-chunks
|
eat--pending-output-chunks
|
||||||
eat--output-queue-first-chunk-time
|
eat--output-queue-first-chunk-time
|
||||||
eat--process-output-queue-timer
|
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
|
(defvar eat--process-output-queue-timer nil
|
||||||
"Timer to process output queue.")
|
"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
|
(defvar eat--shell-prompt-annotation-correction-timer nil
|
||||||
"Timer to correct shell prompt annotations.")
|
"Timer to correct shell prompt annotations.")
|
||||||
|
|
||||||
|
@ -6772,30 +6758,9 @@ OS's."
|
||||||
|
|
||||||
(defun eat--send-input (_ input)
|
(defun eat--send-input (_ input)
|
||||||
"Send INPUT to subprocess."
|
"Send INPUT to subprocess."
|
||||||
(push input eat--pending-input-chunks)
|
(when-let* ((eat-terminal)
|
||||||
(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)
|
|
||||||
(proc (eat-term-parameter eat-terminal 'eat--process)))
|
(proc (eat-term-parameter eat-terminal 'eat--process)))
|
||||||
(when (process-live-p proc)
|
(eat--send-string proc input)))
|
||||||
(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))))
|
|
||||||
|
|
||||||
(defun eat--process-output-queue (buffer)
|
(defun eat--process-output-queue (buffer)
|
||||||
"Process the output queue on BUFFER."
|
"Process the output queue on BUFFER."
|
||||||
|
@ -6813,10 +6778,12 @@ OS's."
|
||||||
(when eat--process-output-queue-timer
|
(when eat--process-output-queue-timer
|
||||||
(cancel-timer eat--process-output-queue-timer))
|
(cancel-timer eat--process-output-queue-timer))
|
||||||
(setq eat--output-queue-first-chunk-time nil)
|
(setq eat--output-queue-first-chunk-time nil)
|
||||||
(let ((queue eat--pending-output-chunks))
|
(while eat--pending-output-chunks
|
||||||
(setq eat--pending-output-chunks nil)
|
(let ((queue eat--pending-output-chunks)
|
||||||
(dolist (output (nreverse queue))
|
(eat--output-queue-first-chunk-time t))
|
||||||
(eat-term-process-output eat-terminal output)))
|
(setq eat--pending-output-chunks nil)
|
||||||
|
(dolist (output (nreverse queue))
|
||||||
|
(eat-term-process-output eat-terminal output))))
|
||||||
(eat-term-redisplay eat-terminal)
|
(eat-term-redisplay eat-terminal)
|
||||||
;; Truncate output of previous dead processes.
|
;; Truncate output of previous dead processes.
|
||||||
(when (and eat-term-scrollback-size
|
(when (and eat-term-scrollback-size
|
||||||
|
@ -6853,17 +6820,19 @@ OS's."
|
||||||
(unless eat--output-queue-first-chunk-time
|
(unless eat--output-queue-first-chunk-time
|
||||||
(setq eat--output-queue-first-chunk-time (current-time)))
|
(setq eat--output-queue-first-chunk-time (current-time)))
|
||||||
(push output eat--pending-output-chunks)
|
(push output eat--pending-output-chunks)
|
||||||
(let ((time-left
|
(unless (eq eat--output-queue-first-chunk-time t)
|
||||||
(- eat-maximum-latency
|
(let ((time-left
|
||||||
(float-time
|
(- eat-maximum-latency
|
||||||
(time-subtract
|
(float-time
|
||||||
nil eat--output-queue-first-chunk-time)))))
|
(time-subtract
|
||||||
(if (<= time-left 0)
|
nil eat--output-queue-first-chunk-time)))))
|
||||||
(eat--process-output-queue (current-buffer))
|
(if (<= time-left 0)
|
||||||
(setq eat--process-output-queue-timer
|
(eat--process-output-queue (current-buffer))
|
||||||
(run-with-timer
|
(setq eat--process-output-queue-timer
|
||||||
(min time-left eat-minimum-latency) nil
|
(run-with-timer
|
||||||
#'eat--process-output-queue (current-buffer))))))))
|
(min time-left eat-minimum-latency) nil
|
||||||
|
#'eat--process-output-queue
|
||||||
|
(current-buffer)))))))))
|
||||||
|
|
||||||
(defun eat--sentinel (process message)
|
(defun eat--sentinel (process message)
|
||||||
"Sentinel for Eat buffers.
|
"Sentinel for Eat buffers.
|
||||||
|
@ -7415,20 +7384,22 @@ PROGRAM can be a shell command."
|
||||||
(when eat--process-output-queue-timer
|
(when eat--process-output-queue-timer
|
||||||
(cancel-timer eat--process-output-queue-timer))
|
(cancel-timer eat--process-output-queue-timer))
|
||||||
(setq eat--output-queue-first-chunk-time nil)
|
(setq eat--output-queue-first-chunk-time nil)
|
||||||
(let ((queue eat--pending-output-chunks))
|
(while eat--pending-output-chunks
|
||||||
(setq eat--pending-output-chunks nil)
|
(let ((queue eat--pending-output-chunks)
|
||||||
(if (eval-when-compile (< emacs-major-version 27))
|
(eat--output-queue-first-chunk-time t))
|
||||||
(eshell-output-filter
|
(setq eat--pending-output-chunks nil)
|
||||||
process (string-join (nreverse queue)))
|
(if (eval-when-compile (< emacs-major-version 27))
|
||||||
(combine-change-calls
|
(eshell-output-filter
|
||||||
(eat-term-beginning eat-terminal)
|
process (string-join (nreverse queue)))
|
||||||
(eat-term-end eat-terminal)
|
(combine-change-calls
|
||||||
;; TODO: Is `string-join' OK or should we use a loop?
|
(eat-term-beginning eat-terminal)
|
||||||
(if (eval-when-compile (< emacs-major-version 30))
|
(eat-term-end eat-terminal)
|
||||||
(eshell-output-filter
|
;; TODO: Is `string-join' OK or should we use a loop?
|
||||||
process (string-join (nreverse queue)))
|
(if (eval-when-compile (< emacs-major-version 30))
|
||||||
(eshell-interactive-process-filter
|
(eshell-output-filter
|
||||||
process (string-join (nreverse queue))))))))))
|
process (string-join (nreverse queue)))
|
||||||
|
(eshell-interactive-process-filter
|
||||||
|
process (string-join (nreverse queue)))))))))))
|
||||||
|
|
||||||
(defun eat--eshell-filter (process string)
|
(defun eat--eshell-filter (process string)
|
||||||
"Process output STRING from PROCESS."
|
"Process output STRING from PROCESS."
|
||||||
|
@ -7439,19 +7410,20 @@ PROGRAM can be a shell command."
|
||||||
(unless eat--output-queue-first-chunk-time
|
(unless eat--output-queue-first-chunk-time
|
||||||
(setq eat--output-queue-first-chunk-time (current-time)))
|
(setq eat--output-queue-first-chunk-time (current-time)))
|
||||||
(push string eat--pending-output-chunks)
|
(push string eat--pending-output-chunks)
|
||||||
(let ((time-left
|
(unless (eq eat--output-queue-first-chunk-time t)
|
||||||
(- eat-maximum-latency
|
(let ((time-left
|
||||||
(float-time
|
(- eat-maximum-latency
|
||||||
(time-subtract
|
(float-time
|
||||||
nil eat--output-queue-first-chunk-time)))))
|
(time-subtract
|
||||||
(if (<= time-left 0)
|
nil eat--output-queue-first-chunk-time)))))
|
||||||
(eat--eshell-process-output-queue
|
(if (<= time-left 0)
|
||||||
process (current-buffer))
|
(eat--eshell-process-output-queue
|
||||||
(setq eat--process-output-queue-timer
|
process (current-buffer))
|
||||||
(run-with-timer
|
(setq eat--process-output-queue-timer
|
||||||
(min time-left eat-minimum-latency) nil
|
(run-with-timer
|
||||||
#'eat--eshell-process-output-queue process
|
(min time-left eat-minimum-latency) nil
|
||||||
(current-buffer))))))))
|
#'eat--eshell-process-output-queue process
|
||||||
|
(current-buffer)))))))))
|
||||||
|
|
||||||
(declare-function eshell-sentinel "esh-proc" (proc string))
|
(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-terminal
|
||||||
eat--synchronize-scroll-function
|
eat--synchronize-scroll-function
|
||||||
eat--mouse-grabbing-type
|
eat--mouse-grabbing-type
|
||||||
eat--pending-input-chunks
|
|
||||||
eat--process-input-queue-timer
|
|
||||||
eat--defer-input-processing
|
|
||||||
eat--pending-output-chunks
|
eat--pending-output-chunks
|
||||||
eat--output-queue-first-chunk-time
|
eat--output-queue-first-chunk-time
|
||||||
eat--process-output-queue-timer
|
eat--process-output-queue-timer
|
||||||
|
|
Loading…
Add table
Reference in a new issue