[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/aggressive-indent c39dbff 24/43: Merge pull request #11
From: |
Stefan Monnier |
Subject: |
[elpa] externals/aggressive-indent c39dbff 24/43: Merge pull request #118 from oscarfv/master |
Date: |
Wed, 7 Jul 2021 22:49:43 -0400 (EDT) |
branch: externals/aggressive-indent
commit c39dbff19743692907b4ac43d78fc528a023d855
Merge: d4616c8 6549951
Author: Artur Malabarba <Malabarba@users.noreply.github.com>
Commit: GitHub <noreply@github.com>
Merge pull request #118 from oscarfv/master
Backport while-no-input from Emacs 27.0 to fix #111
---
aggressive-indent.el | 39 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/aggressive-indent.el b/aggressive-indent.el
index 5fc114a..9a77f2a 100644
--- a/aggressive-indent.el
+++ b/aggressive-indent.el
@@ -415,6 +415,43 @@ typing, try tweaking this number."
(defvar-local aggressive-indent--idle-timer nil
"Idle timer used for indentation")
+;; Ripped from Emacs 27.0 subr.el.
+;; See Github Issue#111 and Emacs bug#31692.
+(defmacro aggressive-indent--while-no-input (&rest body)
+ "Execute BODY only as long as there's no pending input.
+If input arrives, that ends the execution of BODY,
+and `while-no-input' returns t. Quitting makes it return nil.
+If BODY finishes, `while-no-input' returns whatever value BODY produced."
+ (declare (debug t) (indent 0))
+ (let ((catch-sym (make-symbol "input")))
+ `(with-local-quit
+ (catch ',catch-sym
+ (let ((throw-on-input ',catch-sym)
+ val)
+ (setq val (or (input-pending-p)
+ (progn ,@body)))
+ (cond
+ ;; When input arrives while throw-on-input is non-nil,
+ ;; kbd_buffer_store_buffered_event sets quit-flag to the
+ ;; value of throw-on-input. If, when BODY finishes,
+ ;; quit-flag still has the same value as throw-on-input, it
+ ;; means BODY never tested quit-flag, and therefore ran to
+ ;; completion even though input did arrive before it
+ ;; finished. In that case, we must manually simulate what
+ ;; 'throw' in process_quit_flag would do, and we must
+ ;; reset quit-flag, because leaving it set will cause us
+ ;; quit to top-level, which has undesirable consequences,
+ ;; such as discarding input etc. We return t in that case
+ ;; because input did arrive during execution of BODY.
+ ((eq quit-flag throw-on-input)
+ (setq quit-flag nil)
+ t)
+ ;; This is for when the user actually QUITs during
+ ;; execution of BODY.
+ (quit-flag
+ nil)
+ (t val)))))))
+
(defun aggressive-indent--indent-if-changed ()
"Indent any region that changed in the last command loop."
(if (not (buffer-live-p (current-buffer)))
@@ -422,7 +459,7 @@ typing, try tweaking this number."
(when (and aggressive-indent-mode aggressive-indent--changed-list)
(save-excursion
(save-selected-window
- (while-no-input
+ (aggressive-indent--while-no-input
(aggressive-indent--proccess-changed-list-and-indent))))
(when (timerp aggressive-indent--idle-timer)
(cancel-timer aggressive-indent--idle-timer)))))
- [elpa] externals/aggressive-indent 9dfde9c 14/43: Don't enable in modes that derive from text-mode, (continued)
- [elpa] externals/aggressive-indent 9dfde9c 14/43: Don't enable in modes that derive from text-mode, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 83bdea4 31/43: Allow other after-change-functions to run, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 81b6f68 34/43: Capture current buffer for idle timer indentation function., Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent d4616c8 22/43: Try a different method of keeping timers from getting out of hand, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent d6778ae 16/43: Add python to excluded modes, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 1f09fe2 28/43: Add sql-interactive-mode, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 1d7185d 17/43: Fix #106 - Define variable: aggressive-indent-region-function, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent cc8da01 20/43: Make the idle timer not be buffer local, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 4994a50 21/43: Revert "Make the idle timer not be buffer local", Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 6549951 23/43: Backport while-no-input from Emacs 27.0 to fix #111, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent c39dbff 24/43: Merge pull request #118 from oscarfv/master,
Stefan Monnier <=
- [elpa] externals/aggressive-indent 3803f24 30/43: Merge pull request #125 from CeleritasCelery/revert, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent c28246b 32/43: Merge pull request #129 from yyoncho/master, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 113389c 42/43: Merge remote-tracking branch 'elpa/externals/aggressive-indent', Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent f920dd5 27/43: Merge pull request #123 from leungbk/patch, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent f611f31 33/43: Cancel the timer when buffer is killed, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 58348d2 36/43: Merge pull request #135 from leuven65/master, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 986df07 40/43: Code actually requires Emacs 24.3, so state that explicitly, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent e1c17ab 38/43: Consistently kill timer safely, avoiding a race condition, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent d5417f4 13/43: Don't indent in ediff-merge buffers, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 5a019ef 15/43: Exclude inf-ruby mode, Stefan Monnier, 2021/07/07