mirror of
https://github.com/masscollaborationlabs/emacs.git
synced 2025-07-05 11:49:37 +00:00
Merge pull request from ffevotte/idle-priority
Add a :idle-priority keyword to change the running order of idle functions GitHub-reference: https://github.com/jwiegley/use-package/issues/98
This commit is contained in:
commit
db9cba9a31
1 changed files with 37 additions and 8 deletions
|
@ -75,7 +75,7 @@
|
||||||
(put 'use-package-with-elapsed-timer 'lisp-indent-function 1)
|
(put 'use-package-with-elapsed-timer 'lisp-indent-function 1)
|
||||||
|
|
||||||
(defvar use-package-idle-timer nil)
|
(defvar use-package-idle-timer nil)
|
||||||
(defvar use-package-idle-forms nil)
|
(defvar use-package-idle-forms (make-hash-table))
|
||||||
|
|
||||||
(defun use-package-start-idle-timer ()
|
(defun use-package-start-idle-timer ()
|
||||||
"Ensure that the idle timer is running."
|
"Ensure that the idle timer is running."
|
||||||
|
@ -85,17 +85,38 @@
|
||||||
3 t
|
3 t
|
||||||
'use-package-idle-eval))))
|
'use-package-idle-eval))))
|
||||||
|
|
||||||
(defun use-package-init-on-idle (form)
|
(defun use-package-init-on-idle (form priority)
|
||||||
"Add a new form to the idle queue."
|
"Add a new form to the idle queue."
|
||||||
(use-package-start-idle-timer)
|
(use-package-start-idle-timer)
|
||||||
(if use-package-idle-forms
|
(puthash priority
|
||||||
(add-to-list 'use-package-idle-forms
|
(append (gethash priority use-package-idle-forms)
|
||||||
form t)
|
(list form))
|
||||||
(setq use-package-idle-forms (list form))))
|
use-package-idle-forms))
|
||||||
|
|
||||||
|
(defun use-package-idle-priorities ()
|
||||||
|
"Get a list of all priorities in the idle queue.
|
||||||
|
The list is sorted in the order forms should be run."
|
||||||
|
(let ((priorities nil))
|
||||||
|
(maphash (lambda (priority forms)
|
||||||
|
(setq priorities (cons priority priorities)))
|
||||||
|
use-package-idle-forms)
|
||||||
|
(sort priorities '<)))
|
||||||
|
|
||||||
|
(defun use-package-idle-pop ()
|
||||||
|
"Pop the top-priority task from the idle queue.
|
||||||
|
Return nil when the queue is empty."
|
||||||
|
(let* ((priority (car (use-package-idle-priorities)))
|
||||||
|
(forms (gethash priority use-package-idle-forms))
|
||||||
|
(first-form (car forms))
|
||||||
|
(forms-remaining (cdr forms)))
|
||||||
|
(if forms-remaining
|
||||||
|
(puthash priority forms-remaining use-package-idle-forms)
|
||||||
|
(remhash priority use-package-idle-forms))
|
||||||
|
first-form))
|
||||||
|
|
||||||
(defun use-package-idle-eval()
|
(defun use-package-idle-eval()
|
||||||
"Start to eval idle-commands from the idle queue."
|
"Start to eval idle-commands from the idle queue."
|
||||||
(let ((next (pop use-package-idle-forms)))
|
(let ((next (use-package-idle-pop)))
|
||||||
(if next
|
(if next
|
||||||
(progn
|
(progn
|
||||||
(when use-package-verbose
|
(when use-package-verbose
|
||||||
|
@ -130,6 +151,7 @@
|
||||||
:disabled
|
:disabled
|
||||||
:ensure
|
:ensure
|
||||||
:idle
|
:idle
|
||||||
|
:idle-priority
|
||||||
:if
|
:if
|
||||||
:init
|
:init
|
||||||
:interpreter
|
:interpreter
|
||||||
|
@ -233,6 +255,10 @@ For full documentation. please see commentary.
|
||||||
:load-path Add to `load-path' before loading.
|
:load-path Add to `load-path' before loading.
|
||||||
:diminish Support for diminish package (if it's installed).
|
:diminish Support for diminish package (if it's installed).
|
||||||
:idle adds a form to run on an idle timer
|
:idle adds a form to run on an idle timer
|
||||||
|
:idle-priority schedules the :idle form to run with the given
|
||||||
|
priority (lower priorities run first). Default priority
|
||||||
|
is 5; forms with the same priority are run in the order in
|
||||||
|
which they are evaluated.
|
||||||
:ensure loads package using package.el if necessary."
|
:ensure loads package using package.el if necessary."
|
||||||
(use-package-validate-keywords args) ; error if any bad keyword, ignore result
|
(use-package-validate-keywords args) ; error if any bad keyword, ignore result
|
||||||
(let* ((commands (use-package-plist-get args :commands))
|
(let* ((commands (use-package-plist-get args :commands))
|
||||||
|
@ -243,6 +269,7 @@ For full documentation. please see commentary.
|
||||||
(diminish-var (use-package-plist-get-value args :diminish))
|
(diminish-var (use-package-plist-get-value args :diminish))
|
||||||
(defines (use-package-plist-get-value args :defines))
|
(defines (use-package-plist-get-value args :defines))
|
||||||
(idle-body (use-package-plist-get args :idle))
|
(idle-body (use-package-plist-get args :idle))
|
||||||
|
(idle-priority (use-package-plist-get args :idle-priority))
|
||||||
(keybindings-alist (use-package-plist-get-value args :bind))
|
(keybindings-alist (use-package-plist-get-value args :bind))
|
||||||
(mode (use-package-plist-get-value args :mode))
|
(mode (use-package-plist-get-value args :mode))
|
||||||
(mode-alist
|
(mode-alist
|
||||||
|
@ -306,10 +333,12 @@ For full documentation. please see commentary.
|
||||||
|
|
||||||
|
|
||||||
(when idle-body
|
(when idle-body
|
||||||
|
(when (null idle-priority)
|
||||||
|
(setq idle-priority 5))
|
||||||
(setq init-body
|
(setq init-body
|
||||||
`(progn
|
`(progn
|
||||||
(require 'use-package)
|
(require 'use-package)
|
||||||
(use-package-init-on-idle (lambda () ,idle-body))
|
(use-package-init-on-idle (lambda () ,idle-body) ,idle-priority)
|
||||||
,init-body)))
|
,init-body)))
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue