Skip to content

v1.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 27 Jul 14:35
c696789

Release Notes v1.3.0

This release adds in-plugin-manager keybind conflict resolution, a comprehensive keybinding overview, configurable keybindings with a dedicated editor, undo support, an auto-save plugin, test improvements, and numerous UI/UX refinements.

Added

  • Added undo support (u) — undo the last destructive action (trash, delete, rename) with a single keystroke.
  • Added configurable keybindings — press Ctrl+K to open an interactive keybinding editor that lists all registered keybindings (core and plugin), showing what each key does. Changes are saved with Ctrl+S and discarded with Ctrl+D.
  • Added auto-save plugin (s) — a note-mode plugin that automatically saves notes at a configurable interval.
  • Added in-plugin-manager keybind conflict resolution — when a plugin shows [key conflict], pressing ENTER opens an interactive flow to assign a new keybind. Press any key to assign, ESC to cancel. If the key is taken, a warning is shown. The k shortcut works on any plugin to change its keybind.
  • Added keybind override persistence — custom keybind overrides are saved to ~/.local/share/blob/plugin_keybinds (format: plugin_name=KEY) and survive restarts.
  • Added Ctrl+O expanded help view showing all registered keybinds in a sectioned layout (Core shortcuts, Ctrl shortcuts, and Plugin keybinds).
  • Added Ctrl+M to expand the compact help view — shows up to 4 plugin keybinds plus core keys by default, then reveals all on demand.
  • Added test improvements — new unit tests for undo functionality, keybinding resolution, and theme loading.
  • Added get_plugin_keybind_override() and set_plugin_keybind_override() functions following the existing disabled_plugins persistence pattern.
  • Added render_plugin_keybinds_help() — a helper that scans addons and renders all plugin keybindings for the expanded help view.

Changed

  • Plugin manager UI — plugin name alignment is now dynamic: the width adapts to the longest plugin name (capped at 25 chars), preventing long names from breaking the layout.
  • Plugin status display — long plugin names no longer misalign the status column; alignment is computed per-render.
  • Keybinding help — now shows keybindings line by line with a maximum of 4 plugin lines (plus core keybinds) in the collapsed view. Ctrl+M toggles to the full expanded view.
  • Plugin keybind conflict detectionmark_plugin_keybind_conflicts() now accepts the AppConfig pointer and loads per-plugin keybind overrides from disk before checking for conflicts.
  • Reserved keys updatedk added to the reserved core key set (used for "set keybind" in the plugin manager).
  • Plugin action flowENTER on a conflicted plugin now offers to change the keybind instead of blocking the action.
  • All three call sites of mark_plugin_keybind_conflicts() updated to pass the config pointer (including the test harness).
  • render_plugin_ui help text changed to [k] set keybind [ENTER] compile/run [u] uninstall for clarity.
  • Format string bug fixed: %%%%s>%%s> in the dynamic plugin name format builder.
  • Version bumped from 1.2.1 to 1.3.0.

Removed

  • Removed hardcoded %-15s plugin name width in favor of dynamic computation.

Notes

  • The in-manager keybind conflict resolution is a core feature; plugin developers no longer need to ship a separate keybind helper plugin, but it is still recommended to assign your plugin to a keybind that has not been used, if possible.
  • Plugin keybinding overrides are persisted to <data_dir>/plugin_keybinds with the format name=K (one per line). This is managed automatically by the core.
  • The get_plugin_keybind_override() and set_plugin_keybind_override() functions are internal to main.c and follow the same conventions as set_plugin_disabled_on_disk().
  • Test writers should pass NULL for the cfg parameter when keybind override testing is not needed (handled safely inside mark_plugin_keybind_conflicts()).