1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-27 10:32:58 +02:00
joplin/packages/app-cli/app/command-help.js

97 lines
3.1 KiB
JavaScript
Raw Normal View History

const BaseCommand = require('./base-command').default;
const { app } = require('./app.js');
const { renderCommandHelp } = require('./help-utils.js');
const { _ } = require('@joplin/lib/locale');
const { cliUtils } = require('./cli-utils.js');
2017-08-04 19:11:10 +02:00
class Command extends BaseCommand {
usage() {
return 'help [command]';
}
description() {
return _('Displays usage information.');
}
2017-10-29 17:41:30 +02:00
allCommands() {
2017-12-07 20:12:46 +02:00
const commands = app().commands(app().uiType());
const output = [];
for (const n in commands) {
2017-10-29 17:41:30 +02:00
if (!commands.hasOwnProperty(n)) continue;
const command = commands[n];
if (command.hidden()) continue;
if (!command.enabled()) continue;
output.push(command);
}
output.sort((a, b) => (a.name() < b.name() ? -1 : +1));
2017-10-29 17:41:30 +02:00
return output;
}
2017-08-04 19:11:10 +02:00
async action(args) {
2017-10-09 00:34:01 +02:00
const stdoutWidth = app().commandStdoutMaxWidth();
2017-08-04 19:11:10 +02:00
if (args.command === 'shortcuts' || args.command === 'keymap') {
this.stdout(_('For information on how to customise the shortcuts please visit %s', 'https://joplinapp.org/help/apps/terminal#shortcuts'));
2018-02-17 01:17:55 +02:00
this.stdout('');
if (
app()
.gui()
.isDummy()
) {
2017-10-29 17:41:30 +02:00
throw new Error(_('Shortcuts are not available in CLI mode.'));
}
const keymap = app()
.gui()
.keymap();
2017-10-09 00:34:01 +02:00
const rows = [];
2017-10-09 00:34:01 +02:00
for (let i = 0; i < keymap.length; i++) {
const item = keymap[i];
const keys = item.keys.map(k => (k === ' ' ? '(SPACE)' : k));
rows.push([keys.join(', '), item.command]);
2017-10-09 00:34:01 +02:00
}
cliUtils.printArray(this.stdout.bind(this), rows);
2017-10-29 17:41:30 +02:00
} else if (args.command === 'all') {
const commands = this.allCommands();
const output = commands.map(c => renderCommandHelp(c));
2017-10-29 17:41:30 +02:00
this.stdout(output.join('\n\n'));
2017-10-09 00:34:01 +02:00
} else if (args.command) {
const command = app().findCommandByName(args['command']);
if (!command) throw new Error(_('Cannot find "%s".', args.command));
this.stdout(renderCommandHelp(command, stdoutWidth));
} else {
const commandNames = this.allCommands().map(a => a.name());
2017-10-09 00:34:01 +02:00
2017-12-15 09:31:57 +02:00
this.stdout(_('Type `help [command]` for more information about a command; or type `help all` for the complete usage information.'));
this.stdout('');
this.stdout(_('The possible commands are:'));
this.stdout('');
this.stdout(commandNames.join(', '));
this.stdout('');
this.stdout(_('In any command, a note or notebook can be referred to by title or ID, or using the shortcuts `$n` or `$b` for, respectively, the currently selected note or notebook. `$c` can be used to refer to the currently selected item.'));
2017-10-29 22:40:53 +02:00
this.stdout('');
2017-10-31 00:29:17 +02:00
this.stdout(_('To move from one pane to another, press Tab or Shift+Tab.'));
this.stdout(_('Use the arrows and page up/down to scroll the lists and text areas (including this console).'));
this.stdout(_('To maximise/minimise the console, press "tc".'));
this.stdout(_('To enter command line mode, press ":"'));
this.stdout(_('To exit command line mode, press ESCAPE'));
2018-02-17 01:17:55 +02:00
this.stdout(_('For the list of keyboard shortcuts and config options, type `help keymap`'));
2017-10-09 00:34:01 +02:00
}
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
2017-08-04 19:11:10 +02:00
}
}
module.exports = Command;