diff --git a/common/content/commandline.js b/common/content/commandline.js index 9898d77a..a61bfa57 100644 --- a/common/content/commandline.js +++ b/common/content/commandline.js @@ -306,12 +306,6 @@ var CommandWidgets = Class("CommandWidgets", { var CommandMode = Class("CommandMode", { init: function init() { this.keepCommand = userContext.hidden_option_command_afterimage; - - if (this.historyKey) - this.history = CommandLine.History(commandline.widgets.active.command.inputField, this.historyKey, this); - - if (this.complete) - this.completions = CommandLine.Completions(commandline.widgets.active.command.inputField, this); }, open: function (command) { @@ -325,7 +319,13 @@ var CommandMode = Class("CommandMode", { this.widgets.prompt = this.prompt; this.widgets.command = command || ""; - if (this.completions && command && options["autocomplete"].length) + if (this.historyKey) + this.history = CommandLine.History(commandline.widgets.active.command.inputField, this.historyKey, this); + + if (this.complete) + this.completions = CommandLine.Completions(commandline.widgets.active.command.inputField, this); + + if (this.completions && command && options["autocomplete"].length && commandline.commandSession === this) this.completions.complete(true, false); }, @@ -337,7 +337,7 @@ var CommandMode = Class("CommandMode", { enter: function (stack) { commandline.commandSession = this; - if (this.command || stack.pop && commandline.command) { + if (stack.pop && commandline.command) { this.onChange(commandline.command); if (this.completions && stack.pop) this.completions.complete(true, false); diff --git a/common/content/dactyl.js b/common/content/dactyl.js index 90d88c87..b5003ca3 100644 --- a/common/content/dactyl.js +++ b/common/content/dactyl.js @@ -61,23 +61,27 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), { "dactyl-cleanup": function dactyl_cleanup() { let modules = dactyl.modules; - for (let name in values(Object.getOwnPropertyNames(modules).reverse())) { - let mod = Object.getOwnPropertyDescriptor(modules, name).value; - if (mod instanceof Class) { + let mods = Object.getOwnPropertyNames(modules).reverse() + .map(function (name) Object.getOwnPropertyDescriptor(modules, name).value); + + for (let mod in values(mods)) + if (mod instanceof ModuleBase || mod && mod.isLocalModule) { if ("cleanup" in mod) this.trapErrors(mod.cleanup, mod); if ("destroy" in mod) this.trapErrors(mod.destroy, mod); - if ("INIT" in mod && "cleanup" in mod.INIT) - this.trapErrors(mod.cleanup, mod, dactyl, modules, window); } - } + + for (let mod in values(mods)) + if (mod instanceof Class && "INIT" in mod && "cleanup" in mod.INIT) + this.trapErrors(mod.cleanup, mod, dactyl, modules, window); for (let name in values(Object.getOwnPropertyNames(modules).reverse())) try { delete modules[name]; } catch (e) {} + modules.__proto__ = {}; } }, diff --git a/common/modules/base.jsm b/common/modules/base.jsm index f147ebf1..1b1293bc 100644 --- a/common/modules/base.jsm +++ b/common/modules/base.jsm @@ -917,6 +917,7 @@ Module.INIT = { let module = this, objs = {}; for (let i in locals) module = objs[i] = Object.create(module); + module.isLocalModule = true; modules.jsmodules[this.constructor.className] = module; locals.reverse().forEach(function (fn, i) update(objs[i], fn.apply(module, args))) diff --git a/common/modules/io.jsm b/common/modules/io.jsm index bdcdf940..9b5f1492 100644 --- a/common/modules/io.jsm +++ b/common/modules/io.jsm @@ -1021,7 +1021,7 @@ unlet s:cpo_save modules.JavaScript.setCompleter([File, File.expandPath], [function (context, obj, args) { context.quote[2] = ""; - completion.file(context, true); + modules.completion.file(context, true); }]); }, diff --git a/common/modules/overlay.jsm b/common/modules/overlay.jsm index 411d7f43..0178e5d2 100644 --- a/common/modules/overlay.jsm +++ b/common/modules/overlay.jsm @@ -156,11 +156,16 @@ var Overlay = Module("Overlay", { "completion", "config", "downloads", + "finder", + "highlight", + "io", "javascript", "overlay", "prefs", "services", "storage", + "styles", + "template", "util" ].forEach(function (name) defineModule.time("load", name, require, null, jsmodules, name)); @@ -173,17 +178,12 @@ var Overlay = Module("Overlay", { "commands", "editor", "events", - "finder", - "highlight", "hints", - "io", "mappings", "marks", "mow", "options", - "statusline", - "styles", - "template" + "statusline" ].forEach(function (name) defineModule.time("load", name, modules.load, modules, name)); config.scripts.forEach(modules.load);