From 465bff736d234e57efb2e9232df8882f3fd3a5cb Mon Sep 17 00:00:00 2001 From: hut Date: Sun, 6 Dec 2009 12:31:33 +0100 Subject: changing implementation of options --- ranger.py | 9 ++- ranger/bookmark.py | 5 +- ranger/colorschemes/__init__.py | 22 +++++++ ranger/colorschemes/snow.py | 57 ++++++++++++++++ ranger/conf/__init__.py | 18 ++++++ ranger/conf/apps.py | 61 ------------------ ranger/conf/colorschemes/__init__.py | 0 ranger/conf/colorschemes/snow.py | 57 ---------------- ranger/conf/keys.py | 122 ----------------------------------- ranger/conf/options.py | 13 ---- ranger/defaults/__init__.py | 0 ranger/defaults/apps.py | 61 ++++++++++++++++++ ranger/defaults/keys.py | 122 +++++++++++++++++++++++++++++++++++ ranger/defaults/options.py | 18 ++++++ ranger/fm.py | 5 +- ranger/gui/colorscheme.py | 24 ++++++- ranger/gui/wconsole.py | 4 +- ranger/helper.py | 9 +++ ranger/main.py | 28 ++++++-- ranger/mimetype.py | 2 +- 20 files changed, 370 insertions(+), 267 deletions(-) create mode 100644 ranger/colorschemes/__init__.py create mode 100644 ranger/colorschemes/snow.py delete mode 100644 ranger/conf/apps.py delete mode 100644 ranger/conf/colorschemes/__init__.py delete mode 100644 ranger/conf/colorschemes/snow.py delete mode 100644 ranger/conf/keys.py delete mode 100644 ranger/conf/options.py create mode 100644 ranger/defaults/__init__.py create mode 100644 ranger/defaults/apps.py create mode 100644 ranger/defaults/keys.py create mode 100644 ranger/defaults/options.py diff --git a/ranger.py b/ranger.py index 9a2e59c1..090789c5 100755 --- a/ranger.py +++ b/ranger.py @@ -22,9 +22,12 @@ try: from ranger.main import main except ImportError as errormessage: - print(errormessage) - print("To run an uninstalled copy of ranger,") - print("launch ranger.py in the top directory.") + if str(errormessage).endswith("main"): + print("Can't import the main module.") + print("To run an uninstalled copy of ranger,") + print("launch ranger.py in the top directory.") + else: + raise else: main() diff --git a/ranger/bookmark.py b/ranger/bookmark.py index 4b931292..da54e8eb 100644 --- a/ranger/bookmark.py +++ b/ranger/bookmark.py @@ -37,7 +37,10 @@ class Bookmarks(object): def get_mtime(self): import os - return os.stat(self.path).st_mtime + try: + return os.stat(self.path).st_mtime + except OSError: + return None def load(self): try: diff --git a/ranger/colorschemes/__init__.py b/ranger/colorschemes/__init__.py new file mode 100644 index 00000000..6319fa96 --- /dev/null +++ b/ranger/colorschemes/__init__.py @@ -0,0 +1,22 @@ +from ranger.helper import get_all, log +from os.path import expanduser, dirname, exists, join + +__all__ = get_all(dirname(__file__)) + +from ranger.colorschemes import * + +confpath = expanduser('~/.ranger') +if exists(join(confpath, 'colorschemes')): + initpy = join(confpath, 'colorschemes/__init__.py') + if not exists(initpy): + open(initpy, 'w').write("""import ranger.helper, os.path +__all__ = ranger.helper.get_all( os.path.dirname( __file__ ) ) +""") + + try: + import sys + sys.path[0:0] = [confpath] + from colorschemes import * + except ImportError: + pass + diff --git a/ranger/colorschemes/snow.py b/ranger/colorschemes/snow.py new file mode 100644 index 00000000..baad5e43 --- /dev/null +++ b/ranger/colorschemes/snow.py @@ -0,0 +1,57 @@ +from ranger.gui.colorscheme import ColorScheme +from ranger.gui.color import * + +class Snow(ColorScheme): + def use(self, context): + fg, bg, attr = default_colors + + if context.reset: + pass + + elif context.in_display: + if context.selected: + attr = reverse + else: + attr = normal + + if context.empty or context.error: + bg = red + + if context.media: + if context.image: + fg = yellow + else: + fg = magenta + + if context.container: + fg = red + + if context.document: + fg = default + + if context.directory: + fg = blue + + elif context.executable and not any((context.media, context.container, context.document)): + attr |= bold + fg = green + + if context.link: + fg = cyan + + if context.maindisplay and context.selected: + attr |= bold + + elif context.in_titlebar: + attr |= bold + + if context.hostname: + fg = green + + elif context.directory: + fg = blue + + elif context.link: + fg = cyan + + return fg, bg, attr diff --git a/ranger/conf/__init__.py b/ranger/conf/__init__.py index e69de29b..4c02ae0a 100644 --- a/ranger/conf/__init__.py +++ b/ranger/conf/__init__.py @@ -0,0 +1,18 @@ + +import sys, os +sys.path[0:0] = [os.path.expanduser('~/.ranger')] + +try: + import keys +except ImportError: + from ranger.defaults import keys + +try: + import apps +except ImportError: + from ranger.defaults import apps + +try: + import options +except ImportError: + from ranger.defaults import options diff --git a/ranger/conf/apps.py b/ranger/conf/apps.py deleted file mode 100644 index 041b85c8..00000000 --- a/ranger/conf/apps.py +++ /dev/null @@ -1,61 +0,0 @@ -from ranger.applications import Applications as SuperClass -from ranger.helper import popen as run - -class CustomApplications(SuperClass): - # How to determine the default application? {{{ - def app_default(self, **kw): - f = kw['mainfile'] - - if f.extension is not None and f.extension in ('pdf'): - return self.app_evince(**kw) - - if f.container: - return self.app_aunpack(**kw) - - if f.video or f.audio: - if f.video: - kw['flags'] += 'd' - return self.app_mplayer(**kw) - - if f.image: - return self.app_feh(**kw) - - if f.document: - return self.app_editor(**kw) - # }}} - - def app_pager(self, **kw): - return run('less', *kw['files'], **kw) - - def app_vim(self, **kw): - return run('vim', *kw['files'], **kw) - - app_editor = app_vim - - def app_mplayer(self, **kw): - if kw['mode'] == 1: - return run('mplayer', *kw['files'], **kw) - - elif kw['mode'] == 2: - return run('mplayer', '-fs', - '-sid', '0', - '-vfm', 'ffmpeg', - '-lavdopts', 'lowres=1:fast:skiploopfilter=all:threads=8', - *kw['files'], **kw) - - else: - return run('mplayer', '-fs', *kw['files'], **kw) - - def app_feh(self, **kw): - return run('feh', *kw['files'], **kw) - - def app_aunpack(self, **kw): - m = kw['mode'] - if m == 0: - kw['flags'] += 'p' - return run('aunpack', '-l', *kw['files'], **kw) - elif m == 1: - return run('aunpack', *kw['files'], **kw) - - def app_evince(self, **kw): - return run('evince', *kw['files'], **kw) diff --git a/ranger/conf/colorschemes/__init__.py b/ranger/conf/colorschemes/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ranger/conf/colorschemes/snow.py b/ranger/conf/colorschemes/snow.py deleted file mode 100644 index 017a83db..00000000 --- a/ranger/conf/colorschemes/snow.py +++ /dev/null @@ -1,57 +0,0 @@ -from ranger.gui.colorscheme import ColorScheme -from ranger.gui.color import * - -class MyColorScheme(ColorScheme): - def use(self, context): - fg, bg, attr = default_colors - - if context.reset: - pass - - elif context.in_display: - if context.selected: - attr = reverse - else: - attr = normal - - if context.empty or context.error: - bg = red - - if context.media: - if context.image: - fg = yellow - else: - fg = magenta - - if context.container: - fg = red - - if context.document: - fg = default - - if context.directory: - fg = blue - - elif context.executable and not any((context.media, context.container, context.document)): - attr |= bold - fg = green - - if context.link: - fg = cyan - - if context.maindisplay and context.selected: - attr |= bold - - elif context.in_titlebar: - attr |= bold - - if context.hostname: - fg = green - - elif context.directory: - fg = blue - - elif context.link: - fg = cyan - - return fg, bg, attr diff --git a/ranger/conf/keys.py b/ranger/conf/keys.py deleted file mode 100644 index dc7362cf..00000000 --- a/ranger/conf/keys.py +++ /dev/null @@ -1,122 +0,0 @@ -def initialize_commands(cl): - from ranger.fm import FM - from curses.ascii import ctrl - from ranger.bookmark import ALLOWED_KEYS as ALLOWED_BOOKMARK_KEYS - import curses - - # syntax for binding keys: cl.bind(fnc, *keys) - # fnc is a function which is called with the FM instance, - # keys are one or more key-combinations which are either: - # * a string - # * an integer which represents an ascii code - # * a tuple of integers - - def curry(fnc, *args, **keywords): - return lambda fm: fnc(fm, *args, **keywords) - c=curry - - def move(**keywords): - return lambda fm: fm.move_pointer(**keywords) - - def move_pages(n): - return lambda fm: fm.move_pointer_by_pages(n) - - cl.bind(FM.move_left, 'h', curses.KEY_BACKSPACE, 127) - cl.bind(FM.move_right, 'l') - cl.bind(c(FM.move_right, mode=1), curses.KEY_ENTER, ctrl('j')) - cl.bind(c(FM.history_go, -1), 'H') - cl.bind(c(FM.history_go, 1), 'L') - cl.bind(move( relative = 1 ), 'j') - cl.bind(move_pages( 0.5 ), 'J') - cl.bind(move( relative = -1 ), 'k') - cl.bind(move_pages( -0.5 ), 'K') - cl.bind(move( absolute = 0 ), 'gg') - cl.bind(move( absolute = -1 ), 'G') - cl.bind(FM.edit_file, 'E') - - # toggle options - def toggle_option(string): - return lambda fm: fm.toggle_boolean_option(string) - - cl.bind(toggle_option('show_hidden'), 'th') - cl.bind(toggle_option('preview_files'), 'tp') - cl.bind(toggle_option('directories_first'), 'td') - - # key combinations which change the current directory - def cd(path): - return lambda fm: fm.enter_dir(path) - - cl.bind(cd("~"), 'gh') - cl.bind(cd("/etc"), 'ge') - cl.bind(cd("/usr"), 'gu') - cl.bind(cd("/"), 'gr') - cl.bind(cd("/media"), 'gm') - cl.bind(cd("/mnt"), 'gn') - cl.bind(cd("~/.trash"), 'gt') - cl.bind(cd("/srv"), 'gs') - - cl.bind(FM.search_forward, 'n') - cl.bind(FM.search_backward, 'N') - - # bookmarks - for key in ALLOWED_BOOKMARK_KEYS: - cl.bind(c(FM.enter_bookmark, key), "`" + key, "'" + key) - cl.bind(c(FM.set_bookmark, key), "m" + key) - cl.bind(c(FM.unset_bookmark, key), "um" + key) - - # system functions - cl.bind(FM.exit, ctrl('D'), 'q', 'ZZ') - cl.bind(FM.reset, ctrl('R')) - cl.bind(FM.redraw, ctrl('L')) - cl.bind(FM.interrupt, ctrl('C')) - cl.bind(FM.resize, curses.KEY_RESIZE) - cl.bind(FM.handle_mouse, curses.KEY_MOUSE) - cl.bind(curry(FM.open_console, ':'), ':') - cl.bind(curry(FM.open_console, '/'), '/') - cl.bind(curry(FM.open_console, '!'), '!') - cl.bind(curry(FM.open_console, '@'), 'r') - - def test(fm): - from ranger.helper import log - log(fm.bookmarks.dct) - cl.bind(test, 'x') - - cl.rebuild_paths() - - -def initialize_console_commands(cl): - from ranger.fm import FM - from ranger.gui.wconsole import WConsole - from curses.ascii import ctrl, ESC - import curses - - def type_key(key): - return lambda con, fm: con.type_key(key) - - def curry(fnc, *args, **keywords): - return lambda con, fm: fnc(con, *args, **keywords) - - def curry_fm(fnc, *args, **keywords): - return lambda con, fm: fnc(fm, *args, **keywords) - c_fm = curry_fm - c = curry - - # movement - cl.bind(c(WConsole.move, relative = -1), curses.KEY_LEFT, ctrl('b')) - cl.bind(c(WConsole.move, relative = 1), curses.KEY_RIGHT, ctrl('f')) - cl.bind(c(WConsole.move, absolute = 0), curses.KEY_HOME, ctrl('a')) - cl.bind(c(WConsole.move, absolute = -1), curses.KEY_END, ctrl('e')) - cl.bind(c(WConsole.delete, 0), curses.KEY_DC, ctrl('d')) - cl.bind(c(WConsole.delete, -1), curses.KEY_BACKSPACE, 127, ctrl('h')) - cl.bind(c(WConsole.delete_rest, -1), ctrl('U')) - cl.bind(c(WConsole.delete_rest, 1), ctrl('K')) - - # system functions - cl.bind(c(WConsole.close), ESC, ctrl('C')) - cl.bind(WConsole.execute, curses.KEY_ENTER, ctrl('j')) - cl.bind(c_fm(FM.redraw), ctrl('L')) - cl.bind(c_fm(FM.resize), curses.KEY_RESIZE) - - for i in range(ord(' '), ord('~')): - cl.bind(type_key(i), i) - diff --git a/ranger/conf/options.py b/ranger/conf/options.py deleted file mode 100644 index 00d2f9f3..00000000 --- a/ranger/conf/options.py +++ /dev/null @@ -1,13 +0,0 @@ -def get(): - """ to be implemented. read the options from a file. """ - pass - -def dummy(): - """ provide a way of getting options until get() is implemented """ - return { - 'show_hidden': False, - 'scroll_offset': 2, - 'directories_first': True, - 'preview_files' : False, - 'max_history_size': 20 - } diff --git a/ranger/defaults/__init__.py b/ranger/defaults/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/ranger/defaults/apps.py b/ranger/defaults/apps.py new file mode 100644 index 00000000..041b85c8 --- /dev/null +++ b/ranger/defaults/apps.py @@ -0,0 +1,61 @@ +from ranger.applications import Applications as SuperClass +from ranger.helper import popen as run + +class CustomApplications(SuperClass): + # How to determine the default application? {{{ + def app_default(self, **kw): + f = kw['mainfile'] + + if f.extension is not None and f.extension in ('pdf'): + return self.app_evince(**kw) + + if f.container: + return self.app_aunpack(**kw) + + if f.video or f.audio: + if f.video: + kw['flags'] += 'd' + return self.app_mplayer(**kw) + + if f.image: + return self.app_feh(**kw) + + if f.document: + return self.app_editor(**kw) + # }}} + + def app_pager(self, **kw): + return run('less', *kw['files'], **kw) + + def app_vim(self, **kw): + return run('vim', *kw['files'], **kw) + + app_editor = app_vim + + def app_mplayer(self, **kw): + if kw['mode'] == 1: + return run('mplayer', *kw['files'], **kw) + + elif kw['mode'] == 2: + return run('mplayer', '-fs', + '-sid', '0', + '-vfm', 'ffmpeg', + '-lavdopts', 'lowres=1:fast:skiploopfilter=all:threads=8', + *kw['files'], **kw) + + else: + return run('mplayer', '-fs', *kw['files'], **kw) + + def app_feh(self, **kw): + return run('feh', *kw['files'], **kw) + + def app_aunpack(self, **kw): + m = kw['mode'] + if m == 0: + kw['flags'] += 'p' + return run('aunpack', '-l', *kw['files'], **kw) + elif m == 1: + return run('aunpack', *kw['files'], **kw) + + def app_evince(self, **kw): + return run('evince', *kw['files'], **kw) diff --git a/ranger/defaults/keys.py b/ranger/defaults/keys.py new file mode 100644 index 00000000..dc7362cf --- /dev/null +++ b/ranger/defaults/keys.py @@ -0,0 +1,122 @@ +def initialize_commands(cl): + from ranger.fm import FM + from curses.ascii import ctrl + from ranger.bookmark import ALLOWED_KEYS as ALLOWED_BOOKMARK_KEYS + import curses + + # syntax for binding keys: cl.bind(fnc, *keys) + # fnc is a function which is called with the FM instance, + # keys are one or more key-combinations which are either: + # * a string + # * an integer which represents an ascii code + # * a tuple of integers + + def curry(fnc, *args, **keywords): + return lambda fm: fnc(fm, *args, **keywords) + c=curry + + def move(**keywords): + return lambda fm: fm.move_pointer(**keywords) + + def move_pages(n): + return lambda fm: fm.move_pointer_by_pages(n) + + cl.bind(FM.move_left, 'h', curses.KEY_BACKSPACE, 127) + cl.bind(FM.move_right, 'l') + cl.bind(c(FM.move_right, mode=1), curses.KEY_ENTER, ctrl('j')) + cl.bind(c(FM.history_go, -1), 'H') + cl.bind(c(FM.history_go, 1), 'L') + cl.bind(move( relative = 1 ), 'j') + cl.bind(move_pages( 0.5 ), 'J') + cl.bind(move( relative = -1 ), 'k') + cl.bind(move_pages( -0.5 ), 'K') + cl.bind(move( absolute = 0 ), 'gg') + cl.bind(move( absolute = -1 ), 'G') + cl.bind(FM.edit_file, 'E') + + # toggle options + def toggle_option(string): + return lambda fm: fm.toggle_boolean_option(string) + + cl.bind(toggle_option('show_hidden'), 'th') + cl.bind(toggle_option('preview_files'), 'tp') + cl.bind(toggle_option('directories_first'), 'td') + + # key combinations which change the current directory + def cd(path): + return lambda fm: fm.enter_dir(path) + + cl.bind(cd("~"), 'gh') + cl.bind(cd("/etc"), 'ge') + cl.bind(cd("/usr"), 'gu') + cl.bind(cd("/"), 'gr') + cl.bind(cd("/media"), 'gm') + cl.bind(cd("/mnt"), 'gn') + cl.bind(cd("~/.trash"), 'gt') + cl.bind(cd("/srv"), 'gs') + + cl.bind(FM.search_forward, 'n') + cl.bind(FM.search_backward, 'N') + + # bookmarks + for key in ALLOWED_BOOKMARK_KEYS: + cl.bind(c(FM.enter_bookmark, key), "`" + key, "'" + key) + cl.bind(c(FM.set_bookmark, key), "m" + key) + cl.bind(c(FM.unset_bookmark, key), "um" + key) + + # system functions + cl.bind(FM.exit, ctrl('D'), 'q', 'ZZ') + cl.bind(FM.reset, ctrl('R')) + cl.bind(FM.redraw, ctrl('L')) + cl.bind(FM.interrupt, ctrl('C')) + cl.bind(FM.resize, curses.KEY_RESIZE) + cl.bind(FM.handle_mouse, curses.KEY_MOUSE) + cl.bind(curry(FM.open_console, ':'), ':') + cl.bind(curry(FM.open_console, '/'), '/') + cl.bind(curry(FM.open_console, '!'), '!') + cl.bind(curry(FM.open_console, '@'), 'r') + + def test(fm): + from ranger.helper import log + log(fm.bookmarks.dct) + cl.bind(test, 'x') + + cl.rebuild_paths() + + +def initialize_console_commands(cl): + from ranger.fm import FM + from ranger.gui.wconsole import WConsole + from curses.ascii import ctrl, ESC + import curses + + def type_key(key): + return lambda con, fm: con.type_key(key) + + def curry(fnc, *args, **keywords): + return lambda con, fm: fnc(con, *args, **keywords) + + def curry_fm(fnc, *args, **keywords): + return lambda con, fm: fnc(fm, *args, **keywords) + c_fm = curry_fm + c = curry + + # movement + cl.bind(c(WConsole.move, relative = -1), curses.KEY_LEFT, ctrl('b')) + cl.bind(c(WConsole.move, relative = 1), curses.KEY_RIGHT, ctrl('f')) + cl.bind(c(WConsole.move, absolute = 0), curses.KEY_HOME, ctrl('a')) + cl.bind(c(WConsole.move, absolute = -1), curses.KEY_END, ctrl('e')) + cl.bind(c(WConsole.delete, 0), curses.KEY_DC, ctrl('d')) + cl.bind(c(WConsole.delete, -1), curses.KEY_BACKSPACE, 127, ctrl('h')) + cl.bind(c(WConsole.delete_rest, -1), ctrl('U')) + cl.bind(c(WConsole.delete_rest, 1), ctrl('K')) + + # system functions + cl.bind(c(WConsole.close), ESC, ctrl('C')) + cl.bind(WConsole.execute, curses.KEY_ENTER, ctrl('j')) + cl.bind(c_fm(FM.redraw), ctrl('L')) + cl.bind(c_fm(FM.resize), curses.KEY_RESIZE) + + for i in range(ord(' '), ord('~')): + cl.bind(type_key(i), i) + diff --git a/ranger/defaults/options.py b/ranger/defaults/options.py new file mode 100644 index 00000000..874cf9fb --- /dev/null +++ b/ranger/defaults/options.py @@ -0,0 +1,18 @@ +from ranger import colorschemes + +colorscheme = colorschemes.snow + +def get(): + """ to be implemented. read the options from a file. """ + pass + +def dummy(): + """ provide a way of getting options until get() is implemented """ + return { + 'show_hidden': False, + 'scroll_offset': 2, + 'directories_first': True, + 'preview_files' : False, + 'max_history_size': 20 + } + diff --git a/ranger/fm.py b/ranger/fm.py index 9a13332e..b481086a 100644 --- a/ranger/fm.py +++ b/ranger/fm.py @@ -1,12 +1,13 @@ from os import devnull -from ranger.conf.apps import CustomApplications as Applications +#from ranger.conf.apps import CustomApplications as Applications +from ranger.conf import apps null = open(devnull, 'a') class FM(): def __init__(self, environment, ui, bookmarks): self.env = environment self.ui = ui - self.apps = Applications() + self.apps = apps.CustomApplications() self.bookmarks = bookmarks self.bookmarks.enter_dir_function = self.enter_dir diff --git a/ranger/gui/colorscheme.py b/ranger/gui/colorscheme.py index d7833016..790112ec 100644 --- a/ranger/gui/colorscheme.py +++ b/ranger/gui/colorscheme.py @@ -8,7 +8,29 @@ CONTEXT_KEYS = [ 'reset', 'error', class ColorSchemeContext(): pass -class ColorScheme(): +# colorscheme specification: +# +# A colorscheme must... +# +# 1. be inside either of these directories: +# ~/.ranger/colorschemes/ +# path/to/ranger/colorschemes/ +# +# 2. be a subclass ofranger.gui.colorscheme.ColorScheme +# +# 3. have a use(self, context) method which returns a tuple of 3 integers. +# the first integer is the foreground color, the second is the background +# color, the third is the attribute, as specified by the curses module. +# +# +# define which colorscheme to use by having this to your options.py: +# from ranger import colorschemes +# colorscheme = colorschemes.filename +# +# If your colorscheme-file contains more than one colorscheme, specify it with: +# colorscheme = colorschemes.filename.classname + +class ColorScheme(object): def __init__(self): self.cache = {} diff --git a/ranger/gui/wconsole.py b/ranger/gui/wconsole.py index 611790f8..9078d781 100644 --- a/ranger/gui/wconsole.py +++ b/ranger/gui/wconsole.py @@ -7,12 +7,12 @@ CONSOLE_MODES_DICTIONARY = { '@': 'open with: ' } class WConsole(SuperClass): def __init__(self, win, colorscheme): from ranger.command import CommandList - from ranger.conf.keys import initialize_console_commands + from ranger.conf import keys SuperClass.__init__(self, win, colorscheme) self.mode = None self.visible = False self.commandlist = CommandList() - initialize_console_commands(self.commandlist) + keys.initialize_console_commands(self.commandlist) self.last_cursor_mode = 1 self.clear() self.prompt = None diff --git a/ranger/helper.py b/ranger/helper.py index 150f4f9d..0a457837 100644 --- a/ranger/helper.py +++ b/ranger/helper.py @@ -12,6 +12,15 @@ ONE_KB = 1024 UNITS = tuple('BKMGTP') NINE_THOUSAND = len(UNITS) - 1 +def get_all(dirname): + import os + lst = [] + for f in os.listdir(dirname): + if f.endswith('.py') and not f.startswith('_'): + lst.append(f [0:f.index('.')]) + return lst + + def human_readable(byte): import math diff --git a/ranger/main.py b/ranger/main.py index e6718122..960bab65 100644 --- a/ranger/main.py +++ b/ranger/main.py @@ -1,6 +1,7 @@ import sys import os -import locale +from inspect import isclass, ismodule +from locale import setlocale, LC_ALL from optparse import OptionParser, SUPPRESS_HELP from ranger.fm import FM @@ -9,7 +10,7 @@ from ranger.command import CommandList from ranger.bookmark import Bookmarks from ranger.conf import keys, options from ranger.gui.defaultui import DefaultUI as UI -from ranger.conf.colorschemes.snow import MyColorScheme +from ranger.gui.colorscheme import ColorScheme VERSION = '1.0.0' @@ -23,7 +24,7 @@ def main(): print('ranger requires the python curses module. Aborting.') sys.exit(1) - locale.setlocale(locale.LC_ALL, 'en_US.utf8') + setlocale(LC_ALL, 'en_US.utf8') os.stat_float_times(True) # Parse options @@ -63,9 +64,28 @@ def main(): opt = options.dummy() + # get colorscheme + scheme = options.colorscheme + if isclass(scheme) and issubclass(scheme, ColorScheme): + colorscheme = scheme() + + elif ismodule(scheme): + for var_name in dir(scheme): + var = getattr(scheme, var_name) + if var != ColorScheme and isclass(var) and\ + issubclass(var, ColorScheme): + colorscheme = var() + break + else: + print("The given colorscheme module contains no valid colorscheme!") + sys.exit(1) + + else: + print("Cannot locate colorscheme!") + sys.exit(1) + env = Environment(path, opt) commandlist = CommandList() - colorscheme = MyColorScheme() keys.initialize_commands(commandlist) bookmarks = Bookmarks() bookmarks.load() diff --git a/ranger/mimetype.py b/ranger/mimetype.py index 4346d9c8..5e70f2e7 100644 --- a/ranger/mimetype.py +++ b/ranger/mimetype.py @@ -4,7 +4,7 @@ def load(): import sys, os, pickle types.clear() - f = open(os.path.join(sys.path[0], 'data/mime.dat'), 'rb') + f = open(os.path.join(os.path.dirname(__file__), '../data/mime.dat'), 'rb') types.update(pickle.load(f)) f.close() -- cgit 1.4.1-2-gfad0