1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-21 17:47:59 +01:00

Move some messages to properties file. Local and modules directories still to be done.

This commit is contained in:
Kris Maglione
2011-02-25 20:23:15 -05:00
parent 885b16d7db
commit 7c7a7c4865
19 changed files with 309 additions and 132 deletions

View File

@@ -224,7 +224,7 @@ var Abbreviations = Module("abbreviations", {
// TODO: Move this to an ItemList to show this automatically // TODO: Move this to an ItemList to show this automatically
if (list.*.length() === list.text().length() + 2) if (list.*.length() === list.text().length() + 2)
dactyl.echomsg("No abbreviations found"); dactyl.echomsg(_("abbrev.none"));
else else
commandline.commandOutput(list); commandline.commandOutput(list);
} }
@@ -256,7 +256,7 @@ var Abbreviations = Module("abbreviations", {
function (args) { function (args) {
let [lhs, rhs] = args; let [lhs, rhs] = args;
dactyl.assert(!args.length || abbreviations._check.test(lhs), dactyl.assert(!args.length || abbreviations._check.test(lhs),
"E474: Invalid argument"); _("error.invalidArgument"));
if (!rhs) if (!rhs)
abbreviations.list(modes, lhs || ""); abbreviations.list(modes, lhs || "");
@@ -296,12 +296,12 @@ var Abbreviations = Module("abbreviations", {
commands.add([ch + "una[bbreviate]"], commands.add([ch + "una[bbreviate]"],
"Remove an abbreviation" + modeDescription, "Remove an abbreviation" + modeDescription,
function (args) { function (args) {
util.assert(args.bang ^ !!args[0], "Argument or ! required"); util.assert(args.bang ^ !!args[0], _("error.argumentOrBang"));
if (args.bang) if (args.bang)
args["-group"].clear(modes); args["-group"].clear(modes);
else if (!args["-group"].remove(modes, args[0])) else if (!args["-group"].remove(modes, args[0]))
return dactyl.echoerr("E24: No such abbreviation"); return dactyl.echoerr(_("abbrev.noSuch"));
}, { }, {
argCount: "?", argCount: "?",
bang: true, bang: true,

View File

@@ -138,7 +138,7 @@ var AutoCommands = Module("autocommands", {
if (options.get("eventignore").has(event)) if (options.get("eventignore").has(event))
return; return;
dactyl.echomsg('Executing ' + event + ' Auto commands for "*"', 8); dactyl.echomsg(_("autocmd.executing", event, "*".quote()), 8);
let lastPattern = null; let lastPattern = null;
var { url, doc } = args; var { url, doc } = args;
@@ -156,10 +156,10 @@ var AutoCommands = Module("autocommands", {
for (let autoCmd in values(hive._store)) for (let autoCmd in values(hive._store))
if (autoCmd.eventName === event && autoCmd.filter(uri, doc)) { if (autoCmd.eventName === event && autoCmd.filter(uri, doc)) {
if (!lastPattern || lastPattern !== String(autoCmd.filter)) if (!lastPattern || lastPattern !== String(autoCmd.filter))
dactyl.echomsg("Executing " + event + " Auto commands for " + autoCmd.filter, 8); dactyl.echomsg(_("autocmd.executing", event, autoCmd.filter), 8);
lastPattern = String(autoCmd.filter); lastPattern = String(autoCmd.filter);
dactyl.echomsg("autocommand " + autoCmd.command, 9); dactyl.echomsg(_("autocmd.autocommand", autoCmd.command), 9);
dactyl.trapErrors(autoCmd.command, autoCmd, args); dactyl.trapErrors(autoCmd.command, autoCmd, args);
} }
@@ -181,7 +181,7 @@ var AutoCommands = Module("autocommands", {
events = Option.parse.stringlist(event); events = Option.parse.stringlist(event);
dactyl.assert(events.every(function (event) validEvents.indexOf(event.toLowerCase()) >= 0), dactyl.assert(events.every(function (event) validEvents.indexOf(event.toLowerCase()) >= 0),
"E216: No such group or event: " + event); _("autocmd.noGroup", event));
} }
if (args.length > 2) { // add new command, possibly removing all others with the same event/pattern if (args.length > 2) { // add new command, possibly removing all others with the same event/pattern
@@ -237,7 +237,7 @@ var AutoCommands = Module("autocommands", {
function (args) { function (args) {
// Vim compatible // Vim compatible
if (args.length == 0) if (args.length == 0)
return void dactyl.echomsg("No matching autocommands"); return void dactyl.echomsg(_("msg.noMatchingAutocmd"));
let [event, url] = args; let [event, url] = args;
let defaultURL = url || buffer.uri.spec; let defaultURL = url || buffer.uri.spec;
@@ -245,11 +245,11 @@ var AutoCommands = Module("autocommands", {
// TODO: add command validators // TODO: add command validators
dactyl.assert(event != "*", dactyl.assert(event != "*",
"E217: Can't execute autocommands for ALL events"); _("autocmd.cantExecuteAll"));
dactyl.assert(validEvents.indexOf(event) >= 0, dactyl.assert(validEvents.indexOf(event) >= 0,
"E216: No such group or event: " + args); _("autocmd.noGroup", args));
dactyl.assert(autocommands.get(event).some(function (c) c.patterns.some(function (re) re.test(defaultURL) ^ !re.result)), dactyl.assert(autocommands.get(event).some(function (c) c.patterns.some(function (re) re.test(defaultURL) ^ !re.result)),
"No matching autocommands"); _("autocmd.noMatching"));
if (this.name == "doautoall" && dactyl.has("tabs")) { if (this.name == "doautoall" && dactyl.has("tabs")) {
let current = tabs.index(); let current = tabs.index();

View File

@@ -344,13 +344,13 @@ var Bookmarks = Module("bookmarks", {
return dactyl.open(items.map(function (i) i.url), dactyl.NEW_TAB); return dactyl.open(items.map(function (i) i.url), dactyl.NEW_TAB);
if (filter.length > 0 && tags.length > 0) if (filter.length > 0 && tags.length > 0)
dactyl.echoerr("E283: No bookmarks matching tags: " + tags.map(String.quote) + " and string: " + filter.quote()); dactyl.echoerr(_("bookmark.noMatching", tags.map(String.quote), filter.quote()));
else if (filter.length > 0) else if (filter.length > 0)
dactyl.echoerr("E283: No bookmarks matching string: " + filter.quote()); dactyl.echoerr(_("bookmark.noMatchingString", filter.quote()));
else if (tags.length > 0) else if (tags.length > 0)
dactyl.echoerr("E283: No bookmarks matching tags: " + tags.map(String.quote)); dactyl.echoerr(_("bookmark.noMatchingTags", tags.map(String.quote)));
else else
dactyl.echoerr("No bookmarks set"); dactyl.echoerr(_("bookmark.none"));
return null; return null;
} }
}, { }, {
@@ -433,7 +433,7 @@ var Bookmarks = Module("bookmarks", {
1, commandline.FORCE_SINGLELINE); 1, commandline.FORCE_SINGLELINE);
} }
else else
dactyl.echoerr("Exxx: Could not add bookmark " + opts.title.quote(), commandline.FORCE_SINGLELINE); dactyl.echoerr(_("bookmark.cantAdd", opts.title.quote()));
}, { }, {
argCount: "?", argCount: "?",
bang: true, bang: true,
@@ -489,7 +489,7 @@ var Bookmarks = Module("bookmarks", {
function (resp) { function (resp) {
if (resp && resp.match(/^y(es)?$/i)) { if (resp && resp.match(/^y(es)?$/i)) {
bookmarks.remove(Object.keys(bookmarkcache.bookmarks)); bookmarks.remove(Object.keys(bookmarkcache.bookmarks));
dactyl.echomsg("All bookmarks deleted"); dactyl.echomsg(_("bookmark.allGone"));
} }
}); });
else { else {

View File

@@ -195,11 +195,12 @@ var Browser = Module("browser", XPCOM(Ci.nsISupportsWeakReference, ModuleBase),
setOverLink.superapply(this, arguments); setOverLink.superapply(this, arguments);
switch (options["showstatuslinks"]) { switch (options["showstatuslinks"]) {
case "status": case "status":
statusline.updateUrl(link ? "Link: " + link : null); statusline.updateUrl(link ? _("status.link", link) : null);
break; break;
case "command": case "command":
if (link) if (link)
dactyl.echo("Link: " + link, commandline.DISALLOW_MULTILINE); dactyl.echo(_("status.link", link),
commandline.DISALLOW_MULTILINE);
else else
commandline.clear(); commandline.clear();
break; break;

View File

@@ -574,7 +574,7 @@ var Buffer = Module("buffer", {
file.create(File.NORMAL_FILE_TYPE, octal(644)); file.create(File.NORMAL_FILE_TYPE, octal(644));
} }
catch (e) { catch (e) {
util.assert(false, "Invalid destination: " + e.name); util.assert(false, _("save.invalidDestination", e.name));
} }
buffer.saveURI(uri, file); buffer.saveURI(uri, file);
@@ -978,7 +978,7 @@ var Buffer = Module("buffer", {
*/ */
setZoom: function setZoom(value, fullZoom) { setZoom: function setZoom(value, fullZoom) {
dactyl.assert(value >= Buffer.ZOOM_MIN || value <= Buffer.ZOOM_MAX, dactyl.assert(value >= Buffer.ZOOM_MIN || value <= Buffer.ZOOM_MAX,
"Zoom value out of range (" + Buffer.ZOOM_MIN + " - " + Buffer.ZOOM_MAX + "%)"); _("zoom.outOfRange", Buffer.ZOOM_MIN, Buffer.ZOOM_MAX));
if (fullZoom !== undefined) if (fullZoom !== undefined)
ZoomManager.useFullZoom = fullZoom; ZoomManager.useFullZoom = fullZoom;
@@ -986,7 +986,7 @@ var Buffer = Module("buffer", {
ZoomManager.zoom = value / 100; ZoomManager.zoom = value / 100;
} }
catch (e if e == Cr.NS_ERROR_ILLEGAL_VALUE) { catch (e if e == Cr.NS_ERROR_ILLEGAL_VALUE) {
return dactyl.echoerr("Illegal zoom value"); // XXX return dactyl.echoerr(_("zoom.illegal"));
} }
if ("FullZoom" in window) if ("FullZoom" in window)
@@ -1237,16 +1237,16 @@ var Buffer = Module("buffer", {
// FIXME: arg handling is a bit of a mess, check for filename // FIXME: arg handling is a bit of a mess, check for filename
dactyl.assert(!arg || arg[0] == ">" && !util.OS.isWindows, dactyl.assert(!arg || arg[0] == ">" && !util.OS.isWindows,
"E488: Trailing characters"); _("error.trailing"));
prefs.withContext(function () { prefs.withContext(function () {
if (arg) { if (arg) {
prefs.set("print.print_to_file", "true"); prefs.set("print.print_to_file", "true");
prefs.set("print.print_to_filename", io.File(arg.substr(1)).path); prefs.set("print.print_to_filename", io.File(arg.substr(1)).path);
dactyl.echomsg("Printing to file: " + arg.substr(1)); dactyl.echomsg(_("print.toFile", arg.substr(1)));
} }
else else
dactyl.echomsg("Sending to printer..."); dactyl.echomsg(_("print.sending"));
prefs.set("print.always_print_silent", args.bang); prefs.set("print.always_print_silent", args.bang);
prefs.set("print.show_print_progress", !args.bang); prefs.set("print.show_print_progress", !args.bang);
@@ -1255,9 +1255,9 @@ var Buffer = Module("buffer", {
}); });
if (arg) if (arg)
dactyl.echomsg("Printed: " + arg.substr(1)); dactyl.echomsg(_("print.printed", arg.substr(1)));
else else
dactyl.echomsg("Print job sent."); dactyl.echomsg(messgaes.print.sent());
}, },
{ {
argCount: "?", argCount: "?",
@@ -1271,7 +1271,8 @@ var Buffer = Module("buffer", {
let arg = args[0]; let arg = args[0];
let opt = options.get("pageinfo"); let opt = options.get("pageinfo");
dactyl.assert(!arg || opt.validator(opt.parse(arg)), "E475: Invalid argument: " + arg); dactyl.assert(!arg || opt.validator(opt.parse(arg)),
_("error.invalidArgument", arg));
buffer.showPageInfo(true, arg); buffer.showPageInfo(true, arg);
}, },
{ {
@@ -1290,7 +1291,7 @@ var Buffer = Module("buffer", {
let titles = buffer.alternateStyleSheets.map(function (stylesheet) stylesheet.title); let titles = buffer.alternateStyleSheets.map(function (stylesheet) stylesheet.title);
dactyl.assert(!arg || titles.indexOf(arg) >= 0, dactyl.assert(!arg || titles.indexOf(arg) >= 0,
"E475: Invalid argument: " + arg); _("error.invalidArgument", arg));
if (options["usermode"]) if (options["usermode"])
options["usermode"] = false; options["usermode"] = false;
@@ -1331,14 +1332,15 @@ var Buffer = Module("buffer", {
if (/^>>/.test(filename)) { if (/^>>/.test(filename)) {
let file = io.File(filename.replace(/^>>\s*/, "")); let file = io.File(filename.replace(/^>>\s*/, ""));
dactyl.assert(args.bang || file.exists() && file.isWritable(), file.path.quote() + ": E212: Can't open file for writing"); dactyl.assert(args.bang || file.exists() && file.isWritable(),
_("io.notWriteable", file.path.quote()));
return buffer.viewSourceExternally(buffer.focusedFrame.document, return buffer.viewSourceExternally(buffer.focusedFrame.document,
function (tmpFile) { function (tmpFile) {
try { try {
file.write(tmpFile, ">>"); file.write(tmpFile, ">>");
} }
catch (e) { catch (e) {
dactyl.echoerr(file.path.quote() + ": E212: Can't open file for writing"); dactyl.echoerr(_("io.notWriteable", file.path.quote()));
} }
}); });
} }
@@ -1348,7 +1350,7 @@ var Buffer = Module("buffer", {
if (filename.substr(-1) === File.PATH_SEP || file.exists() && file.isDirectory()) if (filename.substr(-1) === File.PATH_SEP || file.exists() && file.isDirectory())
file.append(Buffer.getDefaultNames(doc)[0][0]); file.append(Buffer.getDefaultNames(doc)[0][0]);
dactyl.assert(args.bang || !file.exists(), "E13: File exists (add ! to override)"); dactyl.assert(args.bang || !file.exists(), _("io.exists"));
chosenData = { file: file, uri: util.newURI(doc.location.href) }; chosenData = { file: file, uri: util.newURI(doc.location.href) };
} }
@@ -1414,7 +1416,7 @@ var Buffer = Module("buffer", {
level = Math.constrain(level, Buffer.ZOOM_MIN, Buffer.ZOOM_MAX); level = Math.constrain(level, Buffer.ZOOM_MIN, Buffer.ZOOM_MAX);
} }
else else
dactyl.assert(false, "E488: Trailing characters"); dactyl.assert(false, _("error.trailing"));
buffer.setZoom(level, args.bang); buffer.setZoom(level, args.bang);
}, },
@@ -1682,7 +1684,7 @@ var Buffer = Module("buffer", {
"Open (]put) a URL based on the current clipboard contents in a new buffer", "Open (]put) a URL based on the current clipboard contents in a new buffer",
function () { function () {
let url = dactyl.clipboardRead(); let url = dactyl.clipboardRead();
dactyl.assert(url, "No clipboard data"); dactyl.assert(url, _("error.clipboardEmpty"));
dactyl.open(url, { from: "paste", where: dactyl.NEW_TAB, background: true }); dactyl.open(url, { from: "paste", where: dactyl.NEW_TAB, background: true });
}); });
@@ -1690,7 +1692,7 @@ var Buffer = Module("buffer", {
"Open (put) a URL based on the current clipboard contents in the current buffer", "Open (put) a URL based on the current clipboard contents in the current buffer",
function () { function () {
let url = dactyl.clipboardRead(); let url = dactyl.clipboardRead();
dactyl.assert(url, "No clipboard data"); dactyl.assert(url, _("error.clipboardEmpty"));
dactyl.open(url); dactyl.open(url);
}); });
@@ -1698,7 +1700,7 @@ var Buffer = Module("buffer", {
"Open (put) a URL based on the current clipboard contents in a new buffer", "Open (put) a URL based on the current clipboard contents in a new buffer",
function () { function () {
let url = dactyl.clipboardRead(); let url = dactyl.clipboardRead();
dactyl.assert(url, "No clipboard data"); dactyl.assert(url, _("error.clipboardEmpty"));
dactyl.open(url, { from: "paste", where: dactyl.NEW_TAB }); dactyl.open(url, { from: "paste", where: dactyl.NEW_TAB });
}); });

View File

@@ -704,7 +704,7 @@ var CommandLine = Module("commandline", {
messageCount: 0, messageCount: 0,
echo: function echo(data, highlightGroup, flags) { echo: function echo(data, highlightGroup, flags) {
// dactyl.echo uses different order of flags as it omits the highlight group, change commandline.echo argument order? --mst // dactyl.echo uses different order of flags as it omits the highlight group, change commandline.echo argument order? --mst
if (this._silent) if (this._silent || !this.widgets)
return; return;
this.messageCount++; this.messageCount++;

View File

@@ -344,7 +344,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
if (isinstance(str, ["Error", "Exception"])) if (isinstance(str, ["Error", "Exception"]))
dactyl.reportError(str); dactyl.reportError(str);
if (typeof str == "object" && "echoerr" in str) if (isObject(str) && "echoerr" in str)
str = str.echoerr; str = str.echoerr;
else if (isinstance(str, ["Error"]) && str.fileName) else if (isinstance(str, ["Error"]) && str.fileName)
str = <>{str.fileName.replace(/^.* -> /, "")}: {str.lineNumber}: {str}</>; str = <>{str.fileName.replace(/^.* -> /, "")}: {str.lineNumber}: {str}</>;
@@ -377,7 +377,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
* @param {number} flags These control the multi-line message behavior. * @param {number} flags These control the multi-line message behavior.
* See {@link CommandLine#echo}. * See {@link CommandLine#echo}.
*/ */
echomsg: function (str, verbosity, flags) { echomsg: function echomsg(str, verbosity, flags) {
if (verbosity == null) if (verbosity == null)
verbosity = 0; // verbosity level is exclusionary verbosity = 0; // verbosity level is exclusionary
@@ -1044,12 +1044,12 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
if (helpFile in services["dactyl:"].FILE_MAP) if (helpFile in services["dactyl:"].FILE_MAP)
dactyl.open("dactyl://help/" + helpFile, { from: "help" }); dactyl.open("dactyl://help/" + helpFile, { from: "help" });
else else
dactyl.echomsg("Sorry, help file " + helpFile.quote() + " not found"); dactyl.echomsg(_("help.noFile", helpFile.quote()));
return; return;
} }
let page = this.findHelp(topic, consolidated); let page = this.findHelp(topic, consolidated);
dactyl.assert(page != null, "E149: Sorry, no help for " + topic); dactyl.assert(page != null, _("help.noTopic", topic));
dactyl.open("dactyl://help/" + page, { from: "help" }); dactyl.open("dactyl://help/" + page, { from: "help" });
}, },
@@ -1066,7 +1066,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
loadPlugins: function (args, force) { loadPlugins: function (args, force) {
function sourceDirectory(dir) { function sourceDirectory(dir) {
dactyl.assert(dir.isReadable(), "E484: Can't open file " + dir.path); dactyl.assert(dir.isReadable(), _("io.notReadable", dir.path));
dactyl.log("Sourcing plugin directory: " + dir.path + "...", 3); dactyl.log("Sourcing plugin directory: " + dir.path + "...", 3);
@@ -1096,12 +1096,15 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
return; return;
} }
dactyl.echomsg('Searching for "plugins/**/*.{js,' + config.fileExtension + '}" in ' dactyl.echomsg(
+ [dir.path.replace(/.plugins$/, "") for ([, dir] in Iterator(dirs))] _("plugin.searchingForIn",
.join(",").quote(), 2); ("plugins/**/*.{js," + config.fileExtension + "}").quote(),
[dir.path.replace(/.plugins$/, "") for ([, dir] in Iterator(dirs))]
.join(",").quote()),
2);
dirs.forEach(function (dir) { dirs.forEach(function (dir) {
dactyl.echomsg("Searching for " + (dir.path + "/**/*.{js," + config.fileExtension + "}").quote(), 3); dactyl.echomsg(_("plugin.searchingFor", (dir.path + "/**/*.{js," + config.fileExtension + "}").quote()), 3);
sourceDirectory(dir); sourceDirectory(dir);
}); });
}, },
@@ -1705,14 +1708,15 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
function (args) { function (args) {
let dialog = args[0]; let dialog = args[0];
dactyl.assert(dialog in config.dialogs, "E475: Invalid argument: " + dialog); dactyl.assert(dialog in config.dialogs,
_("error.invalidArgument", dialog));
dactyl.assert(!config.dialogs[dialog][2] || config.dialogs[dialog][2](), dactyl.assert(!config.dialogs[dialog][2] || config.dialogs[dialog][2](),
"Dialog " + dialog + " not available"); _("dialog.notAvailable", dialog));
try { try {
config.dialogs[dialog][1](); config.dialogs[dialog][1]();
} }
catch (e) { catch (e) {
dactyl.echoerr("Error opening " + dialog.quote() + ": " + (e.message || e)); dactyl.echoerr(_("error.cantOpen", dialog.quote(), e.message || e));
} }
}, { }, {
argCount: "1", argCount: "1",
@@ -1730,7 +1734,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
let items = Dactyl.getMenuItems(); let items = Dactyl.getMenuItems();
dactyl.assert(items.some(function (i) i.fullMenuPath == arg), dactyl.assert(items.some(function (i) i.fullMenuPath == arg),
"E334: Menu not found: " + arg); _("emenu.notFound", arg));
for (let [, item] in Iterator(items)) { for (let [, item] in Iterator(items)) {
if (item.fullMenuPath == arg) if (item.fullMenuPath == arg)
@@ -1771,7 +1775,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
commands.add([command.name], commands.add([command.name],
command.description, command.description,
function (args) { function (args) {
dactyl.assert(!args.bang, "E478: Don't panic!"); dactyl.assert(!args.bang, _("help.dontPanic"));
dactyl.help(args.literalArg, consolidated); dactyl.help(args.literalArg, consolidated);
}, { }, {
argCount: "?", argCount: "?",
@@ -1873,7 +1877,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
commands.add(names, desc, commands.add(names, desc,
function (args) { function (args) {
let toolbar = findToolbar(args[0] || ""); let toolbar = findToolbar(args[0] || "");
dactyl.assert(toolbar, "E474: Invalid argument"); dactyl.assert(toolbar, _("error.invalidArgument"));
action(toolbar); action(toolbar);
events.checkFocus(); events.checkFocus();
}, { }, {
@@ -1959,9 +1963,9 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
let afterTime = Date.now(); let afterTime = Date.now();
if (afterTime - beforeTime >= 100) if (afterTime - beforeTime >= 100)
dactyl.echo("Total time: " + ((afterTime - beforeTime) / 1000.0).toFixed(2) + " sec"); dactyl.echo(_("time.total", ((afterTime - beforeTime) / 1000.0).toFixed(2) + " sec"));
else else
dactyl.echo("Total time: " + (afterTime - beforeTime) + " msec"); dactyl.echo(_("time.total", (afterTime - beforeTime) + " msec"));
} }
} }
catch (e) { catch (e) {
@@ -2078,7 +2082,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
} }
} }
catch (e) { catch (e) {
dactyl.echoerr("Parsing command line options: " + e); dactyl.echoerr(_("dactyl.parsingCommandLine", e));
} }
dactyl.log("Command-line options: " + util.objectToString(dactyl.commandLineOptions), 3); dactyl.log("Command-line options: " + util.objectToString(dactyl.commandLineOptions), 3);

View File

@@ -252,7 +252,7 @@ var Editor = Module("editor", {
let args = options.get("editor").format(args); let args = options.get("editor").format(args);
dactyl.assert(args.length >= 1, "No editor specified"); dactyl.assert(args.length >= 1, _("editor.noEditor"));
io.run(args.shift(), args, blocking); io.run(args.shift(), args, blocking);
}, },

View File

@@ -473,9 +473,9 @@ var Events = Module("events", {
catch (e) { catch (e) {
dactyl.reportError(e); dactyl.reportError(e);
if (e.message == "Interrupted") if (e.message == "Interrupted")
dactyl.echoerr("Interrupted", commandline.FORCE_SINGLELINE); dactyl.echoerr(_("error.interrupted"), commandline.FORCE_SINGLELINE);
else else
dactyl.echoerr("Processing " + event.type + " event: " + (e.echoerr || e), dactyl.echoerr(_("event.error", event.type, e.echoerr || e),
commandline.FORCE_SINGLELINE); commandline.FORCE_SINGLELINE);
} }
}; };
@@ -498,7 +498,7 @@ var Events = Module("events", {
set recording(macro) { set recording(macro) {
dactyl.assert(macro == null || /[a-zA-Z0-9]/.test(macro), dactyl.assert(macro == null || /[a-zA-Z0-9]/.test(macro),
"E354: Invalid register name: '" + macro + "'"); _("macro.invalid", macro));
modes.recording = !!macro; modes.recording = !!macro;
@@ -517,7 +517,7 @@ var Events = Module("events", {
}); });
dactyl.log("Recorded " + this.recording + ": " + this._macroKeys.join(""), 9); dactyl.log("Recorded " + this.recording + ": " + this._macroKeys.join(""), 9);
dactyl.echomsg("Recorded macro '" + this.recording + "'"); dactyl.echomsg(_("macro.recorded", this.recording));
} }
this._recording = macro || null; this._recording = macro || null;
}, },
@@ -530,17 +530,11 @@ var Events = Module("events", {
*/ */
playMacro: function (macro) { playMacro: function (macro) {
let res = false; let res = false;
if (!/[a-zA-Z0-9@]/.test(macro) && macro.length == 1) { dactyl.assert(!/[a-zA-Z0-9@]/.test(macro) && macro.length == 1,
dactyl.echoerr("E354: Invalid register name: '" + macro + "'"); _("macro.invalid", macro));
return false;
}
if (macro == "@") { // use lastMacro if it's set if (macro == "@")
if (!this._lastMacro) { dactyl.assert(this._lastMacro, _("macro.noPrevious"));
dactyl.echoerr("E748: No previously used register");
return false;
}
}
else else
this._lastMacro = macro.toLowerCase(); // XXX: sets last played macro, even if it does not yet exist this._lastMacro = macro.toLowerCase(); // XXX: sets last played macro, even if it does not yet exist
@@ -555,7 +549,7 @@ var Events = Module("events", {
} }
else else
// TODO: ignore this like Vim? // TODO: ignore this like Vim?
dactyl.echoerr("Exxx: Register '" + this._lastMacro + "' not set"); dactyl.echoerr(_("macro.notSet", this._lastMacro));
return res; return res;
}, },
@@ -1041,13 +1035,13 @@ var Events = Module("events", {
if (buffer.loaded) if (buffer.loaded)
return true; return true;
dactyl.echo("Waiting for page to load...", commandline.DISALLOW_MULTILINE); dactyl.echo(_("macro.loadWaiting"), commandline.DISALLOW_MULTILINE);
const maxWaitTime = (time || 25); const maxWaitTime = (time || 25);
util.waitFor(function () !events.feedingKeys || buffer.loaded, this, maxWaitTime * 1000, true); util.waitFor(function () !events.feedingKeys || buffer.loaded, this, maxWaitTime * 1000, true);
if (!buffer.loaded) if (!buffer.loaded)
dactyl.echoerr("Page did not load completely in " + maxWaitTime + " seconds."); dactyl.echoerr(_("macro.loadFailed", maxWaitTime));
return buffer.loaded; return buffer.loaded;
}, },
@@ -1192,7 +1186,7 @@ var Events = Module("events", {
events.feedingKeys = false; events.feedingKeys = false;
if (modes.replaying) { if (modes.replaying) {
modes.replaying = false; modes.replaying = false;
this.timeout(function () { dactyl.echomsg("Canceled playback of macro '" + this._lastMacro + "'"); }, 100); this.timeout(function () { dactyl.echomsg(_("macro.canceled", this._lastMacro)); }, 100);
} }
} }
else else
@@ -1467,14 +1461,14 @@ var Events = Module("events", {
commands.add(["delmac[ros]"], commands.add(["delmac[ros]"],
"Delete macros", "Delete macros",
function (args) { function (args) {
dactyl.assert(!args.bang || !args[0], "E474: Invalid argument"); dactyl.assert(!args.bang || !args[0], _("error.invalidArgument"));
if (args.bang) if (args.bang)
events.deleteMacros(); events.deleteMacros();
else if (args[0]) else if (args[0])
events.deleteMacros(args[0]); events.deleteMacros(args[0]);
else else
dactyl.echoerr("E471: Argument required"); dactyl.echoerr(_("error.argumentRequired"));
}, { }, {
bang: true, bang: true,
completer: function (context) completion.macro(context), completer: function (context) completion.macro(context),
@@ -1522,7 +1516,8 @@ var Events = Module("events", {
mappings.add([modes.BASE], mappings.add([modes.BASE],
["<Pass>"], "Pass the events consumed by the last executed mapping", ["<Pass>"], "Pass the events consumed by the last executed mapping",
function ({ keypressEvents: [event] }) { function ({ keypressEvents: [event] }) {
dactyl.assert(event.dactylSavedEvents, "No events to pass"); dactyl.assert(event.dactylSavedEvents,
_("event.nothingToPass"));
return function () { return function () {
events.feedevents(null, event.dactylSavedEvents, events.feedevents(null, event.dactylSavedEvents,
{ skipmap: true, isMacro: true, isReplay: true }); { skipmap: true, isMacro: true, isReplay: true });
@@ -1542,8 +1537,8 @@ var Events = Module("events", {
["@", "<play-macro>"], "Play a macro", ["@", "<play-macro>"], "Play a macro",
function ({ arg, count }) { function ({ arg, count }) {
count = Math.max(count, 1); count = Math.max(count, 1);
while (count-- && events.playMacro(arg)) while (count--)
; events.playMacro(arg);
}, },
{ arg: true, count: true }); { arg: true, count: true });
@@ -1551,7 +1546,7 @@ var Events = Module("events", {
["<A-m>s", "<sleep>"], "Sleep for {count} milliseconds before continuing macro playback", ["<A-m>s", "<sleep>"], "Sleep for {count} milliseconds before continuing macro playback",
function ({ command, count }) { function ({ command, count }) {
let now = Date.now(); let now = Date.now();
dactyl.assert(count, "Count required for " + command); dactyl.assert(count, _("error.countRequired", command));
if (events.feedingKeys) if (events.feedingKeys)
util.sleep(count); util.sleep(count);
}, },

View File

@@ -963,7 +963,7 @@ var Hints = Module("hints", {
case "wordstartswith": return wordStartsWithMatcher(hintString, true); case "wordstartswith": return wordStartsWithMatcher(hintString, true);
case "firstletters" : return wordStartsWithMatcher(hintString, false); case "firstletters" : return wordStartsWithMatcher(hintString, false);
case "custom" : return dactyl.plugins.customHintMatcher(hintString); case "custom" : return dactyl.plugins.customHintMatcher(hintString);
default : dactyl.echoerr("Invalid hintmatching type: " + hintMatching); default : dactyl.echoerr(_("hints.noMatcher", hintMatching));
} }
return null; return null;
}, //}}} }, //}}}

View File

@@ -26,7 +26,7 @@ var History = Module("history", {
(order = "SORT_BY_" + order[2].toUpperCase() + "_" + (order = "SORT_BY_" + order[2].toUpperCase() + "_" +
(order[1] == "+" ? "ASCENDING" : "DESCENDING")) && (order[1] == "+" ? "ASCENDING" : "DESCENDING")) &&
order in options, order in options,
"Invalid sort order"); _("error.invalidSort", order));
options.sortingMode = options[order]; options.sortingMode = options[order];
options.resultType = options.RESULTS_AS_URI; options.resultType = options.RESULTS_AS_URI;
@@ -113,9 +113,9 @@ var History = Module("history", {
return dactyl.open(items.map(function (i) i.url), dactyl.NEW_TAB); return dactyl.open(items.map(function (i) i.url), dactyl.NEW_TAB);
if (filter.length > 0) if (filter.length > 0)
dactyl.echoerr("E283: No history matching " + filter.quote()); dactyl.echoerr(_("history.noMatching", filter.quote()));
else else
dactyl.echoerr("No history set"); dactyl.echoerr(_("history.none"));
return null; return null;
} }
}, { }, {
@@ -137,7 +137,7 @@ var History = Module("history", {
for (let [i, ent] in Iterator(sh.slice(0, sh.index).reverse())) for (let [i, ent] in Iterator(sh.slice(0, sh.index).reverse()))
if (ent.URI.spec == url) if (ent.URI.spec == url)
return void window.getWebNavigation().gotoIndex(i); return void window.getWebNavigation().gotoIndex(i);
dactyl.echoerr("Exxx: URL not found in history"); dactyl.echoerr(_("history.noURL"));
} }
else else
history.stepTo(-Math.max(args.count, 1)); history.stepTo(-Math.max(args.count, 1));
@@ -177,7 +177,7 @@ var History = Module("history", {
for (let [i, ent] in Iterator(sh.slice(sh.index + 1))) for (let [i, ent] in Iterator(sh.slice(sh.index + 1)))
if (ent.URI.spec == url) if (ent.URI.spec == url)
return void window.getWebNavigation().gotoIndex(i); return void window.getWebNavigation().gotoIndex(i);
dactyl.echoerr("Exxx: URL not found in history"); dactyl.echoerr(_("history.noURL"));
} }
else else
history.stepTo(Math.max(args.count, 1)); history.stepTo(Math.max(args.count, 1));

View File

@@ -118,7 +118,7 @@ var Map = Class("Map", {
if (this.executing) if (this.executing)
util.dumpStack("Attempt to execute mapping recursively: " + args.command); util.dumpStack("Attempt to execute mapping recursively: " + args.command);
dactyl.assert(!this.executing, "Attempt to execute mapping recursively: " + args.command); dactyl.assert(!this.executing, _("map.recursive", args.command));
try { try {
this.executing = true; this.executing = true;
@@ -427,7 +427,7 @@ var Mappings = Module("mappings", {
// TODO: Move this to an ItemList to show this automatically // TODO: Move this to an ItemList to show this automatically
if (list.*.length() === list.text().length() + 2) if (list.*.length() === list.text().length() + 2)
dactyl.echomsg("No mapping found"); dactyl.echomsg(_("map.none"));
else else
commandline.commandOutput(list); commandline.commandOutput(list);
} }
@@ -459,7 +459,7 @@ var Mappings = Module("mappings", {
mappings.list(mapmodes, mappings.expandLeader(lhs), hives); mappings.list(mapmodes, mappings.expandLeader(lhs), hives);
else { else {
util.assert(args["-group"].modifiable, util.assert(args["-group"].modifiable,
"Cannot change mappings in the builtin group"); _("map.builtinImmutable"));
args["-group"].add(mapmodes, [lhs], args["-group"].add(mapmodes, [lhs],
args["-description"], args["-description"],
@@ -579,10 +579,9 @@ var Mappings = Module("mappings", {
commands.add([ch + "unm[ap]"], commands.add([ch + "unm[ap]"],
"Remove a mapping" + modeDescription, "Remove a mapping" + modeDescription,
function (args) { function (args) {
util.assert(args["-group"].modifiable, util.assert(args["-group"].modifiable, _("map.builtinImmutable"));
"Cannot change mappings in the builtin group");
util.assert(args.bang ^ !!args[0], "Argument or ! required"); util.assert(args.bang ^ !!args[0], _("error.argumentOrBang"));
let mapmodes = array.uniq(args["-modes"].map(findMode)); let mapmodes = array.uniq(args["-modes"].map(findMode));
@@ -596,7 +595,7 @@ var Mappings = Module("mappings", {
} }
if (!found && !args.bang) if (!found && !args.bang)
dactyl.echoerr("E31: No such mapping"); dactyl.echoerr(_("map.noSuch", args[0]));
}, },
{ {
argCount: "?", argCount: "?",

View File

@@ -101,7 +101,7 @@ var Marks = Module("marks", {
jumpTo: function (char) { jumpTo: function (char) {
if (Marks.isURLMark(char)) { if (Marks.isURLMark(char)) {
let mark = this._urlMarks.get(char); let mark = this._urlMarks.get(char);
dactyl.assert(mark, "E20: Mark not set: " + char); dactyl.assert(mark, _("mark.unset", char));
let tab = mark.tab && mark.tab.get(); let tab = mark.tab && mark.tab.get();
if (!tab || !tab.linkedBrowser || tabs.allTabs.indexOf(tab) == -1) if (!tab || !tab.linkedBrowser || tabs.allTabs.indexOf(tab) == -1)
@@ -144,13 +144,13 @@ var Marks = Module("marks", {
} }
else if (Marks.isLocalMark(char)) { else if (Marks.isLocalMark(char)) {
let mark = (this._localMarks.get(this.localURI) || {})[char]; let mark = (this._localMarks.get(this.localURI) || {})[char];
dactyl.assert(mark, "E20: Mark not set: " + char); dactyl.assert(mark, _("mark.unset", char));
dactyl.log("Jumping to local mark: " + Marks.markToString(char, mark), 5); dactyl.log("Jumping to local mark: " + Marks.markToString(char, mark), 5);
buffer.scrollToPercent(mark.position.x * 100, mark.position.y * 100); buffer.scrollToPercent(mark.position.x * 100, mark.position.y * 100);
} }
else else
dactyl.echoerr("E20: Invalid mark"); dactyl.echoerr(_("mark.invalid"));
}, },
@@ -162,12 +162,12 @@ var Marks = Module("marks", {
list: function (filter) { list: function (filter) {
let marks = this.all; let marks = this.all;
dactyl.assert(marks.length > 0, "No marks set"); dactyl.assert(marks.length > 0, _("mark.none"));
if (filter.length > 0) { if (filter.length > 0) {
let pattern = util.charListToRegexp(filter, "a-zA-Z"); let pattern = util.charListToRegexp(filter, "a-zA-Z");
marks = marks.filter(function ([k, ]) pattern.test(k)); marks = marks.filter(function ([k, ]) pattern.test(k));
dactyl.assert(marks.length > 0, "E283: No marks matching " + filter.quote()); dactyl.assert(marks.length > 0, _("mark.noMatching", filter.quote()));
} }
commandline.commandOutput( commandline.commandOutput(
@@ -215,8 +215,7 @@ var Marks = Module("marks", {
mappings.add(myModes, mappings.add(myModes,
["m"], "Set mark at the cursor position", ["m"], "Set mark at the cursor position",
function ({ arg }) { function ({ arg }) {
dactyl.assert(/^[a-zA-Z]$/.test(arg), dactyl.assert(/^[a-zA-Z]$/.test(arg), _("mark.invalid"));
"E191: Argument must be an ASCII letter");
marks.add(arg); marks.add(arg);
}, },
{ arg: true }); { arg: true });
@@ -235,8 +234,8 @@ var Marks = Module("marks", {
let arg = args[0] || ""; let arg = args[0] || "";
// assert(special ^ args) // assert(special ^ args)
dactyl.assert( special || arg, "E471: Argument required"); dactyl.assert( special || arg, _("error.argumentRequired"));
dactyl.assert(!special || !arg, "E474: Invalid argument"); dactyl.assert(!special || !arg, _("error.invalidArgument"));
marks.remove(arg, special); marks.remove(arg, special);
}, },
@@ -250,9 +249,8 @@ var Marks = Module("marks", {
"Mark current location within the web page", "Mark current location within the web page",
function (args) { function (args) {
let mark = args[0] || ""; let mark = args[0] || "";
dactyl.assert(mark.length <= 1, "E488: Trailing characters"); dactyl.assert(mark.length <= 1, _("error.trailing"));
dactyl.assert(/[a-zA-Z]/.test(mark), dactyl.assert(/[a-zA-Z]/.test(mark), _("mark.invalid"));
"E191: Argument must be an ASCII letter");
marks.add(mark); marks.add(mark);
}, },

View File

@@ -36,6 +36,7 @@ var MOW = Module("mow", {
events.listen(window, this, "windowEvents"); events.listen(window, this, "windowEvents");
modules.mow = this;
let fontSize = util.computedStyle(document.documentElement).fontSize; let fontSize = util.computedStyle(document.documentElement).fontSize;
styles.system.add("font-size", "dactyl://content/buffer.xhtml", styles.system.add("font-size", "dactyl://content/buffer.xhtml",
"body { font-size: " + fontSize + "; } \ "body { font-size: " + fontSize + "; } \
@@ -126,7 +127,7 @@ var MOW = Module("mow", {
data.document = this.document; data.document = this.document;
output.appendChild(data.message); output.appendChild(data.message);
this.messages.push(data); this._("push", data);
} }
else { else {
let style = isString(data) ? "pre" : "nowrap"; let style = isString(data) ? "pre" : "nowrap";
@@ -305,7 +306,7 @@ var MOW = Module("mow", {
mappings.add([modes.COMMAND], mappings.add([modes.COMMAND],
["g<lt>"], "Redisplay the last command output", ["g<lt>"], "Redisplay the last command output",
function () { function () {
dactyl.assert(commandline.lastOutput, "No previous command output"); dactyl.assert(commandline.lastOutput, _("mow.noPreviousOutput"));
mow.echo(mow.lastOutput, "Normal"); mow.echo(mow.lastOutput, "Normal");
}); });

View File

@@ -89,7 +89,7 @@ var QuickMarks = Module("quickmarks", {
if (url) if (url)
dactyl.open(url, where); dactyl.open(url, where);
else else
dactyl.echoerr("E20: QuickMark not set"); dactyl.echoerr(_("quickmark.notSet"));
}, },
/** /**
@@ -105,12 +105,12 @@ var QuickMarks = Module("quickmarks", {
marks = Array.concat(lowercaseMarks, uppercaseMarks, numberMarks); marks = Array.concat(lowercaseMarks, uppercaseMarks, numberMarks);
dactyl.assert(marks.length > 0, "No QuickMarks set"); dactyl.assert(marks.length > 0, _("quickmark.none"));
if (filter.length > 0) { if (filter.length > 0) {
let pattern = util.charListToRegexp(filter, "a-zA-Z0-9"); let pattern = util.charListToRegexp(filter, "a-zA-Z0-9");
marks = marks.filter(function (qmark) pattern.test(qmark)); marks = marks.filter(function (qmark) pattern.test(qmark));
dactyl.assert(marks.length >= 0, "E283: No QuickMarks matching " + filter.quote()); dactyl.assert(marks.length >= 0, _("quickmark.noMatching", filter.quote()));
} }
commandline.commandOutput(template.tabular(["QuickMark", "URL"], [], commandline.commandOutput(template.tabular(["QuickMark", "URL"], [],
@@ -124,8 +124,8 @@ var QuickMarks = Module("quickmarks", {
function (args) { function (args) {
// TODO: finish arg parsing - we really need a proper way to do this. :) // TODO: finish arg parsing - we really need a proper way to do this. :)
// assert(args.bang ^ args[0]) // assert(args.bang ^ args[0])
dactyl.assert( args.bang || args[0], "E471: Argument required"); dactyl.assert( args.bang || args[0], _("error.argumentRequired"));
dactyl.assert(!args.bang || !args[0], "E474: Invalid argument"); dactyl.assert(!args.bang || !args[0], _("error.invalidArgument"));
if (args.bang) if (args.bang)
quickmarks.removeAll(); quickmarks.removeAll();
@@ -142,7 +142,7 @@ var QuickMarks = Module("quickmarks", {
"Mark a URL with a letter for quick access", "Mark a URL with a letter for quick access",
function (args) { function (args) {
dactyl.assert(/^[a-zA-Z0-9]$/.test(args[0]), dactyl.assert(/^[a-zA-Z0-9]$/.test(args[0]),
"E191: Argument must be an ASCII letter or digit"); _("quickmark.invalid"));
if (!args[1]) if (!args[1])
quickmarks.add(args[0], buffer.uri.spec); quickmarks.add(args[0], buffer.uri.spec);
else else
@@ -197,7 +197,7 @@ var QuickMarks = Module("quickmarks", {
mappings.add(myModes, mappings.add(myModes,
["M"], "Add new QuickMark for current URL", ["M"], "Add new QuickMark for current URL",
function ({ arg }) { function ({ arg }) {
dactyl.assert(/^[a-zA-Z0-9]$/.test(arg), "E191: Argument must be an ASCII letter or digit"); dactyl.assert(/^[a-zA-Z0-9]$/.test(arg), _("quickmark.invalid"));
quickmarks.add(arg, buffer.uri.spec); quickmarks.add(arg, buffer.uri.spec);
}, },
{ arg: true }); { arg: true });

View File

@@ -409,7 +409,7 @@ var Tabs = Module("tabs", {
*/ */
selectAlternateTab: function () { selectAlternateTab: function () {
dactyl.assert(tabs.alternate != null && tabs.getTab() != tabs.alternate, dactyl.assert(tabs.alternate != null && tabs.getTab() != tabs.alternate,
"E23: No alternate page"); _("buffer.noAlternate"));
tabs.select(tabs.alternate); tabs.select(tabs.alternate);
}, },
@@ -476,9 +476,9 @@ var Tabs = Module("tabs", {
matches = completion.runCompleter("buffer", buffer).map(function (obj) obj.tab); matches = completion.runCompleter("buffer", buffer).map(function (obj) obj.tab);
if (matches.length == 0) if (matches.length == 0)
dactyl.echoerr("E94: No matching buffer for " + buffer); dactyl.echoerr(_("buffer.noMatching", buffer));
else if (matches.length > 1 && !allowNonUnique) else if (matches.length > 1 && !allowNonUnique)
dactyl.echoerr("E93: More than one match for " + buffer); dactyl.echoerr(_("buffer.multipleMatching", buffer));
else { else {
let start = matches.indexOf(tabs.getTab()); let start = matches.indexOf(tabs.getTab());
if (start == -1 && reverse) if (start == -1 && reverse)
@@ -565,9 +565,9 @@ var Tabs = Module("tabs", {
} }
if (removed > 0) if (removed > 0)
dactyl.echomsg(removed + " fewer tab(s)", 9); dactyl.echomsg(_("buffer.fewer", removed, removed == 1 ? "" : "s"), 9);
else else
dactyl.echoerr("E94: No matching tab for " + arg); dactyl.echoerr(_("buffer.noMatching", arg));
} }
else // just remove the current tab else // just remove the current tab
tabs.remove(tabs.getTab(), Math.max(count, 1), special); tabs.remove(tabs.getTab(), Math.max(count, 1), special);
@@ -644,7 +644,7 @@ var Tabs = Module("tabs", {
if (/^\d+$/.test(arg)) if (/^\d+$/.test(arg))
tabs.select("-" + arg, true); tabs.select("-" + arg, true);
else else
dactyl.echoerr("E488: Trailing characters"); dactyl.echoerr(_("error.trailing"));
} }
else if (count > 0) else if (count > 0)
tabs.select("-" + count, true); tabs.select("-" + count, true);
@@ -667,7 +667,7 @@ var Tabs = Module("tabs", {
// count is ignored if an arg is specified, as per Vim // count is ignored if an arg is specified, as per Vim
if (arg) { if (arg) {
dactyl.assert(/^\d+$/.test(arg), "E488: Trailing characters"); dactyl.assert(/^\d+$/.test(arg), _("error.trailing"));
index = arg - 1; index = arg - 1;
} }
else else
@@ -736,7 +736,7 @@ var Tabs = Module("tabs", {
// FIXME: tabmove! N should probably produce an error // FIXME: tabmove! N should probably produce an error
dactyl.assert(!arg || /^([+-]?\d+)$/.test(arg), dactyl.assert(!arg || /^([+-]?\d+)$/.test(arg),
"E488: Trailing characters"); _("error.trailing"));
// if not specified, move to after the last tab // if not specified, move to after the last tab
tabs.move(config.tabbrowser.mCurrentTab, arg || "$", args.bang); tabs.move(config.tabbrowser.mCurrentTab, arg || "$", args.bang);
@@ -764,11 +764,7 @@ var Tabs = Module("tabs", {
commands.add(["tabde[tach]"], commands.add(["tabde[tach]"],
"Detach current tab to its own window", "Detach current tab to its own window",
function () { function () { tabs.detachTab(null); },
dactyl.assert(tabs.count > 1, "Can't detach the last tab");
tabs.detachTab(null);
},
{ argCount: "0" }); { argCount: "0" });
commands.add(["tabdu[plicate]"], commands.add(["tabdu[plicate]"],
@@ -795,13 +791,13 @@ var Tabs = Module("tabs", {
"Attach the current tab to another window", "Attach the current tab to another window",
function (args) { function (args) {
dactyl.assert(args.length <= 2 && !args.some(function (i) !/^\d+$/.test(i)), dactyl.assert(args.length <= 2 && !args.some(function (i) !/^\d+$/.test(i)),
"E488: Trailing characters"); _("error.trailing"));
let [winIndex, tabIndex] = args.map(parseInt); let [winIndex, tabIndex] = args.map(parseInt);
let win = dactyl.windows[winIndex - 1]; let win = dactyl.windows[winIndex - 1];
dactyl.assert(win, "Window " + winIndex + " does not exist"); dactyl.assert(win, _("window.noIndex", winIndex));
dactyl.assert(win != window, "Can't reattach to the same window"); dactyl.assert(win != window, _("window.cantAttachSame"));
let browser = win.getBrowser(); let browser = win.getBrowser();
let dummy = browser.addTab("about:blank"); let dummy = browser.addTab("about:blank");
@@ -846,7 +842,7 @@ var Tabs = Module("tabs", {
return; return;
} }
dactyl.echoerr("Exxx: No matching closed tab"); dactyl.echoerr(_("buffer.noClosed"));
} }
}, { }, {
argCount: "?", argCount: "?",

View File

@@ -0,0 +1,107 @@
abbrev.noSuch = No such abbreviation
abbrev.none = No abbreviations found
autocmd.executing- = Executing %S Auto commands for %S
autocmd.autocommand- = autocommand %S
autocmd.noMatching = No matching autocommands
autocmd.noGroup- = No such group or event: %S
autocmd.cantExecuteAll = Can't execute autocommands for ALL events
bookmark.noMatching- = No bookmarks matching tags %S and string %S
bookmark.noMatchingTags- = No bookmarks matching tags %S
bookmark.noMatchingString- = No bookmarks matching string %S
bookmark.none = No bookmarks set
bookmark.cantAdd- = Could not add bookmark %S
bookmark.allGone = All bookmarks deleted
buffer.fewer- = %S fewer tab%S
buffer.cantDetatchLast = Can't detach the last tab
buffer.noMatching- = No matching buffer for %S
buffer.multipleMatching- = More than one match for %S
buffer.noClosed = No matching closed tab
buffer.noAlternate = No alternate page
dactyl.parsingCommandLine = Parsing command line options: %S
dialog.notAvailable = Dialog %S not available
editor.noEditor = No editor specified
emenu.notFound = Menu not found: %S
event.error = Processing %S event: %S
event.nothingToPass = No events to pass
help.dontPanic = E478: Don't panic!
help.noFile = Sorry, help file %S not found
help.noTopic = Sorry, no help for %S
hints.noMatcher = Invalid hintmatching type: %S
history.noMatching- = No history matching %S
history.none = No history set
history.noURL = URL not found in history
io.notReadable- = Can't open file %S
io.notWriteable- = %S: Can't open file for writing
io.exists = File exists (add ! to override)
macro.canceled- = Canceled playback of macro '%S'
macro.recorded- = Recorded macro '%S'
macro.loadFailed- = Page did not load completely in %S seconds.
macro.loadWaiting = Waiting for page to load...
macro.noSuch- = Macro '%S' not set
macro.noPrevious = No previous macro
macro.invalid- = Invalid macro name: '%S'
map.builtinImmutable = Cannot change mappings in the builtin group
map.none = No mapping found
map.noSuch- = No such mapping: %S
map.recursive = Attempt to execute mapping recursively: %S
mark.none = No marks set
mark.invalid = Invalid mark
mark.unset- = Mark not set: %S
mark.noMatching = E283: No marks matching %S
mow.noPreviousOutput = No previous command output
plugin.searchingFor = Searching for %S
plugin.searchingForIn = Searching for %S in %S
print.toFile = Printing to file: %S
print.sending = Sending to printer...
print.sent = Print job sent.
print.printed = Printed: %S
quickmark.none = No QuickMarks set
quickmark.noMatching = No QuickMarks matching %S
quickmark.notSet = QuickMark not set
quickmark.invalid = Argument must be an ASCII letter or digit
save.invalidDestination = Invalid destination: %S
status.link- = Link: %S
time.total = Total time: %S
window.cantAttachSame = Can't reattach to the same window
window.noIndex = Window %S does not exist
zoom.outOfRange = Zoom value out of range (%S - %S%%)
zoom.illegal = Illegal zoom value
error.clipboardEmpty = No clipboard data
error.countRequired- = Count required for %S
error.cantOpen- = Error opening %S: %S
error.interrupted = Interrupted
error.invalidSort- = Invalid sort order: %S
error.argRequired = Argument required
error.trailing = Trailing characters
error.invalidArgument = Invalid argument
error.invalidArgument- = Invalid argument: %S
error.argumentRequired = Argument required
error.argumentOrBang = Argument or ! required
# vim:se ft=jproperties tw=0:

View File

@@ -0,0 +1,73 @@
// Copyright (c) 2011 by Kris Maglione <maglione.k@gmail.com>
//
// This work is licensed for reuse under an MIT license. Details are
// given in the LICENSE.txt file included with this file.
"use strict";
try {
Components.utils.import("resource://dactyl/bootstrap.jsm");
defineModule("messages", {
exports: ["Messages", "messages", "_"],
require: ["services", "util"]
}, this);
// TODO: Lazy instantiation
var Messages = Module("messages", {
init: function init() {
let self = this;
this.bundle = services.stringBundle.createBundle(JSMLoader.getTarget("dactyl://locale/messages.properties"));
let seen = {};
for (let prop in iter(this.bundle.getSimpleEnumeration())) {
let key = prop.QueryInterface(Ci.nsIPropertyElement).key.split(".")[0];
if (!set.add(seen, key))
this[key] = {
__noSuchMethod__: function __(prop, args) self._.apply(self, [prop].concat(args))
};
}
},
cleanup: function cleanup() {
services.stringBundle.flushBundles();
},
_: function _(message) {
if (arguments.length > 1) {
let args = Array.slice(arguments, 1);
return this.format(message + "-", args, null) || this.format(message, args);
}
return this.get(message);
},
get: function get(value, default_) {
try {
return this.bundle.GetStringFromName(value);
}
catch (e) {
return arguments.length > 1 ? default_ : value;
}
},
format: function format(value, args, default_) {
try {
return this.bundle.formatStringFromName(value, args, args.length);
}
catch (e) {
return arguments.length > 2 ? default_ : value;
}
}
}, {
}, {
});
var { _ } = messages.closure;
endModule();
} catch(e){ if (!e.stack) e = Error(e); dump(e.fileName+":"+e.lineNumber+": "+e+"\n" + e.stack); }
// vim: set fdm=marker sw=4 ts=4 et ft=javascript:

View File

@@ -163,6 +163,7 @@ var Overlay = Module("Overlay", {
"highlight", "highlight",
"io", "io",
"javascript", "javascript",
"messages",
"options", "options",
"overlay", "overlay",
"prefs", "prefs",