diff --git a/common/content/commands.js b/common/content/commands.js index ce4b8a4a..11c3a5aa 100644 --- a/common/content/commands.js +++ b/common/content/commands.js @@ -141,6 +141,11 @@ const Command = Class("Command", { let self = this; modifiers = modifiers || {}; + if (args.count != null && !this.count) + throw FailedAssertion("E481: No range allowed"); + if (args.bang && !this.bang) + throw FailedAssertion("E477: No ! allowed"); + dactyl.trapErrors(function exec(command) { this.action(args, modifiers); }, this); diff --git a/common/content/dactyl.js b/common/content/dactyl.js index 95722cf6..9bb72e6c 100644 --- a/common/content/dactyl.js +++ b/common/content/dactyl.js @@ -393,18 +393,9 @@ const Dactyl = Module("dactyl", { let err = null; for (let [command, args] in commands.parseCommands(str.replace(/^'(.*)'$/, "$1"))) { - if (command === null) { - err = "E492: Not a " + config.name + " command: " + str; - dactyl.focusContent(); - } - else if (command.action === null) - err = "E666: Internal error: command.action === null"; // TODO: need to perform this test? -- djk - else if (args.count != null && !command.count) - err = "E481: No range allowed"; - else if (args.bang && !command.bang) - err = "E477: No ! allowed"; + if (command === null) + throw FailedAssertion("E492: Not a " + config.appName + " command: " + str); - dactyl.assert(!err, err); if (!silent) commandline.command = str.replace(/^\s*:\s*/, ""); diff --git a/common/content/io.js b/common/content/io.js index e1b1cd72..3b2ba161 100644 --- a/common/content/io.js +++ b/common/content/io.js @@ -386,7 +386,14 @@ lookup: line = line.replace(/\r$/, ""); if (!/^\s*(".*)?$/.test(line)) - dactyl.execute(line, { setFrom: file }, true); + try { + dactyl.execute(line, { setFrom: file }, true); + } + catch (e) { + dactyl.echoerr("Error detected while processing " + file.path); + dactyl.echomsg("line\t" + this.sourcing.line + ":"); + dactyl.reportError(e, true); + } } }