branch: elpa/aidermacs commit 5312291b0fabe14c1b5eddb5c27f6b54bdcfc796 Author: Mingde (Matthew) Zeng <matthew...@posteo.net> Commit: Mingde (Matthew) Zeng <matthew...@posteo.net>
Fix aidermacs--vterm-output-advice Addresses #34 --- aidermacs-backend-vterm.el | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/aidermacs-backend-vterm.el b/aidermacs-backend-vterm.el index ec1f0f81f1..66b4a7332e 100644 --- a/aidermacs-backend-vterm.el +++ b/aidermacs-backend-vterm.el @@ -77,8 +77,7 @@ after each output chunk, reducing the need for timers." (proc (get-buffer-process (current-buffer))) ;; Simplified pattern that just looks for a shell prompt (expected "^[^[:space:]]*>[[:space:]]") - (orig-filter (process-filter proc)) - (timer nil)) + (orig-filter (process-filter proc))) ;; Set our temporary process filter. (set-process-filter proc @@ -87,27 +86,24 @@ after each output chunk, reducing the need for timers." (funcall orig-filter proc string) ;; Check immediately after receiving output - (when (aidermacs--vterm-check-finish-sequence-repeated - proc orig-filter start-point expected) - (when timer - (cancel-timer timer) - (setq timer nil)) - (return)) + (when (aidermacs--vterm-check-finish-sequence-repeated proc orig-filter start-point expected) + (when (timerp aidermacs--vterm-active-timer) + (cancel-timer aidermacs--vterm-active-timer) + (setq aidermacs--vterm-active-timer nil)) + (set-process-filter proc orig-filter)) ;; If we haven't found it yet, set up a timer with adaptive frequency - (unless timer - (setq timer (run-with-timer - 0.05 0.05 - (lambda () - (cond - ;; Found the prompt, we're done - ((aidermacs--vterm-check-finish-sequence-repeated - proc orig-filter start-point expected) - (cancel-timer timer) - (setq timer nil)) - - ;; Just keep checking until we find the prompt - ))))))) + (unless aidermacs--vterm-active-timer + (setq aidermacs--vterm-active-timer + (run-with-timer + 0.05 0.05 + (lambda () + (when (aidermacs--vterm-check-finish-sequence-repeated + proc orig-filter start-point expected) + (when (timerp aidermacs--vterm-active-timer) + (cancel-timer aidermacs--vterm-active-timer) + (setq aidermacs--vterm-active-timer nil)) + (set-process-filter proc orig-filter)))))))) (apply orig-fun args)) (apply orig-fun args))) @@ -129,6 +125,8 @@ BUFFER-NAME is the name for the vterm buffer." (advice-add 'vterm-send-return :around #'aidermacs--vterm-output-advice) ;; Set a reasonable scrollback limit to prevent memory issues (setq-local vterm-max-scrollback 5000) + ;; Initialize timer variable + (setq-local aidermacs--vterm-active-timer nil) ;; Set up multi-line key binding (let ((map (make-sparse-keymap))) (set-keymap-parent map (current-local-map))