diff --git a/common/content/abbreviations.js b/common/content/abbreviations.js index 238ced70..dc22d8cc 100644 --- a/common/content/abbreviations.js +++ b/common/content/abbreviations.js @@ -296,25 +296,19 @@ var Abbreviations = Module("abbreviations", { commands.add([ch + "una[bbreviate]"], "Remove an abbreviation" + modeDescription, function (args) { - let lhs = args.literalArg; - if (!lhs) - return dactyl.echoerr("E474: Invalid argument"); - if (!args["-group"].remove(modes, lhs)) + util.assert(args.bang ^ !!args[0], "Argument or ! required"); + + if (args.bang) + args["-group"].clear(modes); + else if (!args["-group"].remove(modes, lhs)) return dactyl.echoerr("E24: No such abbreviation"); }, { - argCount: "1", + argCount: "?", + bang: true, completer: function (context) completion.abbreviation(context, modes, args["-group"]), literal: 0, options: [contexts.GroupFlag("abbrevs")] }); - - commands.add([ch + "abc[lear]"], - "Remove all abbreviations" + modeDescription, - function (args) { args["-group"].clear(modes); }, - { - argCount: "0", - options: [contexts.GroupFlag("abbrevs")] - }); } addAbbreviationCommands([modes.INSERT, modes.COMMAND_LINE], "", ""); diff --git a/common/content/mappings.js b/common/content/mappings.js index cc48bb3e..804febb0 100644 --- a/common/content/mappings.js +++ b/common/content/mappings.js @@ -575,50 +575,31 @@ var Mappings = Module("mappings", { function (args) { map(args, true); }, opts); - commands.add([ch + "mapc[lear]"], - "Remove all mappings" + modeDescription, - function (args) { - util.assert(args["-group"].modifiable, - "Cannot change mappings in the builtin group"); - - let mapmodes = array.uniq(args["-modes"].map(findMode)); - mapmodes.forEach(function (mode) { - args["-group"].clear(mode); - }); - }, - { - argCount: "0", - options: [ - contexts.GroupFlag("mappings"), - update({}, modeFlag, { - names: ["-modes", "-mode", "-m"], - type: CommandOption.LIST, - description: "Remove all mappings from the given modes", - default: mapmodes || ["n", "v"] - }) - ] - }); - commands.add([ch + "unm[ap]"], "Remove a mapping" + modeDescription, function (args) { util.assert(args["-group"].modifiable, "Cannot change mappings in the builtin group"); + util.assert(args.bang ^ !!args[0], "Argument or ! required"); + let mapmodes = array.uniq(args["-modes"].map(findMode)); - let found = false; - for (let [, mode] in Iterator(mapmodes)) { - if (args["-group"].has(mode, args[0])) { + let found = 0; + for (let mode in values(mapmodes)) + if (args.bang) + args["-group"].clear(mode); + else if (args["-group"].has(mode, args[0])) { args["-group"].remove(mode, args[0]); - found = true; + found++; } - } - if (!found) + + if (!found && !args.bang) dactyl.echoerr("E31: No such mapping"); }, { - argCount: "1", + argCount: "?", + bang: true, completer: opts.completer, options: [ contexts.GroupFlag("mappings"), diff --git a/common/modules/commands.jsm b/common/modules/commands.jsm index 1ad61eff..87fdcb56 100644 --- a/common/modules/commands.jsm +++ b/common/modules/commands.jsm @@ -622,6 +622,7 @@ var Commands = Module("commands", { * Displays a list of user-defined commands. */ list: function list() { + const { commandline, completion } = this.modules; function completerToString(completer) { if (completer) return [k for ([k, v] in Iterator(config.completers)) if (completer == completion.closure[v])][0] || "custom"; @@ -631,7 +632,7 @@ var Commands = Module("commands", { if (!this.userHives.some(function (h) h._list.length)) dactyl.echomsg("No user-defined commands found"); else - modules.commandline.commandOutput( + commandline.commandOutput(
| @@ -1487,13 +1488,22 @@ var Commands = Module("commands", { .flatten().array }); - commands.add(["comc[lear]"], - "Delete all user-defined commands", + commands.add(["delc[ommand]"], + "Delete the specified user-defined command", function (args) { - args["-group"].clear(); - }, - { - argCount: "0", + util.assert(args.bang ^ !!args[0], "Argument or ! required"); + let name = args[0]; + + if (args.bang) + args["-group"].clear(); + else if (args["-group"].get(name)) + args["-group"].remove(name); + else + dactyl.echoerr("E184: No such user-defined command: " + name); + }, { + argCount: "?", + bang: true, + completer: function (context, args) modules.completion.userCommand(context, args["-group"]), options: [contexts.GroupFlag("commands")] }); @@ -1506,21 +1516,6 @@ var Commands = Module("commands", { literal: 0 }); - commands.add(["delc[ommand]"], - "Delete the specified user-defined command", - function (args) { - let name = args[0]; - - if (args["-group"].get(name)) - args["-group"].remove(name); - else - dactyl.echoerr("E184: No such user-defined command: " + name); - }, { - argCount: "1", - completer: function (context, args) modules.completion.userCommand(context, args["-group"]), - options: [contexts.GroupFlag("commands")] - }); - dactyl.addUsageCommand({ name: ["listc[ommands]", "lc"], description: "List all Ex commands along with their short descriptions", diff --git a/common/modules/styles.jsm b/common/modules/styles.jsm index dffdcfd2..e438d979 100644 --- a/common/modules/styles.jsm +++ b/common/modules/styles.jsm @@ -636,14 +636,18 @@ var Styles = Module("Styles", { { name: ["dels[tyle]"], desc: "Remove a user style sheet", - action: function (sheet) sheet.remove() + action: function (sheet) sheet.remove(), } ].forEach(function (cmd) { commands.add(cmd.name, cmd.desc, function (args) { + dactyl.assert(args.bang ^ !!(args[0] || args[1] || args["-name"] || args["-index"]), + "Argument or ! required"); + args["-group"].find(args["-name"], args[0], args.literalArg, args["-index"]) .forEach(cmd.action); }, { + bang: true, completer: function (context, args) { let uris = util.visibleURIs(window.content); |