1 { classes: Cc, interfaces: Ci } = Components
3 { unload } = require 'unload'
5 PREF_BRANCH = 'extensions.VimFx.'
6 DEFAULT_PREFS_FILE = 'defaults/preferences/defaults.js'
8 # Default values for preferences are now specified in
9 # defaults/preferences/defaults.js
11 getBranchPref = (branch, key, defaultValue) ->
12 type = branch.getPrefType(key)
16 return branch.getBoolPref(key)
18 return branch.getIntPref(key)
19 when branch.PREF_STRING
20 return branch.getCharPref(key)
22 if defaultValue != undefined
26 prefs = Cc['@mozilla.org/preferences-service;1'].getService(Ci.nsIPrefService)
27 branch = prefs.getBranch(PREF_BRANCH)
30 branch.prefHasUserValue(key)
33 prefs = Cc['@mozilla.org/preferences-service;1'].getService(Ci.nsIPrefService)
34 branch = prefs.getBranch(PREF_BRANCH)
36 return (key, defaultValue = undefined) ->
37 return getBranchPref(branch, key, defaultValue)
40 getComplexPref = do ->
41 prefs = Cc['@mozilla.org/preferences-service;1'].getService(Ci.nsIPrefService)
42 branch = prefs.getBranch(PREF_BRANCH)
45 return branch.getComplexValue(key, Ci.nsISupportsString).data
47 getFirefoxPref = do ->
48 prefs = Cc['@mozilla.org/preferences-service;1'].getService(Ci.nsIPrefService)
49 branch = prefs.getBranch('')
51 return (key, defaultValue = undefined) ->
52 return getBranchPref(branch, key, defaultValue)
54 makePrefSetter = (branch) ->
55 return (key, value) ->
58 branch.setBoolPref(key, value)
60 branch.setIntPref(key, value)
62 branch.setCharPref(key, value)
64 branch.clearUserPref(key)
66 # Assign and save Firefox preference value
68 prefs = Cc['@mozilla.org/preferences-service;1'].getService(Ci.nsIPrefService)
69 return makePrefSetter(prefs.getBranch(PREF_BRANCH))
72 scriptLoader = Cc['@mozilla.org/moz/jssubscript-loader;1'].getService(Ci.mozIJSSubScriptLoader)
73 ioService = Cc['@mozilla.org/network/io-service;1'].getService(Ci.nsIIOService)
74 prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService)
76 baseUri = ioService.newURI(__SCRIPT_URI_SPEC__, null, null)
77 uri = ioService.newURI(DEFAULT_PREFS_FILE, null, baseUri)
79 if uri.QueryInterface(Ci.nsIFileURL).file.exists()
80 branch = prefs.getDefaultBranch("")
81 scope = { pref: makePrefSetter(branch) }
82 scriptLoader.loadSubScript(uri.spec, scope)
84 exports.isPrefSet = isPrefSet
85 exports.getPref = getPref
86 exports.getComplexPref = getComplexPref
87 exports.getFirefoxPref = getFirefoxPref
88 exports.setPref = setPref
89 exports.setDefaultPrefs = setDefaultPrefs