[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 38439a4 301/433: Reparse mmm-mode buffer when Emacs is idl
From: |
Dmitry Gutov |
Subject: |
[elpa] master 38439a4 301/433: Reparse mmm-mode buffer when Emacs is idle |
Date: |
Thu, 15 Mar 2018 19:44:24 -0400 (EDT) |
branch: master
commit 38439a4cea8c414159c27235546db68d0e86e796
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>
Reparse mmm-mode buffer when Emacs is idle
---
mmm-region.el | 10 +++++++---
mmm-vars.el | 38 ++++++++++++++++++++++++++++++++++++++
2 files changed, 45 insertions(+), 3 deletions(-)
diff --git a/mmm-region.el b/mmm-region.el
index b3b0c5d..7d94b75 100644
--- a/mmm-region.el
+++ b/mmm-region.el
@@ -592,11 +592,15 @@ different keymaps, syntax tables, local variables, etc.
for submodes."
(defun mmm-add-hooks ()
(if (featurep 'xemacs)
(make-local-hook 'post-command-hook))
- ;; FIXME: Use text properties `point-entered' and `point-left' instead?
- (add-hook 'post-command-hook 'mmm-update-submode-region nil 'local))
+ (add-hook 'post-command-hook 'mmm-update-submode-region nil t)
+ (when mmm-parse-when-idle
+ (add-hook 'pre-command-hook 'mmm-mode-reset-timer nil t)
+ (add-hook 'after-change-functions 'mmm-mode-edit nil t)))
(defun mmm-remove-hooks ()
- (remove-hook 'post-command-hook 'mmm-update-submode-region 'local))
+ (remove-hook 'post-command-hook 'mmm-update-submode-region t)
+ (remove-hook 'pre-command-hook 'mmm-mode-reset-timer t)
+ (remove-hook 'after-change-functions 'mmm-mode-edit t))
;;}}}
;;{{{ Local Variables
diff --git a/mmm-vars.el b/mmm-vars.el
index 6f171c6..f1023b6 100644
--- a/mmm-vars.el
+++ b/mmm-vars.el
@@ -784,6 +784,44 @@ parent buffer. In general, this has been found to cause
more problems
than it solves, but some modes require it.")
;;}}}
+;;{{{ Idle Parsing
+
+(defcustom mmm-parse-when-idle nil
+ "Non-nil to automatically reparse the buffer when it has some
+ modifications and Emacs has been idle for `mmm-idle-timer-delay'."
+ :type 'boolean
+ :group 'mmm)
+
+(defcustom mmm-idle-timer-delay 0.2
+ "Delay in secs before re-parsing after user makes changes."
+ :type 'number
+ :group 'mmm)
+(make-variable-buffer-local 'mmm-idle-timer-delay)
+
+(defvar mmm-mode-parse-timer nil "Private variable.")
+(make-variable-buffer-local 'mmm-mode-parse-timer)
+(defvar mmm-mode-buffer-dirty nil "Private variable.")
+(make-variable-buffer-local 'mmm-mode-buffer-dirty)
+
+(defun mmm-mode-edit (beg end len)
+ (setq mmm-mode-buffer-dirty t)
+ (mmm-mode-reset-timer))
+
+(defun mmm-mode-reset-timer ()
+ (when mmm-mode-parse-timer
+ (cancel-timer mmm-mode-parse-timer))
+ (setq mmm-mode-parse-timer
+ (run-with-idle-timer mmm-idle-timer-delay nil
+ #'mmm-mode-idle-reparse (current-buffer))))
+
+(defun mmm-mode-idle-reparse (buffer)
+ (with-current-buffer buffer
+ (when mmm-mode-buffer-dirty
+ (mmm-apply-all)
+ (setq mmm-mode-buffer-dirty nil)
+ (setq mmm-mode-parse-timer nil))))
+
+;;}}}
;; NON-USER VARIABLES
;;{{{ Mode Variable
- [elpa] master 2995771 420/433: Update copyright dates again, (continued)
- [elpa] master 2995771 420/433: Update copyright dates again, Dmitry Gutov, 2018/03/15
- [elpa] master 3f771f7 419/433: Use cl-lib instead of cl, Dmitry Gutov, 2018/03/15
- [elpa] master 912f3bd 335/433: Use syntax-propertize-function set in submodes, Dmitry Gutov, 2018/03/15
- [elpa] master c9dea38 363/433: Update the FAQ, Dmitry Gutov, 2018/03/15
- [elpa] master 628e1dc 380/433: Merge pull request #31 from tom-tan/add-autoloads, Dmitry Gutov, 2018/03/15
- [elpa] master 01b5cd9 338/433: * mmm-apply-all: flush syntax cache, Dmitry Gutov, 2018/03/15
- [elpa] master e257808 413/433: Copy mmm-indent-line body into mmm-indent-narrowed, Dmitry Gutov, 2018/03/15
- [elpa] master 3895201 294/433: Merge pull request #3 from dgutov/shortcuts-fix, Dmitry Gutov, 2018/03/15
- [elpa] master de643c9 409/433: Mode transition hooks, Dmitry Gutov, 2018/03/15
- [elpa] master 395317c 332/433: * mmm-make-region: Don't call mmm-save-changed-local-variables, or set the, Dmitry Gutov, 2018/03/15
- [elpa] master 38439a4 301/433: Reparse mmm-mode buffer when Emacs is idle,
Dmitry Gutov <=
- [elpa] master c76b13e 418/433: Add some NEWS entries, Dmitry Gutov, 2018/03/15
- [elpa] master a4deb1b 432/433: Merge commit 'cb905bdc728fb3b5f9fdff8836d71b62bd717eab' from mmm-mode, Dmitry Gutov, 2018/03/15
- [elpa] master aeb1c33 430/433: Add 'packages/mmm-mode/' from commit '00c10a69c8c90178530219730ccea14ab634a74e', Dmitry Gutov, 2018/03/15