summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--ranger/config/commands.py8
-rw-r--r--ranger/container/fsobject.py20
2 files changed, 26 insertions, 2 deletions
diff --git a/ranger/config/commands.py b/ranger/config/commands.py
index b47cb6ad..e129aac4 100644
--- a/ranger/config/commands.py
+++ b/ranger/config/commands.py
@@ -344,12 +344,20 @@ class set_(Command):
             return (self.firstpart + setting for setting in settings \
                     if setting.startswith(name))
         if not value:
+            # Cycle through colorschemes when name, but no value is specified
+            if name == "colorscheme":
+                return (self.firstpart + colorscheme
+                    for colorscheme in self.fm.thisfile.colorscheme_dict.keys())
             return self.firstpart + str(settings[name])
         if bool in settings.types_of(name):
             if 'true'.startswith(value.lower()):
                 return self.firstpart + 'True'
             if 'false'.startswith(value.lower()):
                 return self.firstpart + 'False'
+        # Tab complete colorscheme values if incomplete value is present
+        if name == "colorscheme":
+            return (self.firstpart + colorscheme for colorscheme in self.fm.thisfile.colorscheme_dict.keys() \
+                    if colorscheme.startswith(value))
 
 
 class setlocal(set_):
diff --git a/ranger/container/fsobject.py b/ranger/container/fsobject.py
index 6cdaa727..585bbb26 100644
--- a/ranger/container/fsobject.py
+++ b/ranger/container/fsobject.py
@@ -14,8 +14,8 @@ BAD_INFO = '?'
 
 import re
 from grp import getgrgid
-from os import lstat, stat, getcwd
-from os.path import abspath, basename, dirname, realpath, splitext, extsep, relpath
+from os import lstat, stat, getcwd, listdir
+from os.path import abspath, basename, dirname, realpath, splitext, extsep, relpath, expanduser, isdir
 from pwd import getpwuid
 from ranger.core.linemode import *
 from ranger.core.shared import FileManagerAware, SettingsAware
@@ -23,6 +23,7 @@ from ranger.ext.shell_escape import shell_escape
 from ranger.ext.spawn import spawn
 from ranger.ext.lazy_property import lazy_property
 from ranger.ext.human_readable import human_readable
+from ranger import RANGERDIR,CONFDIR
 
 if hasattr(str, 'maketrans'):
     maketrans = str.maketrans
@@ -89,6 +90,21 @@ class FileSystemObject(FileManagerAware, SettingsAware):
         [DefaultLinemode, TitleLinemode, PermissionsLinemode]
     )
 
+    _colorscheme = "default"
+    colorschemes = []
+    # Load colorscheme names from main ranger/colorschemes dir
+    for item in listdir(RANGERDIR + '/colorschemes'):
+        if not item.startswith('__'):
+            colorschemes.append(item.rsplit('.', 1)[0])
+    # Load colorscheme names from ~/.config/ranger/colorschemes if dir exists
+    if isdir(expanduser(CONFDIR + '/colorschemes')):
+        for item in listdir(expanduser(CONFDIR + '/colorschemes')):
+            if not item.startswith('__'):
+                colorschemes.append(item.rsplit('.', 1)[0])
+    colorscheme_dict = dict(
+        (colorscheme, colorscheme + '.py') for colorscheme in colorschemes
+    )
+
     def __init__(self, path, preload=None, path_is_abs=False, basename_is_rel_to=None):
         if not path_is_abs:
             path = abspath(path)