aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoão Távora2017-09-30 10:45:48 +0100
committerJoão Távora2017-10-03 14:18:55 +0100
commit22a7372faba317a3589c49fef912e542f3197f0d (patch)
treee31fee579e586b4596c8c50d1ee4ccdb48114c61
parent91851c3ea05392701ca779961e4fb518635fa5b2 (diff)
downloademacs-22a7372faba317a3589c49fef912e542f3197f0d.tar.gz
emacs-22a7372faba317a3589c49fef912e542f3197f0d.zip
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.
-rw-r--r--lisp/progmodes/flymake.el45
1 files changed, 25 insertions, 20 deletions
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 88a305aa545..1068b3889da 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -101,7 +101,8 @@ See `flymake-error-bitmap' and `flymake-warning-bitmap'."
101 :type 'boolean) 101 :type 'boolean)
102 102
103(defcustom flymake-no-changes-timeout 0.5 103(defcustom flymake-no-changes-timeout 0.5
104 "Time to wait after last change before starting compilation." 104 "Time to wait after last change before automatically checking buffer.
105If nil, never start checking buffer automatically like this."
105 :type 'number) 106 :type 'number)
106 107
107(defcustom flymake-gui-warnings-enabled t 108(defcustom flymake-gui-warnings-enabled t
@@ -147,9 +148,6 @@ See `flymake-error-bitmap' and `flymake-warning-bitmap'."
147(defvar-local flymake-timer nil 148(defvar-local flymake-timer nil
148 "Timer for starting syntax check.") 149 "Timer for starting syntax check.")
149 150
150(defvar-local flymake-last-change-time nil
151 "Time of last buffer change.")
152
153(defvar-local flymake-check-start-time nil 151(defvar-local flymake-check-start-time nil
154 "Time at which syntax check was started.") 152 "Time at which syntax check was started.")
155 153
@@ -491,19 +489,6 @@ associated `flymake-category' return DEFAULT."
491 (overlay-put ov 'flymake t) 489 (overlay-put ov 'flymake t)
492 (overlay-put ov 'flymake--diagnostic diagnostic))) 490 (overlay-put ov 'flymake--diagnostic diagnostic)))
493 491
494(defun flymake-on-timer-event (buffer)
495 "Start a syntax check for buffer BUFFER if necessary."
496 (when (buffer-live-p buffer)
497 (with-current-buffer buffer
498 (when (and (not (flymake-is-running))
499 flymake-last-change-time
500 (> (- (float-time) flymake-last-change-time)
501 flymake-no-changes-timeout))
502
503 (setq flymake-last-change-time nil)
504 (flymake-log :debug "starting syntax check after no changes for some time")
505 (flymake-start)))))
506
507;; Nothing in flymake uses this at all any more, so this is just for 492;; Nothing in flymake uses this at all any more, so this is just for
508;; third-party compatibility. 493;; third-party compatibility.
509(define-obsolete-function-alias 'flymake-display-warning 'message-box "26.1") 494(define-obsolete-function-alias 'flymake-display-warning 'message-box "26.1")
@@ -651,8 +636,6 @@ backends."
651 (add-hook 'after-save-hook 'flymake-after-save-hook nil t) 636 (add-hook 'after-save-hook 'flymake-after-save-hook nil t)
652 (add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook nil t) 637 (add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook nil t)
653 638
654 (setq flymake-timer
655 (run-at-time nil 1 'flymake-on-timer-event (current-buffer)))
656 (setq flymake--diagnostics-table (make-hash-table)) 639 (setq flymake--diagnostics-table (make-hash-table))
657 640
658 (when flymake-start-syntax-check-on-find-file 641 (when flymake-start-syntax-check-on-find-file
@@ -671,6 +654,28 @@ backends."
671 (cancel-timer flymake-timer) 654 (cancel-timer flymake-timer)
672 (setq flymake-timer nil))))) 655 (setq flymake-timer nil)))))
673 656
657(defun flymake--schedule-timer-maybe ()
658 "(Re)schedule an idle timer for checking the buffer.
659Do it only if `flymake-no-changes-timeout' is non-nil."
660 (when flymake-timer (cancel-timer flymake-timer))
661 (when flymake-no-changes-timeout
662 (setq
663 flymake-timer
664 (run-with-idle-timer
665 (seconds-to-time flymake-no-changes-timeout)
666 nil
667 (lambda (buffer)
668 (when (buffer-live-p buffer)
669 (with-current-buffer buffer
670 (when (and flymake-mode
671 flymake-no-changes-timeout)
672 (flymake-log
673 :debug "starting syntax check after idle for %s seconds"
674 flymake-no-changes-timeout)
675 (flymake-start))
676 (setq flymake-timer nil))))
677 (current-buffer)))))
678
674;;;###autoload 679;;;###autoload
675(defun flymake-mode-on () 680(defun flymake-mode-on ()
676 "Turn flymake mode on." 681 "Turn flymake mode on."
@@ -690,7 +695,7 @@ backends."
690 (when (and flymake-start-syntax-check-on-newline (equal new-text "\n")) 695 (when (and flymake-start-syntax-check-on-newline (equal new-text "\n"))
691 (flymake-log :debug "starting syntax check as new-line has been seen") 696 (flymake-log :debug "starting syntax check as new-line has been seen")
692 (flymake-start 'deferred)) 697 (flymake-start 'deferred))
693 (setq flymake-last-change-time (float-time)))) 698 (flymake--schedule-timer-maybe)))
694 699
695(defun flymake-after-save-hook () 700(defun flymake-after-save-hook ()
696 (when flymake-mode 701 (when flymake-mode