summary refs log tree commit diff stats
path: root/ranger/shared/settings.py
diff options
context:
space:
mode:
Diffstat (limited to 'ranger/shared/settings.py')
-rw-r--r--ranger/shared/settings.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/ranger/shared/settings.py b/ranger/shared/settings.py
new file mode 100644
index 00000000..def09c4e
--- /dev/null
+++ b/ranger/shared/settings.py
@@ -0,0 +1,49 @@
+from inspect import isclass, ismodule
+from ranger.ext.openstruct import OpenStruct
+from ranger.gui.colorscheme import ColorScheme
+
+ALLOWED_SETTINGS = """
+show_hidden scroll_offset directories_first
+preview_files max_history_size colorscheme
+apps keys
+""".split()
+
+# overwrite single default options with custom options
+from ranger.defaults import options
+try:
+	import options as custom_options
+	for setting in ALLOWED_SETTINGS:
+		if hasattr(custom_options, setting):
+			setattr(options, setting, getattr(custom_options, setting))
+		elif not hasattr(options, setting):
+			raise Exception("Following option was not defined: " + setting)
+except ImportError:
+	pass
+
+# If a module is specified as the colorscheme, replace it with one
+# valid colorscheme inside that module.
+
+if isclass(options.colorscheme) and \
+		issubclass(options.colorscheme, ColorScheme):
+	options.colorscheme = options.colorscheme()
+
+elif ismodule(options.colorscheme):
+	for var_name in dir(options.colorscheme):
+		var = getattr(options.colorscheme, var_name)
+		if var != ColorScheme and isclass(var) and issubclass(var, ColorScheme):
+			options.colorscheme = var()
+			break
+	else:
+		raise Exception("The given colorscheme module contains no valid colorscheme!")
+
+else:
+	raise Exception("Cannot locate colorscheme!")
+
+
+# -- globalize the settings --
+class SettingsAware(object):
+	settings = OpenStruct()
+
+for setting in ALLOWED_SETTINGS:
+	SettingsAware.settings[setting] = getattr(options, setting)
+