mirror of
https://github.com/laurent22/joplin.git
synced 2025-01-11 18:24:43 +02:00
Handle prompt
This commit is contained in:
parent
824b385e83
commit
6384fe3b7d
@ -120,6 +120,7 @@ class AppGui {
|
|||||||
setupShortcuts() {
|
setupShortcuts() {
|
||||||
const shortcuts = {};
|
const shortcuts = {};
|
||||||
|
|
||||||
|
shortcuts['DELETE'] = 'rm $n';
|
||||||
shortcuts['t'] = 'todo toggle $n';
|
shortcuts['t'] = 'todo toggle $n';
|
||||||
shortcuts['c'] = () => { this.widget('console').focus(); };
|
shortcuts['c'] = () => { this.widget('console').focus(); };
|
||||||
shortcuts[' '] = 'edit $n';
|
shortcuts[' '] = 'edit $n';
|
||||||
@ -250,7 +251,6 @@ class AppGui {
|
|||||||
term.grabInput();
|
term.grabInput();
|
||||||
|
|
||||||
term.on('key', async (name, matches, data) => {
|
term.on('key', async (name, matches, data) => {
|
||||||
|
|
||||||
if (name === 'CTRL_C' ) {
|
if (name === 'CTRL_C' ) {
|
||||||
termutils.showCursor(term);
|
termutils.showCursor(term);
|
||||||
term.fullscreen(false);
|
term.fullscreen(false);
|
||||||
|
@ -251,6 +251,33 @@ class Application {
|
|||||||
return this.eventEmitter_.on(eventName, callback);
|
return this.eventEmitter_.on(eventName, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setupCommand(cmd) {
|
||||||
|
const consoleWidget = this.gui_.widget('console');
|
||||||
|
|
||||||
|
cmd.setStdout((...object) => {
|
||||||
|
for (let i = 0; i < object.length; i++) {
|
||||||
|
consoleWidget.bufferPush(object[i]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
cmd.setPrompt(async (message, options) => {
|
||||||
|
consoleWidget.focus();
|
||||||
|
|
||||||
|
if (options.type == 'boolean') {
|
||||||
|
message += ' (' + options.answers.join('/') + ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
var answer = await consoleWidget.waitForResult(message + ' ');
|
||||||
|
|
||||||
|
if (options.type == 'boolean') {
|
||||||
|
if (answer === null) return false;
|
||||||
|
return answer === '' || answer.toLowerCase() == options.answers[0].toLowerCase();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return cmd;
|
||||||
|
}
|
||||||
|
|
||||||
commands() {
|
commands() {
|
||||||
if (this.allCommandsLoaded_) return this.commands_;
|
if (this.allCommandsLoaded_) return this.commands_;
|
||||||
|
|
||||||
@ -262,11 +289,7 @@ class Application {
|
|||||||
let CommandClass = require('./' + path);
|
let CommandClass = require('./' + path);
|
||||||
let cmd = new CommandClass();
|
let cmd = new CommandClass();
|
||||||
if (!cmd.enabled()) return;
|
if (!cmd.enabled()) return;
|
||||||
|
cmd = this.setupCommand(cmd);
|
||||||
cmd.setStdout((...object) => {
|
|
||||||
this.commandStdout(...object);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.commands_[cmd.name()] = cmd;
|
this.commands_[cmd.name()] = cmd;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -285,13 +308,6 @@ class Application {
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
commandStdout(...object) {
|
|
||||||
const consoleWidget = this.gui_.widget('console');
|
|
||||||
for (let i = 0; i < object.length; i++) {
|
|
||||||
consoleWidget.bufferPush(object[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async commandMetadata() {
|
async commandMetadata() {
|
||||||
if (this.commandMetadata_) return this.commandMetadata_;
|
if (this.commandMetadata_) return this.commandMetadata_;
|
||||||
|
|
||||||
@ -333,12 +349,7 @@ class Application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let cmd = new CommandClass();
|
let cmd = new CommandClass();
|
||||||
cmd.buffer_ = [];
|
cmd = this.setupCommand(cmd);
|
||||||
|
|
||||||
cmd.setStdout((...object) => {
|
|
||||||
this.commandStdout(...object);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.commands_[name] = cmd;
|
this.commands_[name] = cmd;
|
||||||
return this.commands_[name];
|
return this.commands_[name];
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
|
import { _ } from 'lib/locale.js';
|
||||||
|
|
||||||
class BaseCommand {
|
class BaseCommand {
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.stdout_ = null;
|
this.stdout_ = null;
|
||||||
|
this.prompt_ = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
@ -51,6 +54,18 @@ class BaseCommand {
|
|||||||
if (this.stdout_) this.stdout_(...object);
|
if (this.stdout_) this.stdout_(...object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setPrompt(fn) {
|
||||||
|
this.prompt_ = fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
async prompt(message, options = null) {
|
||||||
|
if (!this.prompt_) throw new Error('Prompt is undefined');
|
||||||
|
if (!options) options = {};
|
||||||
|
if (!options.type) options.type = 'boolean';
|
||||||
|
if (!options.answers) options.answers = [_('Y'), _('n')];
|
||||||
|
return await this.prompt_(message, options);
|
||||||
|
}
|
||||||
|
|
||||||
metadata() {
|
metadata() {
|
||||||
return {
|
return {
|
||||||
name: this.name(),
|
name: this.name(),
|
||||||
|
@ -7,6 +7,9 @@ import { Note } from 'lib/models/note.js';
|
|||||||
import { BaseModel } from 'lib/base-model.js';
|
import { BaseModel } from 'lib/base-model.js';
|
||||||
import { cliUtils } from './cli-utils.js';
|
import { cliUtils } from './cli-utils.js';
|
||||||
|
|
||||||
|
|
||||||
|
import { reg } from 'lib/registry.js';
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
@ -39,10 +42,16 @@ class Command extends BaseCommand {
|
|||||||
|
|
||||||
const notes = await app().loadItems(BaseModel.TYPE_NOTE, pattern);
|
const notes = await app().loadItems(BaseModel.TYPE_NOTE, pattern);
|
||||||
if (!notes.length) throw new Error(_('Cannot find "%s".', pattern));
|
if (!notes.length) throw new Error(_('Cannot find "%s".', pattern));
|
||||||
const ok = force ? true : await cliUtils.promptConfirm(_('%d notes match this pattern. Delete them?', notes.length));
|
|
||||||
if (!ok) return;
|
const ok = force ? true : await this.prompt(_('%d notes match this pattern. Delete them?', notes.length));
|
||||||
let ids = notes.map((n) => n.id);
|
|
||||||
await Note.batchDelete(ids);
|
|
||||||
|
reg.logger().info('OK', ok);
|
||||||
|
|
||||||
|
// const ok = force ? true : await cliUtils.promptConfirm(_('%d notes match this pattern. Delete them?', notes.length));
|
||||||
|
// if (!ok) return;
|
||||||
|
// let ids = notes.map((n) => n.id);
|
||||||
|
// await Note.batchDelete(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -85,6 +85,12 @@ msgid ""
|
|||||||
"source '%s'"
|
"source '%s'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Y"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Missing required argument: %s"
|
msgid "Missing required argument: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -100,12 +106,6 @@ msgstr ""
|
|||||||
msgid "Invalid answer: %s"
|
msgid "Invalid answer: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Y"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Displays the given note."
|
msgid "Displays the given note."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -88,6 +88,12 @@ msgid ""
|
|||||||
"source '%s'"
|
"source '%s'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Y"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Missing required argument: %s"
|
msgid "Missing required argument: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -103,12 +109,6 @@ msgstr ""
|
|||||||
msgid "Invalid answer: %s"
|
msgid "Invalid answer: %s"
|
||||||
msgstr "Commande invalide : \"%s\""
|
msgstr "Commande invalide : \"%s\""
|
||||||
|
|
||||||
msgid "Y"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Displays the given note."
|
msgid "Displays the given note."
|
||||||
msgstr "Affiche la note."
|
msgstr "Affiche la note."
|
||||||
|
|
||||||
|
@ -85,6 +85,12 @@ msgid ""
|
|||||||
"source '%s'"
|
"source '%s'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Y"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Missing required argument: %s"
|
msgid "Missing required argument: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -100,12 +106,6 @@ msgstr ""
|
|||||||
msgid "Invalid answer: %s"
|
msgid "Invalid answer: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Y"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Displays the given note."
|
msgid "Displays the given note."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user