Documentation

Commentary

This is both a library and an end-user package.

For the end-user, it provides a simple way to periodically run a subset of
`kill-emacs-hook', ensuring that state variables are written to disk long
before something happens to your Emacs session.

An example setup looks like:

    (require 'eager-state)
    (setq eager-state-idle-delay 10)         ; Default 15
    (setq eager-state-periodic-delay 100)    ; Default 60
    (setq eager-state-faster-shutdown t)     ; Default nil
    (setq eager-state-kill-emacs-hook-subset ; Default nil
          '(bookmark-exit-hook-internal
            savehist-autosave
            transient-maybe-save-history
            org-clock-save
            org-id-locations-save
            save-place-kill-emacs-hook
            recentf-save-list
            recentf-cleanup
            doom-cleanup-project-cache-h
            doom-persist-scratch-buffers-h))

Note how the above setting for `eager-state-kill-emacs-hook-subset' is a
loose selection of possible real-world values of `kill-emacs-hook'.

Loading the package with (require 'eager-state) enables a global minor mode
`eager-state-mode', which manages a timer that periodically tries to run
the above listed functions.

You can add any symbol to the list, even if it is not yet defined as a
function.  A given symbol will only be funcalled if it is present both in
that list, and in `kill-emacs-hook', at call time.

To add new functions that you don't want on `kill-emacs-hook', add
them to `eager-state-sync-hook' instead.

For library developers:

You can depend on this library and add your state-saving functions to
`eager-state-sync-hook'.  They'll run alongside the rest of them, in
accordance with user preferences.

Let's say your function is called `foo-write-some-data-to-disk'.
Then do this:

(require 'eager-state)
(add-hook 'eager-state-sync-hook #'foo-write-some-data-to-disk)

Requires

Dependencies

Consumers

Reverse Dependencies

No reverse dependencies recorded.