UNPKG

trainingproject

Version:

A module to teach you how to module.

155 lines (123 loc) 3.82 kB
# simple-terminal-menu [terminal-menu](github.com/substack/terminal-menu) does a good job for starting a menu but it is a bit tedious to set-up reliably for process.stdin / process.stdout and also for the use with double width characters. For simply taking charge of the power this terminal menu offers a few things: ## Automatically connects to process.stdin/stdout You don't have to do that, it will just work :) ## Markers `.add` gets an new signature ```JavaScript .add(<label>[, <marker>][, <cb>]) ``` With this you can add entries that have a right-aligned marker text shown. ## Menu Items You can also use `.addItem` to use objects to add menu items. ```JavaScript .addItem({ label: "<label>", marker: "<marker>", handler: "<cb>" }) ``` ## Separators Just use ```.writeSeparator()``` to create a separator line. ## Automatic truncating of entries If an entry exceeds the width of the menu it will be truncated with `opts.truncator` or `...` ## Writing of text Similar like `.add` it supports `.writeLine` that allows you to write a text that is both left & right aligned. ```JavaScript .writeLine(<left>[, <right>]) ``` ## tty Tests If the terminal doesn't support TTY the will just return `null`! ## Comfort functions To write a nice title and subtitle the comfort functions `.writeTitle` and `.writeSubtitle` exist. ## Factory If you have several menus that need to look alike, you can use the factory. It is available via `require(simple-terminal-menu/factory)`. # Installation & Usage Install it using npm ``` npm install simple-terminal-menu --save ``` And then create a menu it in your code using ```JavaScript var createMenu = require('../simple-terminal-menu') function showSelection(label, marker) { console.log("label: " + label + "; marker: " + marker + ";") } function mainMenu() { var menu = createMenu({ // settings passed through to terminal-menu x: 3, y: 2 }) menu.writeLine("My Menu", "(tm)") menu.writeSeparator() menu.add("A", "[selected]", showSelection) menu.add("B", showSelection) menu.writeSeparator() menu.add("open submenu", subMenu) menu.add("exit", menu.close) } function subMenu() { var menu = createMenu() menu.writeLine("SubMenu") menu.writeSeparator() menu.add("C", "[selected]", showSelection) menu.add("D", showSelection) menu.writeSeparator() menu.add("cancel", mainMenu) menu.add("niceTitle", nicelyTitledMenu) menu.add("exit", menu.close) } function nicelyTitledMenu() { var menu = createMenu(); menu.writeTitle("Awesome window") menu.writeSubtitle("A little more colorful") menu.writeSeperator() menu.add("cancel", subMenu) menu.add("factoryA", factoryMenuA) menu.add("exit", menu.close) } // Options for the menu when created through the factory var factoryMenuOptions = {} // Can be empty! the factory uses some sensible defaults! // Defaults for creating menu with the factory var defaultFactoryOptions = { title: "Factory Title", // you could also specify `subtitle:`, menu & extras are not available. } var factory = require('simple-terminal-menu/factory')(factoryMenuOptions, defaultFactoryOptions); function factoryMenuA() { factory.create({ subtitle: "factory-a", menu: [{ label: "E", handler: showSelection }, { label: "F", handler: showSelection }], extras: [{ label: "factoryB", handler: factoryMenuB },{ label: "cancel", handler: nicelyTitledMenu }] }) } function factoryMenuB() { factory.create({ subtitle: "factory-b", menu: [{ label: "G", handler: showSelection }], extras: [{ label: "factoryA", handler: factoryMenuA },{ label: "cancel", handler: nicelyTitledMenu }] } mainMenu() ```