Skip to content

v0.1.0

Choose a tag to compare

@TimboGP TimboGP released this 03 Jul 19:03

First tagged release of animfx.nvim — an event-triggered animation registry that decouples "something happened" from "what visual effect plays." Call sites emit named events; effects register against event names independently. Rides Neovim's built-in User autocmd, so everything stays introspectable via :au User.

Core

  • animfx.on(event, fn) / emit(event, data, opts) / off(id) — register, fire, unregister
  • Effects are pcall-isolated: one throwing effect never blocks the others
  • Multiple effects per event, run in registration order
  • emit(…, { schedule = true }) defers effects to the next tick so a slow effect never blocks the emitting keymap

Effects (animfx.effects)

  • line_flash — full-line highlight flash, with fade = true for a stepped fade-out; extmark-based, no leaks across rapid re-triggers
  • sign_flash — gutter sign, visible even when the line is off-screen
  • cursor_beacon — dependency-free floating pulse (same visual as pulsar/beacon)
  • notify_toast — animated toast via nvim-notify, falls back to vim.notify
  • delegate — wrap any other plugin's function as an effect, with graceful fallback

Combinators (animfx.combinators)

chain, delay, debounce, throttle, only_if, once — compose the function(data) effect shape freely.

Introspection

  • list() / history() and :AnimfxList, :AnimfxEmit <Event>, :AnimfxHistory
  • :checkhealth animfx

Cross-layer bridge (animfx.remote)

Let external processes emit into a running Neovim over its RPC socket. Ready-to-wire AeroSpace and tmux hook scripts in examples/.

Quality

  • 26 headless tests (make test), CI on Neovim stable + nightly
  • stylua / luacheck config for local dev

Full detail in the README.