Documentation

Commentary

timeout is a small Elisp library that provides higher order functions to
throttle or debounce Elisp functions.  This is useful for corralling
over-eager code that:
(i) is slow and blocks Emacs, and
(ii) does not provide customization options to limit how often it runs,

To throttle a function FUNC to run no more than once every 2 seconds, run
(timeout-throttle 'func 2.0)

To debounce a function FUNC to run after a delay of 0.3 seconds, run
(timeout-debounce 'func 0.3)

To create a new throttled or debounced version of FUNC instead, run

(timeout-throttled-func 'func 2.0)
(timeout-debounced-func 'func 0.3)

You can bind this via fset or defalias:

(defalias 'throttled-func (timeout-throttled-func 'func 2.0))
(fset     'throttled-func (timeout-throttled-func 'func 2.0))

Dynamic duration is supported by passing a symbol or function instead of
a number:

(defvar my-timeout 1.5)
(timeout-throttle 'func 'my-timeout)  ; uses value of my-timeout
(timeout-throttle 'func (lambda () (if busy-p 0.1 2.0)))  ; conditional

The interactive spec and documentation of FUNC is carried over to the new
function.

Requires

Dependencies

Consumers

Reverse Dependencies