diff options
| author | João Távora | 2017-09-30 10:45:48 +0100 |
|---|---|---|
| committer | João Távora | 2017-10-03 14:18:55 +0100 |
| commit | 22a7372faba317a3589c49fef912e542f3197f0d (patch) | |
| tree | e31fee579e586b4596c8c50d1ee4ccdb48114c61 | |
| parent | 91851c3ea05392701ca779961e4fb518635fa5b2 (diff) | |
| download | emacs-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.el | 45 |
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. |
| 105 | If 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. | ||
| 659 | Do 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 |