branch: elpa/eat
commit d9af04ef829a9a1db2240d3b17c5819e97c5bc56
Author: Akib Azmain Turja <[email protected]>
Commit: Akib Azmain Turja <[email protected]>
Don't mess up terminal when switching to line mode
* eat.el (eat--line-mode-enter-auto-1)
(eat--line-mode-exit-auto-1): New function.
* eat.el (eat--line-mode-enter-auto, eat--line-mode-exit-auto):
Do everything after the output is processed.
---
eat.el | 57 ++++++++++++++++++++++++++++++++++++---------------------
1 file changed, 36 insertions(+), 21 deletions(-)
diff --git a/eat.el b/eat.el
index fc7c68b77b..b9072bdbd1 100644
--- a/eat.el
+++ b/eat.el
@@ -5141,32 +5141,47 @@ If HOST isn't the host Emacs is running on, don't do
anything."
(defvar eat--semi-char-mode)
(defvar eat--char-mode)
+(defun eat--line-mode-enter-auto-1 (buffer)
+ "Enter line mode in BUFFER."
+ (with-current-buffer buffer
+ (unless (or eat--inhibit-auto-line-mode eat--line-mode)
+ (unless eat--line-mode
+ (setq eat--auto-line-mode-prev-mode
+ (cond (eat--semi-char-mode 'semi-char)
+ (eat--char-mode 'char)
+ (t 'emacs)))
+ (eat-line-mode)
+ ;; We're entering automatically, so we should be able to exit it
+ ;; automatically.
+ (setq eat--inhibit-auto-line-mode nil)))))
+
(defun eat--line-mode-enter-auto ()
"Enter line mode."
- (unless (or eat--inhibit-auto-line-mode eat--line-mode)
- (unless eat--line-mode
- (setq eat--auto-line-mode-prev-mode
- (cond (eat--semi-char-mode 'semi-char)
- (eat--char-mode 'char)
- (t 'emacs)))
- (eat-line-mode)
- ;; We're entering automatically, so we should be able to exit it
- ;; automatically.
- (setq eat--inhibit-auto-line-mode nil))))
+ (run-with-idle-timer 0 nil #'eat--line-mode-enter-auto-1
+ (current-buffer)))
+
+(defun eat--line-mode-exit-auto-1 (buffer)
+ "Exit line mode in BUFFER."
+ (with-current-buffer buffer
+ (when (and (not eat--inhibit-auto-line-mode)
+ eat--auto-line-mode-prev-mode)
+ (pcase eat--auto-line-mode-prev-mode
+ ('emacs (eat-emacs-mode))
+ ('semi-char (eat-semi-char-mode))
+ ('char (eat-char-mode)))
+ (setq eat--auto-line-mode-prev-mode nil)
+ (when (/= (eat-term-end eat-terminal) (point-max))
+ (eat-line-send))
+ ;; Toggle line mode _after_ we exit from
+ ;; `eat-term-process-output'.
+ (run-with-idle-timer 0 nil #'eat-line-mode)
+ (eat--line-mode -1)
+ (setq buffer-undo-list nil))))
(defun eat--line-mode-exit-auto ()
"Exit line mode."
- (when (and (not eat--inhibit-auto-line-mode)
- eat--auto-line-mode-prev-mode)
- (pcase eat--auto-line-mode-prev-mode
- ('emacs (eat-emacs-mode))
- ('semi-char (eat-semi-char-mode))
- ('char (eat-char-mode)))
- (setq eat--auto-line-mode-prev-mode nil)
- (when (/= (eat-term-end eat-terminal) (point-max))
- (eat-line-send))
- (eat--line-mode -1)
- (setq buffer-undo-list nil)))
+ (run-with-idle-timer 0 nil #'eat--line-mode-exit-auto-1
+ (current-buffer)))
(defun eat--post-prompt ()
"Put a mark in the marginal area and enter line mode."