_            _    _        _         _
      /\ \         /\ \ /\ \     /\_\      / /\
      \_\ \       /  \ \\ \ \   / / /     / /  \
      /\__ \     / /\ \ \\ \ \_/ / /     / / /\ \__
     / /_ \ \   / / /\ \ \\ \___/ /     / / /\ \___\
    / / /\ \ \ / / /  \ \_\\ \ \_/      \ \ \ \/___/
   / / /  \/_// / /   / / / \ \ \        \ \ \
  / / /      / / /   / / /   \ \ \   _    \ \ \
 / / /      / / /___/ / /     \ \ \ /_/\__/ / /
/_/ /      / / /____\/ /       \ \_\\ \/___/ /
\_\/       \/_________/         \/_/ \_____\/
sbcl-nhooks 1.2.2
Dependencies: sbcl-serapeum@0.0.0-12.c08442a
Channel: guix
Location: gnu/packages/lisp-xyz.scm (gnu packages lisp-xyz)
Home page: https://github.com/atlas-engineer/nhooks
Licenses: Expat
Synopsis: Hook facility for Common Lisp
Description:

This package holds an enhanced implementation of hooks (extension points). It works similarly to Emacs hooks with crucial improvements:

  • If the compiler allows it (such as SBCL), type-checking is performed at compile-time and at run-time when adding handlers to a hook.

  • On failure, multiple restarts are offered, such as disabling the offending handler or simply continuing to the next function.

  • The hook handler execution order and combination can be customized.

  • Anonymous functions (lambdas) can be added to hooks as handler objects. When inspecting hooks, readable names are thus exposed instead of lambda blackboxes. Handlers are compared through their names (through the mandatory name slot). A hook can not contain multiple handlers with the same name.

  • A special provision is taken for “setters”, handlers that are meant to set a given place to a given values. Such handler objects can be compared and identified uniquely.

Total results: 1