aboutsummaryrefslogtreecommitdiff
path: root/test
AgeCommit message (Collapse)Author
2026-07-21Wire up cache, file watcher, and Unix socket daemonChristopher R. Nelson
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>
2026-07-21Group menu items into per-category submenusChristopher R. Nelson
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>
2026-07-20Add Openbox pipe menu rendererChristopher R. Nelson
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>
2026-07-20Add XDG applications directory scannerChristopher R. Nelson
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>
2026-07-20Add .desktop file parserChristopher R. Nelson
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>