emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-26 22a7372 31/39: Flymake uses proper idle timers


From: João Távora
Subject: [Emacs-diffs] emacs-26 22a7372 31/39: Flymake uses proper idle timers
Date: Tue, 3 Oct 2017 10:04:53 -0400 (EDT)

branch: emacs-26
commit 22a7372faba317a3589c49fef912e542f3197f0d
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    Flymake uses proper idle timers
    
    Also, flymake-no-changes-timeout can be set to nil to disable
    automatic periodic checks.  But even in that situation the idle timer
    still runs at a reduced rate to detect changes in the variable and
    revert that decision.
    
    * lisp/progmodes/flymake.el (flymake-no-changes-timeout): Improve doc.
    (flymake-last-change-time): Delete.
    (flymake--schedule-timer-maybe): New helper.
    (flymake-after-change-function): Use it.
    (flymake-on-timer-event): Delete
    (flymake-mode): Don't scheduler timer.
---
 lisp/progmodes/flymake.el | 45 +++++++++++++++++++++++++--------------------
 1 file changed, 25 insertions(+), 20 deletions(-)

diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 88a305a..1068b38 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -101,7 +101,8 @@ See `flymake-error-bitmap' and `flymake-warning-bitmap'."
   :type 'boolean)
 
 (defcustom flymake-no-changes-timeout 0.5
-  "Time to wait after last change before starting compilation."
+  "Time to wait after last change before automatically checking buffer.
+If nil, never start checking buffer automatically like this."
   :type 'number)
 
 (defcustom flymake-gui-warnings-enabled t
@@ -147,9 +148,6 @@ See `flymake-error-bitmap' and `flymake-warning-bitmap'."
 (defvar-local flymake-timer nil
   "Timer for starting syntax check.")
 
-(defvar-local flymake-last-change-time nil
-  "Time of last buffer change.")
-
 (defvar-local flymake-check-start-time nil
   "Time at which syntax check was started.")
 
@@ -491,19 +489,6 @@ associated `flymake-category' return DEFAULT."
     (overlay-put ov 'flymake t)
     (overlay-put ov 'flymake--diagnostic diagnostic)))
 
-(defun flymake-on-timer-event (buffer)
-  "Start a syntax check for buffer BUFFER if necessary."
-  (when (buffer-live-p buffer)
-    (with-current-buffer buffer
-      (when (and (not (flymake-is-running))
-                flymake-last-change-time
-                (> (- (float-time) flymake-last-change-time)
-                    flymake-no-changes-timeout))
-
-       (setq flymake-last-change-time nil)
-       (flymake-log :debug "starting syntax check after no changes for some 
time")
-       (flymake-start)))))
-
 ;; Nothing in flymake uses this at all any more, so this is just for
 ;; third-party compatibility.
 (define-obsolete-function-alias 'flymake-display-warning 'message-box "26.1")
@@ -651,8 +636,6 @@ backends."
       (add-hook 'after-save-hook 'flymake-after-save-hook nil t)
       (add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook nil t)
 
-      (setq flymake-timer
-            (run-at-time nil 1 'flymake-on-timer-event (current-buffer)))
       (setq flymake--diagnostics-table (make-hash-table))
 
       (when flymake-start-syntax-check-on-find-file
@@ -671,6 +654,28 @@ backends."
       (cancel-timer flymake-timer)
       (setq flymake-timer nil)))))
 
+(defun flymake--schedule-timer-maybe ()
+  "(Re)schedule an idle timer for checking the buffer.
+Do it only if `flymake-no-changes-timeout' is non-nil."
+  (when flymake-timer (cancel-timer flymake-timer))
+  (when flymake-no-changes-timeout
+    (setq
+     flymake-timer
+     (run-with-idle-timer
+      (seconds-to-time flymake-no-changes-timeout)
+      nil
+      (lambda (buffer)
+        (when (buffer-live-p buffer)
+          (with-current-buffer buffer
+            (when (and flymake-mode
+                       flymake-no-changes-timeout)
+             (flymake-log
+               :debug "starting syntax check after idle for %s seconds"
+               flymake-no-changes-timeout)
+             (flymake-start))
+            (setq flymake-timer nil))))
+      (current-buffer)))))
+
 ;;;###autoload
 (defun flymake-mode-on ()
   "Turn flymake mode on."
@@ -690,7 +695,7 @@ backends."
     (when (and flymake-start-syntax-check-on-newline (equal new-text "\n"))
       (flymake-log :debug "starting syntax check as new-line has been seen")
       (flymake-start 'deferred))
-    (setq flymake-last-change-time (float-time))))
+    (flymake--schedule-timer-maybe)))
 
 (defun flymake-after-save-hook ()
   (when flymake-mode



reply via email to

[Prev in Thread] Current Thread [Next in Thread]