diff options
-rw-r--r-- | ranger/conf/colorschemes/snow.py | 16 | ||||
-rw-r--r-- | ranger/fsobject.py | 35 | ||||
-rw-r--r-- | ranger/gui/colorscheme.py | 1 | ||||
-rw-r--r-- | ranger/gui/wdisplay.py | 2 | ||||
-rw-r--r-- | ranger/mimetype.py | 14 |
5 files changed, 62 insertions, 6 deletions
diff --git a/ranger/conf/colorschemes/snow.py b/ranger/conf/colorschemes/snow.py index 4bb00ca9..d5bd8c3a 100644 --- a/ranger/conf/colorschemes/snow.py +++ b/ranger/conf/colorschemes/snow.py @@ -17,14 +17,24 @@ class MyColorScheme(ColorScheme): 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: + attr |= bold fg = green - if context.media: - fg = magenta - if context.link: fg = cyan diff --git a/ranger/fsobject.py b/ranger/fsobject.py index c4a1e882..35a6465a 100644 --- a/ranger/fsobject.py +++ b/ranger/fsobject.py @@ -8,6 +8,10 @@ T_NONEXISTANT = 'nonexistant' BAD_INFO = None +CONTAINER_EXTENSIONS = 'rar zip tar gz bz bz2 tgz 7z iso cab'.split() +DOCUMENT_EXTENSIONS = 'pdf doc ppt odt'.split() +DOCUMENT_BASENAMES = 'README TODO LICENSE'.split() + class FileSystemObject(object): def __init__(self, path): @@ -19,6 +23,10 @@ class FileSystemObject(object): self.path = path self.basename = basename(path) self.dirname = dirname(path) + try: + self.extension = self.basename[self.basename.rindex('.') + 1:] + except ValueError: + self.extension = None self.exists = False self.accessible = False self.marked = False @@ -32,17 +40,40 @@ class FileSystemObject(object): self.infostring = None self.permissions = None self.type = T_UNKNOWN + + self.set_mimetype() def __str__(self): return str(self.path) + def set_mimetype(self): + import ranger.mimetype as mimetype + try: + self.mimetype = mimetype.get() [self.extension] + except KeyError: + self.mimetype = '' + + self.video = self.mimetype.startswith('video') + self.image = self.mimetype.startswith('image') + self.audio = self.mimetype.startswith('audio') + self.media = self.video or self.image or self.audio + self.document = self.mimetype.startswith('text') or (self.extension in DOCUMENT_EXTENSIONS) or (self.basename in DOCUMENT_BASENAMES) + self.container = self.extension in CONTAINER_EXTENSIONS + + keys = ('video', 'audio', 'image', 'media', 'document', 'container') + self.mimetype_tuple = tuple(key for key in keys if getattr(self, key)) + + if self.mimetype == '': + self.mimetype = None + # load() reads useful information about the file from the file system # and caches it in instance attributes. def load(self): - self.loaded = True - import os from ranger.helper import human_readable + + self.loaded = True + if os.access(self.path, os.F_OK): self.stat = os.stat(self.path) self.islink = os.path.islink(self.path) diff --git a/ranger/gui/colorscheme.py b/ranger/gui/colorscheme.py index 282a08ba..d7833016 100644 --- a/ranger/gui/colorscheme.py +++ b/ranger/gui/colorscheme.py @@ -2,6 +2,7 @@ CONTEXT_KEYS = [ 'reset', 'error', 'in_display', 'in_statusbar', 'in_titlebar', 'in_console', 'directory', 'file', 'hostname', 'executable', 'media', 'link', + 'video', 'audio', 'image', 'media', 'document', 'container', 'broken', 'selected', 'empty', 'maindisplay'] class ColorSchemeContext(): diff --git a/ranger/gui/wdisplay.py b/ranger/gui/wdisplay.py index a1953001..07111437 100644 --- a/ranger/gui/wdisplay.py +++ b/ranger/gui/wdisplay.py @@ -107,7 +107,7 @@ class WDisplay(SuperClass): except IndexError: break - this_color = base_color[:] + this_color = base_color + list(drawed.mimetype_tuple) if i == selected_i: this_color.append('selected') diff --git a/ranger/mimetype.py b/ranger/mimetype.py new file mode 100644 index 00000000..4346d9c8 --- /dev/null +++ b/ranger/mimetype.py @@ -0,0 +1,14 @@ +types = {'not loaded': True} + +def load(): + import sys, os, pickle + types.clear() + + f = open(os.path.join(sys.path[0], 'data/mime.dat'), 'rb') + types.update(pickle.load(f)) + f.close() + +def get(): + if 'not loaded' in types: + load() + return types |