From 6ee586087a2687f1f04bf8016b4d0a9452add18e Mon Sep 17 00:00:00 2001 From: Kris Maglione Date: Sat, 5 Feb 2011 07:30:46 -0500 Subject: [PATCH] Use current group to select :style hive. Clear previous colorscheme's styles on :colo. --HG-- branch : groups --- common/content/contexts.js | 18 +++++++++++++++--- common/content/mappings.js | 13 +++---------- common/modules/highlight.jsm | 11 ++++++++--- common/modules/io.jsm | 5 ++--- common/modules/styles.jsm | 35 +++++++++++++++++++++++++---------- 5 files changed, 53 insertions(+), 29 deletions(-) diff --git a/common/content/contexts.js b/common/content/contexts.js index 1903a8fa..793b960b 100644 --- a/common/content/contexts.js +++ b/common/content/contexts.js @@ -76,11 +76,11 @@ var Contexts = Module("contexts", { context: null, groups: Class.memoize(function () Object.create(Group.groupsProto, { - groups: { value: this.groupList.filter(function (g) g.filter(buffer.uri)) } + groups: { value: this.activeGroups().filter(function (g) g.filter(buffer.uri)) } })), allGroups: Class.memoize(function () Object.create(Group.groupsProto, { - groups: { value: this.groupList } + groups: { value: this.activeGroups() } })), activeGroups: function (subgroup) @@ -174,7 +174,19 @@ var Contexts = Module("contexts", { action.toString = function toString() (type === default_ ? "" : type + " ") + rhs; args = null; return action; - } + }, + + GroupFlag: function (name) ({ + names: ["-group", "-g"], + + description: "Group to which to add", + + type: ArgType("group", function (group) isString(group) ? contexts.getGroup(group, name) : group[name]), + + get default() (contexts.context && contexts.context.group || contexts.user)[name], + + completer: function (context) completion.group(context) + }) }, { Context: modules.Script = function Context(file, group, args) { function Const(val) Class.Property({ enumerable: true, value: val }); diff --git a/common/content/mappings.js b/common/content/mappings.js index 3930400c..7c7884e4 100644 --- a/common/content/mappings.js +++ b/common/content/mappings.js @@ -508,7 +508,7 @@ var Mappings = Module("mappings", { names: ["-ex", "-e"], description: "Execute this mapping as an Ex command rather than keys" }, - groupFlag, + contexts.GroupFlag("mappings"), { names: ["-javascript", "-js", "-j"], description: "Execute this mapping as JavaScript rather than keys" @@ -587,7 +587,7 @@ var Mappings = Module("mappings", { { argCount: "0", options: [ - groupFlag, + contexts.GroupFlag("mappings"), update({}, modeFlag, { names: ["-modes", "-mode", "-m"], type: CommandOption.LIST, @@ -616,7 +616,7 @@ var Mappings = Module("mappings", { argCount: "1", completer: opts.completer, options: [ - groupFlag, + contexts.GroupFlag("mappings"), update({}, modeFlag, { names: ["-modes", "-mode", "-m"], type: CommandOption.LIST, @@ -627,13 +627,6 @@ var Mappings = Module("mappings", { }); } - let groupFlag = { - names: ["-group", "-g"], - description: "Mapping group to which to add this mapping", - type: ArgType("map-group", function (group) isString(group) ? contexts.getGroup(group, "mappings") : group), - get default() (contexts.context && contexts.context.group || contexts.user).mappings, - completer: function (context) completion.group(context) - }; let modeFlag = { names: ["-mode", "-m"], type: CommandOption.STRING, diff --git a/common/modules/highlight.jsm b/common/modules/highlight.jsm index 5c557fc5..02d8e15b 100644 --- a/common/modules/highlight.jsm +++ b/common/modules/highlight.jsm @@ -291,16 +291,21 @@ var Highlights = Module("Highlight", { }, { commands: function (dactyl, modules) { const { autocommands, commands, completion, CommandOption, config, io } = modules; + + let lastScheme; commands.add(["colo[rscheme]"], "Load a color scheme", function (args) { let scheme = args[0]; + if (lastScheme) + lastScheme.unload(); if (scheme == "default") highlight.clear(); - else - dactyl.assert(modules.io.sourceFromRuntimePath(["colors/" + scheme + "." + config.fileExtension]), - "E185: Cannot find color scheme " + scheme); + else { + lastScheme = modules.io.sourceFromRuntimePath(["colors/" + scheme + "." + config.fileExtension]); + dactyl.assert(lastScheme, "E185: Cannot find color scheme " + scheme); + } autocommands.trigger("ColorScheme", { name: scheme }); }, { diff --git a/common/modules/io.jsm b/common/modules/io.jsm index 4603141e..1248e5a0 100644 --- a/common/modules/io.jsm +++ b/common/modules/io.jsm @@ -113,7 +113,7 @@ var IO = Module("io", { */ sourceFromRuntimePath: function sourceFromRuntimePath(paths, all) { let dirs = modules.options.get("runtimepath").files; - let found = false; + let found = null; dactyl.echomsg("Searching for " + paths.join(" ").quote() + " in " + modules.options.get("runtimepath").stringValue, 2); @@ -125,8 +125,7 @@ var IO = Module("io", { dactyl.echomsg("Searching for " + file.path.quote(), 3); if (file.exists() && file.isFile() && file.isReadable()) { - io.source(file.path, false); - found = true; + found = io.source(file.path, false) || true; if (!all) break outer; diff --git a/common/modules/styles.jsm b/common/modules/styles.jsm index ed893775..3dd52401 100644 --- a/common/modules/styles.jsm +++ b/common/modules/styles.jsm @@ -229,8 +229,8 @@ try { var Styles = Module("Styles", { init: function () { this._id = 0; - this.user = Hive("user"); - this.system = Hive("system"); + this.hives = []; + this.cleanup(); this.allSheets = {}; services["dactyl:"].providers["style"] = function styleProvider(uri) { @@ -242,8 +242,19 @@ var Styles = Module("Styles", { }, cleanup: function cleanup() { - for each (let hive in [this.user, this.system]) + for each (let hive in this.hives) hive.cleanup(); + this.user = this.addHive("user"); + this.system = this.addHive("system"); + }, + + addHive: function addHive(name) { + let hive = array.nth(this.hives, function (h) h.name === name, 0); + if (!hive) { + hive = Hive(name); + this.hives.push(hive); + } + return hive; }, __iterator__: function () Iterator(this.user.sheets.concat(this.system.sheets)), @@ -425,7 +436,7 @@ var Styles = Module("Styles", { }) }, { commands: function (dactyl, modules, window) { - const commands = modules.commands; + const { commands, contexts } = modules; commands.add(["sty[le]"], "Add or list user styles", @@ -434,17 +445,17 @@ var Styles = Module("Styles", { if (css) { if ("-append" in args) { - let sheet = styles.user.get(args["-name"]); + let sheet = args["-group"].get(args["-name"]); if (sheet) { filter = sheet.sites.concat(filter).join(","); css = sheet.css + " " + css; } } - styles.user.add(args["-name"], filter, css, args["-agent"]); + args["-group"].add(args["-name"], filter, css, args["-agent"]); } else { - let list = styles.user.sheets.slice() + let list = args["-group"].sheets.slice() .sort(function (a, b) a.name && b.name ? String.localeCompare(a.name, b.name) : !!b.name - !!a.name || a.id - b.id); let uris = util.visibleURIs(window.content); @@ -455,7 +466,7 @@ var Styles = Module("Styles", { "padding: 0 1em 0 1ex; vertical-align: top;", "padding: 0 1em 0 0; vertical-align: top;"], ([sheet.enabled ? "" : UTF8("×"), - sheet.name || styles.user.sheets.indexOf(sheet), + sheet.name || args["-group"].sheets.indexOf(sheet), sheet.formatSites(uris), sheet.css] for (sheet in values(list)) @@ -466,7 +477,7 @@ var Styles = Module("Styles", { bang: true, completer: function (context, args) { let compl = []; - let sheet = styles.user.get(args["-name"]); + let sheet = args["-group"].get(args["-name"]); if (args.completeArg == 0) { if (sheet) context.completions = [[sheet.sites.join(","), "Current Value"]]; @@ -483,10 +494,11 @@ var Styles = Module("Styles", { options: [ { names: ["-agent", "-A"], description: "Apply style as an Agent sheet" }, { names: ["-append", "-a"], description: "Append site filter and css to an existing, matching sheet" }, + contexts.GroupFlag("styles"), { names: ["-name", "-n"], description: "The name of this stylesheet", - completer: function () [[k, v.css] for ([k, v] in Iterator(styles.user.names))], + completer: function () [[k, v.css] for ([k, v] in Iterator(args["-group"].names))], type: modules.CommandOption.STRING } ], @@ -587,6 +599,9 @@ var Styles = Module("Styles", { }); }); }, + contexts: function (dactyl, modules, window) { + modules.Group.SubGroup("styles", function (group) styles.addHive(group.name)); + }, completion: function (dactyl, modules, window) { const names = Array.slice(util.computedStyle(window.document.createElement("div"))); modules.completion.css = function (context) {