aboutsummaryrefslogtreecommitdiff
path: root/src/background/controllers/command.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/background/controllers/command.js')
-rw-r--r--src/background/controllers/command.js94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/background/controllers/command.js b/src/background/controllers/command.js
new file mode 100644
index 0000000..befab42
--- /dev/null
+++ b/src/background/controllers/command.js
@@ -0,0 +1,94 @@
+import CompletionsInteractor from '../usecases/completions';
+import CommandInteractor from '../usecases/command';
+import Completions from '../domains/completions';
+
+export default class CommandController {
+ constructor() {
+ this.completionsInteractor = new CompletionsInteractor();
+ this.commandIndicator = new CommandInteractor();
+ }
+
+ getCompletions(line) {
+ let trimmed = line.trimStart();
+ let words = trimmed.split(/ +/);
+ let name = words[0];
+ if (words.length === 1) {
+ return this.completionsInteractor.queryConsoleCommand(name);
+ }
+ let keywords = trimmed.slice(name.length).trimStart();
+ switch (words[0]) {
+ case 'o':
+ case 'open':
+ case 't':
+ case 'tabopen':
+ case 'w':
+ case 'winopen':
+ return this.completionsInteractor.queryOpen(name, keywords);
+ case 'b':
+ case 'buffer':
+ return this.completionsInteractor.queryBuffer(name, keywords);
+ case 'bd':
+ case 'bdel':
+ case 'bdelete':
+ case 'bdeletes':
+ return this.completionsInteractor.queryBdelete(name, keywords);
+ case 'bd!':
+ case 'bdel!':
+ case 'bdelete!':
+ case 'bdeletes!':
+ return this.completionsInteractor.queryBdeleteForce(name, keywords);
+ case 'set':
+ return this.completionsInteractor.querySet(name, keywords);
+ }
+ return Promise.resolve(Completions.empty());
+ }
+
+ // eslint-disable-next-line complexity
+ exec(line) {
+ let trimmed = line.trimStart();
+ let words = trimmed.split(/ +/);
+ let name = words[0];
+ if (words[0].length === 0) {
+ return Promise.resolve();
+ }
+
+ let keywords = trimmed.slice(name.length).trimStart();
+ switch (words[0]) {
+ case 'o':
+ case 'open':
+ return this.commandIndicator.open(keywords);
+ case 't':
+ case 'tabopen':
+ return this.commandIndicator.tabopen(keywords);
+ case 'w':
+ case 'winopen':
+ return this.commandIndicator.winopen(keywords);
+ case 'b':
+ case 'buffer':
+ return this.commandIndicator.buffer(keywords);
+ case 'bd':
+ case 'bdel':
+ case 'bdelete':
+ return this.commandIndicator.bdelete(false, keywords);
+ case 'bd!':
+ case 'bdel!':
+ case 'bdelete!':
+ return this.commandIndicator.bdelete(true, keywords);
+ case 'bdeletes':
+ return this.commandIndicator.bdeletes(false, keywords);
+ case 'bdeletes!':
+ return this.commandIndicator.bdeletes(true, keywords);
+ case 'addbookmark':
+ return this.commandIndicator.addbookmark(keywords);
+ case 'q':
+ case 'quit':
+ return this.commandIndicator.quit();
+ case 'qa':
+ case 'quitall':
+ return this.commandIndicator.quitAll();
+ case 'set':
+ return this.commandIndicator.set(keywords);
+ }
+ throw new Error(words[0] + ' command is not defined');
+ }
+}