diff --git a/dracula.py b/dracula.py new file mode 100644 index 0000000..bef0e2c --- /dev/null +++ b/dracula.py @@ -0,0 +1,218 @@ +# 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