``` [1]: . . .-- . . . . [2]: |\ /| |-- |\| | | [3]: ' ' ' '-- ' ' '-' [0]: AGPLv3 2025 ``` ## Build ```sh make ``` menu(1) is a single Rust source file with no dependencies, and can be compiled on its own with rustc(1). It's recommended to run the test program: ```sh make test # or test using menu(1)'s shebang ./test ``` ## Usage ``` menu [file] ``` If `file` is given, menu(1) reads its menu entries from `file` instead of standard input. ## Menu format Input is ignored until menu(1) reads two consecutive newlines (an empty line). This is to provide room for commentary or a shebang (`#!/usr/bin/env menu` is recommended). Following the two newlines, menu(1) will interpret input as a stream of menu entries. A menu entry begins with its text section, which is the section printed to display the menu option. Currently, the text section ends with a newline only, but in later versions the text section will be able to be extended across multiple lines if they are indented - so a newline followed by a character that isn't the horizontal tab. The attributes section follows the text section. The attributes section ends with a single newline. Text including and following a hash in the attributes section will be ignoroed. The command section follows the attributes section. The command section is run as a single argument following the invocation `$ sh -c`, like the C standard library's system(3). Each line in the command section is preceded by a horizontal tab, which is removed from the argument; if a line in the command section is not preceded by a tab, the omission is considered a syntax error (a "naked line") and menu(1) exits unsuccessfully. The command section ends with two consecutive newlines.
Languages
Rust
95.3%
Makefile
4.7%