| Age | Commit message (Collapse) | Author |
|
Drop the "er-" prefix throughout: module/atom names, filenames,
socket paths, and docs. It was an implementation detail, not part
of the app's identity.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
|
Adds a gen_server cache holding the rendered menu, an fs/inotify-based
watcher that debounces changes and invalidates it, a Unix domain
socket serving the cached binary, and the escript client Openbox
invokes (with an inline render fallback if the daemon isn't running).
Also documents local deployment (systemd user unit, Openbox menu.xml
wiring) in the README.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
|
Parse the Categories key from .desktop files and have the renderer
emit one <menu> submenu per category (via xmerl), with items sorted
within each; entries in multiple categories appear in each submenu,
and uncategorized entries fall into a catch-all "Other" submenu.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
|
render/1 turns a list of #desktop_entry{} into the XML Openbox expects
on stdout from a pipe menu: hidden entries dropped, remaining ones
sorted case-insensitively by name, each as an <item> wrapping an
Execute action with its command and (if present) icon attribute.
XML-escapes label/command/icon values.
Icon values are passed through as-is (theme icon names, not resolved
paths) -- icon theme resolution is left for later, separate from
rendering. Service wiring (scan -> parse -> render, with caching and
invalidation) is also left for later.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
|
Resolves the ordered list of "applications" directories to search per
the XDG Base Directory Specification: XDG_DATA_HOME (default
~/.local/share) first, then XDG_DATA_DIRS (default /usr/local/share,
/usr/share). Each variable falls back to its default independently
when unset or empty, so a Flatpak-style XDG_DATA_DIRS override is
honored in place of the default rather than merged with it.
find_desktop_files/0,1 recursively collects .desktop files from those
dirs, skipping ones that don't exist.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
|
Parses the [Desktop Entry] group of a .desktop file into a
#desktop_entry{} record with name, exec, icon, and a derived hidden
flag (set by NoDisplay, Hidden, or a non-Application Type). Exec field
codes (%f, %u, etc.) are stripped since a pipemenu has no file/URI
context to expand them with.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|