219 lines
5.6 KiB
Python
219 lines
5.6 KiB
Python
|
# This file is part of ranger, the console file manager.
|
||
|
# License: GNU GPL version 3, see the file "AUTHORS" for details.
|
||
|
# This theme was greatly inspired by "RougarouTheme" for ranger
|
||
|
# It can be found in: `https://github.com/RougarouTheme/ranger`
|
||
|
|
||
|
from __future__ import absolute_import, division, print_function
|
||
|
|
||
|
from ranger.gui.colorscheme import ColorScheme
|
||
|
from ranger.gui.color import (
|
||
|
black,
|
||
|
blue,
|
||
|
cyan,
|
||
|
green,
|
||
|
magenta,
|
||
|
red,
|
||
|
white,
|
||
|
yellow,
|
||
|
default,
|
||
|
normal,
|
||
|
bold,
|
||
|
reverse,
|
||
|
default_colors,
|
||
|
)
|
||
|
|
||
|
|
||
|
class Dracula(ColorScheme):
|
||
|
progress_bar_color = 13
|
||
|
|
||
|
def verify_browser(self, context, fg, bg, attr):
|
||
|
if context.selected:
|
||
|
attr = reverse
|
||
|
else:
|
||
|
attr = normal
|
||
|
if context.empty or context.error:
|
||
|
bg = 1
|
||
|
fg = 0
|
||
|
if context.border:
|
||
|
fg = default
|
||
|
if context.document:
|
||
|
attr |= normal
|
||
|
fg = 13
|
||
|
if context.media:
|
||
|
if context.image:
|
||
|
attr |= normal
|
||
|
fg = 3
|
||
|
elif context.video:
|
||
|
fg = 1
|
||
|
elif context.audio:
|
||
|
fg = 6
|
||
|
else:
|
||
|
fg = 10
|
||
|
if context.container:
|
||
|
attr |= bold
|
||
|
fg = 9
|
||
|
if context.directory:
|
||
|
attr |= bold
|
||
|
fg = 4
|
||
|
elif context.executable and not any(
|
||
|
(context.media, context.container, context.fifo, context.socket)
|
||
|
):
|
||
|
attr |= bold
|
||
|
fg = 2
|
||
|
if context.socket:
|
||
|
fg = 5
|
||
|
attr |= bold
|
||
|
if context.fifo or context.device:
|
||
|
fg = 3
|
||
|
if context.device:
|
||
|
attr |= bold
|
||
|
if context.link:
|
||
|
fg = 6 if context.good else 13
|
||
|
if context.tag_marker and not context.selected:
|
||
|
attr |= bold
|
||
|
if fg in (red, magenta):
|
||
|
fg = 1
|
||
|
else:
|
||
|
fg = 15
|
||
|
if not context.selected and (context.cut or context.copied):
|
||
|
fg = 8
|
||
|
attr |= bold
|
||
|
if context.main_column:
|
||
|
if context.selected:
|
||
|
attr |= bold
|
||
|
if context.marked:
|
||
|
attr |= bold
|
||
|
fg = 11
|
||
|
if context.badinfo:
|
||
|
if attr & reverse:
|
||
|
bg = 5
|
||
|
else:
|
||
|
fg = 5
|
||
|
|
||
|
if context.inactive_pane:
|
||
|
fg = 6
|
||
|
|
||
|
return fg, bg, attr
|
||
|
|
||
|
def verify_titlebar(self, context, fg, bg, attr):
|
||
|
attr |= bold
|
||
|
if context.hostname:
|
||
|
fg = 1 if context.bad else 2
|
||
|
elif context.directory:
|
||
|
fg = 4
|
||
|
elif context.tab:
|
||
|
if context.good:
|
||
|
bg = 2
|
||
|
elif context.link:
|
||
|
fg = 6
|
||
|
|
||
|
return fg, bg, attr
|
||
|
|
||
|
def verify_statusbar(self, context, fg, bg, attr):
|
||
|
if context.permissions:
|
||
|
if context.good:
|
||
|
fg = 2
|
||
|
elif context.bad:
|
||
|
bg = 5
|
||
|
fg = 8
|
||
|
if context.marked:
|
||
|
attr |= bold | reverse
|
||
|
fg = 3
|
||
|
if context.frozen:
|
||
|
attr |= bold | reverse
|
||
|
fg = 6
|
||
|
if context.message:
|
||
|
if context.bad:
|
||
|
attr |= bold
|
||
|
fg = 1
|
||
|
if context.loaded:
|
||
|
bg = self.progress_bar_color
|
||
|
if context.vcsinfo:
|
||
|
fg = 4
|
||
|
attr &= ~bold
|
||
|
if context.vcscommit:
|
||
|
fg = 3
|
||
|
attr &= ~bold
|
||
|
if context.vcsdate:
|
||
|
fg = 6
|
||
|
attr &= ~bold
|
||
|
|
||
|
return fg, bg, attr
|
||
|
|
||
|
def verify_taskview(self, context, fg, bg, attr):
|
||
|
if context.title:
|
||
|
fg = 4
|
||
|
|
||
|
if context.selected:
|
||
|
attr |= reverse
|
||
|
|
||
|
if context.loaded:
|
||
|
if context.selected:
|
||
|
fg = self.progress_bar_color
|
||
|
else:
|
||
|
bg = self.progress_bar_color
|
||
|
|
||
|
return fg, bg, attr
|
||
|
|
||
|
def verify_vcsfile(self, context, fg, bg, attr):
|
||
|
attr &= ~bold
|
||
|
if context.vcsconflict:
|
||
|
fg = 5
|
||
|
elif context.vcschanged:
|
||
|
fg = 1
|
||
|
elif context.vcsunknown:
|
||
|
fg = 1
|
||
|
elif context.vcsstaged:
|
||
|
fg = 2
|
||
|
elif context.vcssync:
|
||
|
fg = 2
|
||
|
elif context.vcsignored:
|
||
|
fg = default
|
||
|
|
||
|
return fg, bg, attr
|
||
|
|
||
|
def verify_vcsremote(self, context, fg, bg, attr):
|
||
|
attr &= ~bold
|
||
|
if context.vcssync or context.vcsnone:
|
||
|
fg = 2
|
||
|
elif context.vcsbehind:
|
||
|
fg = 1
|
||
|
elif context.vcsahead:
|
||
|
fg = 6
|
||
|
elif context.vcsdiverged:
|
||
|
fg = 5
|
||
|
elif context.vcsunknown:
|
||
|
fg = 1
|
||
|
|
||
|
return fg, bg, attr
|
||
|
|
||
|
def use(self, context):
|
||
|
fg, bg, attr = default_colors
|
||
|
|
||
|
if context.reset:
|
||
|
return default_colors
|
||
|
|
||
|
elif context.in_browser:
|
||
|
fg, bg, attr = self.verify_browser(context, fg, bg, attr)
|
||
|
|
||
|
elif context.in_titlebar:
|
||
|
fg, bg, attr = self.verify_titlebar(context, fg, bg, attr)
|
||
|
|
||
|
elif context.in_statusbar:
|
||
|
fg, bg, attr = self.verify_statusbar(context, fg, bg, attr)
|
||
|
|
||
|
if context.text:
|
||
|
if context.highlight:
|
||
|
attr |= reverse
|
||
|
|
||
|
if context.in_taskview:
|
||
|
fg, bg, attr = self.verify_taskview(context, fg, bg, attr)
|
||
|
|
||
|
if context.vcsfile and not context.selected:
|
||
|
fg, bg, attr = self.verify_vcsfile(context, fg, bg, attr)
|
||
|
|
||
|
elif context.vcsremote and not context.selected:
|
||
|
fg, bg, attr = self.verify_vcsremote(context, fg, bg, attr)
|
||
|
|
||
|
return fg, bg, attr
|