about summary refs log tree commit diff stats
path: root/doc/colorschemes.md
diff options
context:
space:
mode:
Diffstat (limited to 'doc/colorschemes.md')
-rw-r--r--doc/colorschemes.md77
1 files changed, 77 insertions, 0 deletions
diff --git a/doc/colorschemes.md b/doc/colorschemes.md
new file mode 100644
index 00000000..eb8bdef0
--- /dev/null
+++ b/doc/colorschemes.md
@@ -0,0 +1,77 @@
+# Colorschemes
+
+This text explains colorschemes and how they work.
+
+## Context Tags
+
+Context Tags provide information about the context. If the tag `in_titlebar` is
+set, you probably want to know about the color of a part of the titlebar now.
+
+There are a number of context tags, specified in /ranger/gui/context.py in the
+constant `CONTEXT_KEYS`.
+
+A Context object, defined in the same file, contains attributes with the names
+of all tags, whose values are either True or False.
+
+## Implementation in the GUI Classes
+
+The class CursesShortcuts in the file `/ranger/gui/curses_shortcuts.py` defines
+the methods `color(*tags)`, `color_at(y, x, wid, *tags)` and `color_reset()`.
+This class is a superclass of Displayable, so these methods are available almost
+everywhere.
+
+Something like `color("in_titlebar", "directory")` will be called to get the
+color of directories in the titlebar. This creates a `ranger.gui.context.Context`
+object, sets its attributes `in_titlebar` and `directory` to True, leaves the
+others as False, and passes it to the colorscheme's `use(context)` method.
+
+## The Color Scheme
+
+A colorscheme should be a subclass of `ranger.gui.ColorScheme` and define the
+method `use(context)`. By looking at the context, this use-method has to
+determine a 3-tuple of integers: `(foreground, background, attribute)` and return
+it.
+
+`foreground` and `background` are integers representing colors, `attribute` is
+another integer with each bit representing one attribute. These integers are
+interpreted by the used terminal emulator.
+
+Abbreviations for colors and attributes are defined in `ranger.gui.color`. Two
+attributes can be combined via bitwise OR: bold | reverse
+
+Once the color for a set of tags is determined, it will be cached by default. If
+you want more dynamic colorschemes (such as a different color for very large
+files), you will need to dig into the source code, perhaps add an own tag and
+modify the draw-method of the widget to use that tag.
+
+Run `tc_colorscheme` to check if your colorschemes are valid.
+
+## Specify a Colorscheme
+
+Colorschemes are searched for in these directories:
+
+- `~/.config/ranger/colorschemes/`
+- `/path/to/ranger/colorschemes/`
+
+To specify which colorscheme to use, change the option `colorscheme` in your
+rc.conf: `set colorscheme default`.
+
+This means, use the colorscheme contained in either
+`~/.config/ranger/colorschemes/default.py` or
+`/path/to/ranger/colorschemes/default.py`.
+
+## Adapt a colorscheme
+
+You may want to adapt a colorscheme to your needs without having a complete copy
+of it, but rather the changes only. Say, you want the exact same colors as in
+the default colorscheme, but the directories to be green rather than blue,
+because you find the blue hard to read.
+
+This is done in the jungle colorscheme `ranger/colorschemes/jungle`, check it
+out for implementation details. In short, I made a subclass of the default
+scheme, set the initial colors to the result of the default `use()` method and
+modified the colors how I wanted.
+
+This has the obvious advantage that you need to write less, which results in
+less maintenance work and a greater chance that your colorscheme will work with
+future versions of ranger.