mirror of
https://github.com/dylanaraps/pywal.git
synced 2024-11-25 09:23:08 +01:00
Merge branch 'master' into add-vs-code-support
This commit is contained in:
commit
c1d90676f9
@ -1,5 +1,5 @@
|
|||||||
[BASIC]
|
[BASIC]
|
||||||
good-names=i,j,k,n,x,y,fg,bg,r,g,b,i3,r1,r2,r3,g1,g2,g3,b1,b2,b3,h,s,v
|
good-names=i,j,k,n,x,y,fg,bg,r,g,b,i3,r1,r2,r3,g1,g2,g3,b1,b2,b3,h,s,v,l
|
||||||
|
|
||||||
[MESSAGES CONTROL]
|
[MESSAGES CONTROL]
|
||||||
# inconsistent-return-statements:
|
# inconsistent-return-statements:
|
||||||
@ -10,7 +10,7 @@ good-names=i,j,k,n,x,y,fg,bg,r,g,b,i3,r1,r2,r3,g1,g2,g3,b1,b2,b3,h,s,v
|
|||||||
# too-many-statements:
|
# too-many-statements:
|
||||||
# Disabled as it's a non-issue and only occurs in the
|
# Disabled as it's a non-issue and only occurs in the
|
||||||
# process_args() function.
|
# process_args() function.
|
||||||
disable=inconsistent-return-statements,too-many-branches,too-many-statements
|
disable=inconsistent-return-statements,too-many-branches,too-many-statements,too-many-return-statements
|
||||||
|
|
||||||
[SIMILARITIES]
|
[SIMILARITIES]
|
||||||
ignore-imports=y
|
ignore-imports=y
|
||||||
|
12
.travis.yml
12
.travis.yml
@ -1,11 +1,15 @@
|
|||||||
language: python
|
language: python
|
||||||
|
os: linux
|
||||||
|
dist: xenial
|
||||||
|
sudo: true
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: linux
|
- python: 3.5
|
||||||
python: 3.5
|
- python: 3.6
|
||||||
- os: linux
|
# - python: 3.7
|
||||||
python: 3.6
|
# dist: xenial
|
||||||
|
# sudo: true
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get -qq update; fi
|
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get -qq update; fi
|
||||||
|
14
CHANGELOG.md
14
CHANGELOG.md
@ -8,6 +8,17 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
|
||||||
|
## [3.1.0] - 2018-06-21
|
||||||
|
|
||||||
|
- Added `--saturate` to change color saturation.
|
||||||
|
- Takes a float as its value: `0.0` to `1.0`.
|
||||||
|
- Added `vim` output file.
|
||||||
|
- Fixed `LS_COLORS` issue.
|
||||||
|
- Fixed issues in iTerm2 on macOS.
|
||||||
|
- Fixed hang caused by `imagemagick`.
|
||||||
|
- Fixed issue with `-i` and transparency.
|
||||||
|
|
||||||
|
|
||||||
## [3.0.1] - 2018-05-27
|
## [3.0.1] - 2018-05-27
|
||||||
|
|
||||||
- Added Tempus themes.
|
- Added Tempus themes.
|
||||||
@ -640,7 +651,8 @@ Note to self: Don't flag releases before coffee.
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Unreleased]: https://github.com/dylanaraps/pywal/compare/3.0.1...HEAD
|
[Unreleased]: https://github.com/dylanaraps/pywal/compare/3.1.0...HEAD
|
||||||
|
[3.1.0]: https://github.com/dylanaraps/pywal/compare/3.0.1...3.1.0
|
||||||
[3.0.1]: https://github.com/dylanaraps/pywal/compare/3.0.0...3.0.1
|
[3.0.1]: https://github.com/dylanaraps/pywal/compare/3.0.0...3.0.1
|
||||||
[3.0.0]: https://github.com/dylanaraps/pywal/compare/2.1.0...3.0.0
|
[3.0.0]: https://github.com/dylanaraps/pywal/compare/2.1.0...3.0.0
|
||||||
[2.1.0]: https://github.com/dylanaraps/pywal/compare/2.0.5...2.1.0
|
[2.1.0]: https://github.com/dylanaraps/pywal/compare/2.0.5...2.1.0
|
||||||
|
16
README.md
16
README.md
@ -2,16 +2,16 @@
|
|||||||
<p align="center">Generate and change color-schemes on the fly.</p>
|
<p align="center">Generate and change color-schemes on the fly.</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://discord.gg/BtnTPFF"><img src="https://img.shields.io/discord/440354555197128704.svg"></a>
|
|
||||||
<a href="https://travis-ci.org/dylanaraps/pywal"><img src="https://travis-ci.org/dylanaraps/pywal.svg?branch=master"></a>
|
<a href="https://travis-ci.org/dylanaraps/pywal"><img src="https://travis-ci.org/dylanaraps/pywal.svg?branch=master"></a>
|
||||||
<a href="./LICENSE.md"><img src="https://img.shields.io/badge/license-MIT-blue.svg"></a>
|
<a href="./LICENSE.md"><img src="https://img.shields.io/badge/license-MIT-blue.svg"></a>
|
||||||
<a href="https://pypi.python.org/pypi/pywal/"><img src="https://img.shields.io/pypi/v/pywal.svg"></a>
|
<a href="https://pypi.python.org/pypi/pywal/"><img src="https://img.shields.io/pypi/v/pywal.svg"></a>
|
||||||
<a href="https://www.patreon.com/dyla"><img src="https://img.shields.io/badge/donate-patreon-yellow.svg"></a>
|
<a href="https://www.patreon.com/dyla"><img src="https://img.shields.io/badge/donate-patreon-yellow.svg"></a>
|
||||||
|
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=V7QNJNKS3WYVS"><img src="https://img.shields.io/badge/donate-paypal-green.svg"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<img src="https://i.imgur.com/HhK3LDv.jpg" alt="img" align="right" width="400px">
|
<img src="https://i.imgur.com/HhK3LDv.jpg" alt="img" align="right" width="400px">
|
||||||
|
|
||||||
Pywal is a tool that generates a color palette from the dominant colors in an image. It then applies the colors system-wide and on-the-fly in all of your favourite programs.
|
Pywal is a tool that generates a color palette from the dominant colors in an image. It then applies the colors system-wide and on-the-fly in all of your favourite programs.
|
||||||
|
|
||||||
There are currently 5 supported color generation backends, each providing a different palette of colors from each image. You're bound to find an appealing color-scheme.
|
There are currently 5 supported color generation backends, each providing a different palette of colors from each image. You're bound to find an appealing color-scheme.
|
||||||
|
|
||||||
@ -21,14 +21,4 @@ The goal of Pywal was to be as out of the way as possible. It doesn't modify any
|
|||||||
|
|
||||||
Terminal emulators and TTYs have their color-schemes updated in real-time with no delay. With minimal configuration this functionality can be extended to almost anything running on your system.
|
Terminal emulators and TTYs have their color-schemes updated in real-time with no delay. With minimal configuration this functionality can be extended to almost anything running on your system.
|
||||||
|
|
||||||
### More: \[[Installation](https://github.com/dylanaraps/pywal/wiki/Installation)\] \[[Getting Started](https://github.com/dylanaraps/pywal/wiki/Getting-Started)\] \[[Customization](https://github.com/dylanaraps/pywal/wiki/Customization)\] \[[Wiki](https://github.com/dylanaraps/pywal/wiki)\] \[[Screenshots](https://www.reddit.com/r/unixporn/search?q=wal&restrict_sr=on&sort=relevance&t=all)\]
|
### More: \[[Installation](https://github.com/dylanaraps/pywal/wiki/Installation)] \[[Getting Started](https://github.com/dylanaraps/pywal/wiki/Getting-Started)] \[[Customization](https://github.com/dylanaraps/pywal/wiki/Customization)] \[[Wiki](https://github.com/dylanaraps/pywal/wiki)] \[[Screenshots](https://www.reddit.com/r/unixporn/search?q=wal&restrict_sr=on&sort=relevance&t=all)]
|
||||||
|
|
||||||
|
|
||||||
## Donate
|
|
||||||
|
|
||||||
Donations will allow me to spend more time working on `pywal`.
|
|
||||||
|
|
||||||
If you like `pywal` and want to give back in some way you can donate here:
|
|
||||||
|
|
||||||
**https://patreon.com/dyla**
|
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ def get_args():
|
|||||||
|
|
||||||
arg.add_argument("--theme", "-f", metavar="/path/to/file or theme_name",
|
arg.add_argument("--theme", "-f", metavar="/path/to/file or theme_name",
|
||||||
help="Which colorscheme file to use. \
|
help="Which colorscheme file to use. \
|
||||||
Use 'wal --theme' to list builtin themes.",
|
Use 'wal --theme' to list builtin and user themes.",
|
||||||
const="list_themes", nargs="?")
|
const="list_themes", nargs="?")
|
||||||
|
|
||||||
arg.add_argument("--iterative", action="store_true",
|
arg.add_argument("--iterative", action="store_true",
|
||||||
@ -53,24 +53,40 @@ def get_args():
|
|||||||
"flag is used: Go through the images in order "
|
"flag is used: Go through the images in order "
|
||||||
"instead of shuffled.")
|
"instead of shuffled.")
|
||||||
|
|
||||||
|
arg.add_argument("--recursive", action="store_true",
|
||||||
|
help="When pywal is given a directory as input and this "
|
||||||
|
"flag is used: Search for images recursively in "
|
||||||
|
"subdirectories instead of the root only.")
|
||||||
|
|
||||||
|
arg.add_argument("--saturate", metavar="0.0-1.0",
|
||||||
|
help="Set the color saturation.")
|
||||||
|
|
||||||
|
arg.add_argument("--preview", action="store_true",
|
||||||
|
help="Print the current color palette.")
|
||||||
|
|
||||||
|
arg.add_argument("--vte", action="store_true",
|
||||||
|
help="Fix text-artifacts printed in VTE terminals.")
|
||||||
|
|
||||||
arg.add_argument("-c", action="store_true",
|
arg.add_argument("-c", action="store_true",
|
||||||
help="Delete all cached colorschemes.")
|
help="Delete all cached colorschemes.")
|
||||||
|
|
||||||
arg.add_argument("-i", metavar="\"/path/to/img.jpg\"",
|
arg.add_argument("-i", metavar="\"/path/to/img.jpg\"",
|
||||||
help="Which image or directory to use.")
|
help="Which image or directory to use.")
|
||||||
|
|
||||||
arg.add_argument("-g", action="store_true",
|
|
||||||
help="Generate an oomox theme.")
|
|
||||||
|
|
||||||
arg.add_argument("-l", action="store_true",
|
arg.add_argument("-l", action="store_true",
|
||||||
help="Generate a light colorscheme.")
|
help="Generate a light colorscheme.")
|
||||||
|
|
||||||
arg.add_argument("-n", action="store_true",
|
arg.add_argument("-n", action="store_true",
|
||||||
help="Skip setting the wallpaper.")
|
help="Skip setting the wallpaper.")
|
||||||
|
|
||||||
arg.add_argument("-o", metavar="\"script_name\"",
|
arg.add_argument("-o", metavar="\"script_name\"", action="append",
|
||||||
help="External script to run after \"wal\".")
|
help="External script to run after \"wal\".")
|
||||||
|
|
||||||
|
arg.add_argument("-p", metavar="\"theme_name\"",
|
||||||
|
help="permanently save theme to "
|
||||||
|
"$XDG_CONFIG_HOME/wal/colorschemes with "
|
||||||
|
"the specified name")
|
||||||
|
|
||||||
arg.add_argument("-q", action="store_true",
|
arg.add_argument("-q", action="store_true",
|
||||||
help="Quiet mode, don\'t print anything.")
|
help="Quiet mode, don\'t print anything.")
|
||||||
|
|
||||||
@ -90,6 +106,9 @@ def get_args():
|
|||||||
arg.add_argument("-v", action="store_true",
|
arg.add_argument("-v", action="store_true",
|
||||||
help="Print \"wal\" version.")
|
help="Print \"wal\" version.")
|
||||||
|
|
||||||
|
arg.add_argument("-w", action="store_true",
|
||||||
|
help="Use last used wallpaper for color generation.")
|
||||||
|
|
||||||
arg.add_argument("-e", action="store_true",
|
arg.add_argument("-e", action="store_true",
|
||||||
help="Skip reloading gtk/xrdb/i3/sway/polybar")
|
help="Skip reloading gtk/xrdb/i3/sway/polybar")
|
||||||
|
|
||||||
@ -100,12 +119,18 @@ def parse_args_exit(parser):
|
|||||||
"""Process args that exit."""
|
"""Process args that exit."""
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if not len(sys.argv) > 1:
|
if len(sys.argv) <= 1:
|
||||||
parser.error("wal needs to be given arguments to run.")
|
parser.print_help()
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
if args.v:
|
if args.v:
|
||||||
parser.exit(0, "wal %s\n" % __version__)
|
parser.exit(0, "wal %s\n" % __version__)
|
||||||
|
|
||||||
|
if args.preview:
|
||||||
|
print("Current colorscheme:", sep='')
|
||||||
|
colors.palette()
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
if args.i and args.theme:
|
if args.i and args.theme:
|
||||||
parser.error("Conflicting arguments -i and -f.")
|
parser.error("Conflicting arguments -i and -f.")
|
||||||
|
|
||||||
@ -113,9 +138,15 @@ def parse_args_exit(parser):
|
|||||||
reload.colors()
|
reload.colors()
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
if args.c:
|
||||||
|
scheme_dir = os.path.join(CACHE_DIR, "schemes")
|
||||||
|
shutil.rmtree(scheme_dir, ignore_errors=True)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
if not args.i and \
|
if not args.i and \
|
||||||
not args.theme and \
|
not args.theme and \
|
||||||
not args.R and \
|
not args.R and \
|
||||||
|
not args.w and \
|
||||||
not args.backend:
|
not args.backend:
|
||||||
parser.error("No input specified.\n"
|
parser.error("No input specified.\n"
|
||||||
"--backend, --theme, -i or -R are required.")
|
"--backend, --theme, -i or -R are required.")
|
||||||
@ -138,16 +169,14 @@ def parse_args(parser):
|
|||||||
logging.getLogger().disabled = True
|
logging.getLogger().disabled = True
|
||||||
sys.stdout = sys.stderr = open(os.devnull, "w")
|
sys.stdout = sys.stderr = open(os.devnull, "w")
|
||||||
|
|
||||||
if args.c:
|
|
||||||
scheme_dir = os.path.join(CACHE_DIR, "schemes")
|
|
||||||
shutil.rmtree(scheme_dir, ignore_errors=True)
|
|
||||||
|
|
||||||
if args.a:
|
if args.a:
|
||||||
util.Color.alpha_num = args.a
|
util.Color.alpha_num = args.a
|
||||||
|
|
||||||
if args.i:
|
if args.i:
|
||||||
image_file = image.get(args.i, iterative=args.iterative)
|
image_file = image.get(args.i, iterative=args.iterative,
|
||||||
colors_plain = colors.get(image_file, args.l, args.backend)
|
recursive=args.recursive)
|
||||||
|
colors_plain = colors.get(image_file, args.l, args.backend,
|
||||||
|
sat=args.saturate)
|
||||||
|
|
||||||
if args.theme:
|
if args.theme:
|
||||||
colors_plain = theme.file(args.theme, args.l)
|
colors_plain = theme.file(args.theme, args.l)
|
||||||
@ -155,6 +184,11 @@ def parse_args(parser):
|
|||||||
if args.R:
|
if args.R:
|
||||||
colors_plain = theme.file(os.path.join(CACHE_DIR, "colors.json"))
|
colors_plain = theme.file(os.path.join(CACHE_DIR, "colors.json"))
|
||||||
|
|
||||||
|
if args.w:
|
||||||
|
cached_wallpaper = util.read_file(os.path.join(CACHE_DIR, "wal"))
|
||||||
|
colors_plain = colors.get(cached_wallpaper[0], args.l, args.backend,
|
||||||
|
sat=args.saturate)
|
||||||
|
|
||||||
if args.b:
|
if args.b:
|
||||||
args.b = "#%s" % (args.b.strip("#"))
|
args.b = "#%s" % (args.b.strip("#"))
|
||||||
colors_plain["special"]["background"] = args.b
|
colors_plain["special"]["background"] = args.b
|
||||||
@ -163,7 +197,10 @@ def parse_args(parser):
|
|||||||
if not args.n:
|
if not args.n:
|
||||||
wallpaper.change(colors_plain["wallpaper"])
|
wallpaper.change(colors_plain["wallpaper"])
|
||||||
|
|
||||||
sequences.send(colors_plain, to_send=not args.s)
|
if args.p:
|
||||||
|
theme.save(colors_plain, args.p, args.l)
|
||||||
|
|
||||||
|
sequences.send(colors_plain, to_send=not args.s, vte_fix=args.vte)
|
||||||
|
|
||||||
if sys.stdout.isatty():
|
if sys.stdout.isatty():
|
||||||
colors.palette()
|
colors.palette()
|
||||||
@ -174,10 +211,10 @@ def parse_args(parser):
|
|||||||
reload.env(tty_reload=not args.t)
|
reload.env(tty_reload=not args.t)
|
||||||
|
|
||||||
if args.o:
|
if args.o:
|
||||||
util.disown([args.o])
|
for cmd in args.o:
|
||||||
|
util.disown([cmd])
|
||||||
|
|
||||||
if not args.e:
|
if not args.e:
|
||||||
reload.oomox(args.g)
|
|
||||||
reload.gtk()
|
reload.gtk()
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ def gen_colors(img):
|
|||||||
if len(raw_colors) >= 8:
|
if len(raw_colors) >= 8:
|
||||||
break
|
break
|
||||||
|
|
||||||
elif i == 10:
|
if i == 10:
|
||||||
logging.error("ColorThief couldn't generate a suitable palette.")
|
logging.error("ColorThief couldn't generate a suitable palette.")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
@ -2,36 +2,42 @@
|
|||||||
Generate a colorscheme using Colorz.
|
Generate a colorscheme using Colorz.
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
import shutil
|
|
||||||
import subprocess
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
try:
|
||||||
|
import colorz
|
||||||
|
|
||||||
|
except ImportError:
|
||||||
|
logging.error("colorz wasn't found on your system.")
|
||||||
|
logging.error("Try another backend. (wal --backend)")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
from .. import colors
|
from .. import colors
|
||||||
from .. import util
|
from .. import util
|
||||||
|
|
||||||
|
|
||||||
def gen_colors(img):
|
def gen_colors(img):
|
||||||
"""Generate a colorscheme using Colorz."""
|
"""Generate a colorscheme using Colorz."""
|
||||||
cmd = ["colorz", "-n", "6", "--bold", "0", "--no-preview", "--no-bg-img"]
|
# pylint: disable=not-callable
|
||||||
return subprocess.check_output([*cmd, img]).splitlines()
|
raw_colors = colorz.colorz(img, n=6, bold_add=0)
|
||||||
|
return [util.rgb_to_hex([*color[0]]) for color in raw_colors]
|
||||||
|
|
||||||
|
|
||||||
def adjust(cols, light):
|
def adjust(cols, light):
|
||||||
"""Create palette."""
|
"""Create palette."""
|
||||||
bg = util.blend_color("#555555", cols[1])
|
raw_colors = [cols[0], *cols, "#FFFFFF",
|
||||||
|
"#000000", *cols, "#FFFFFF"]
|
||||||
raw_colors = [bg, *cols, "#FFFFFF",
|
|
||||||
"#333333", *cols, "#FFFFFF"]
|
|
||||||
|
|
||||||
return colors.generic_adjust(raw_colors, light)
|
return colors.generic_adjust(raw_colors, light)
|
||||||
|
|
||||||
|
|
||||||
def get(img, light=False):
|
def get(img, light=False):
|
||||||
"""Get colorscheme."""
|
"""Get colorscheme."""
|
||||||
if not shutil.which("colorz"):
|
cols = gen_colors(img)
|
||||||
logging.error("Colorz wasn't found on your system.")
|
|
||||||
logging.error("Try another backend. (wal --backend)")
|
if len(cols) < 6:
|
||||||
|
logging.error("colorz failed to generate enough colors.")
|
||||||
|
logging.error("Try another backend or another image. (wal --backend)")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
cols = [col.decode('UTF-8').split()[0] for col in gen_colors(img)]
|
|
||||||
return adjust(cols, light)
|
return adjust(cols, light)
|
||||||
|
@ -24,7 +24,7 @@ def has_im():
|
|||||||
if shutil.which("magick"):
|
if shutil.which("magick"):
|
||||||
return ["magick", "convert"]
|
return ["magick", "convert"]
|
||||||
|
|
||||||
elif shutil.which("convert"):
|
if shutil.which("convert"):
|
||||||
return ["convert"]
|
return ["convert"]
|
||||||
|
|
||||||
logging.error("Imagemagick wasn't found on your system.")
|
logging.error("Imagemagick wasn't found on your system.")
|
||||||
@ -35,12 +35,21 @@ def has_im():
|
|||||||
def gen_colors(img):
|
def gen_colors(img):
|
||||||
"""Format the output from imagemagick into a list
|
"""Format the output from imagemagick into a list
|
||||||
of hex colors."""
|
of hex colors."""
|
||||||
raw_colors = imagemagick(20, img, has_im())
|
magick_command = has_im()
|
||||||
|
|
||||||
if len(raw_colors) < 16:
|
for i in range(0, 20, 1):
|
||||||
logging.error("Imagemagick couldn't generate a palette.")
|
raw_colors = imagemagick(16 + i, img, magick_command)
|
||||||
logging.error("Try a different image or backend.")
|
|
||||||
sys.exit(1)
|
if len(raw_colors) > 16:
|
||||||
|
break
|
||||||
|
|
||||||
|
if i == 19:
|
||||||
|
logging.error("Imagemagick couldn't generate a suitable palette.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
else:
|
||||||
|
logging.warning("Imagemagick couldn't generate a palette.")
|
||||||
|
logging.warning("Trying a larger palette size %s", 16 + i)
|
||||||
|
|
||||||
return [re.search("#.{6}", str(col)).group(0) for col in raw_colors[1:]]
|
return [re.search("#.{6}", str(col)).group(0) for col in raw_colors[1:]]
|
||||||
|
|
||||||
|
@ -56,16 +56,16 @@ def generic_adjust(colors, light):
|
|||||||
"""Generic color adjustment for themers."""
|
"""Generic color adjustment for themers."""
|
||||||
if light:
|
if light:
|
||||||
for color in colors:
|
for color in colors:
|
||||||
color = util.saturate_color(color, 0.50)
|
color = util.saturate_color(color, 0.60)
|
||||||
color = util.darken_color(color, 0.4)
|
color = util.darken_color(color, 0.5)
|
||||||
|
|
||||||
colors[0] = util.lighten_color(colors[0], 0.9)
|
colors[0] = util.lighten_color(colors[0], 0.95)
|
||||||
colors[7] = util.darken_color(colors[0], 0.75)
|
colors[7] = util.darken_color(colors[0], 0.75)
|
||||||
colors[8] = util.darken_color(colors[0], 0.25)
|
colors[8] = util.darken_color(colors[0], 0.25)
|
||||||
colors[15] = colors[7]
|
colors[15] = colors[7]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
colors[0] = util.darken_color(colors[0], 0.75)
|
colors[0] = util.darken_color(colors[0], 0.80)
|
||||||
colors[7] = util.lighten_color(colors[0], 0.75)
|
colors[7] = util.lighten_color(colors[0], 0.75)
|
||||||
colors[8] = util.lighten_color(colors[0], 0.25)
|
colors[8] = util.lighten_color(colors[0], 0.25)
|
||||||
colors[15] = colors[7]
|
colors[15] = colors[7]
|
||||||
@ -73,13 +73,25 @@ def generic_adjust(colors, light):
|
|||||||
return colors
|
return colors
|
||||||
|
|
||||||
|
|
||||||
def cache_fname(img, backend, light, cache_dir):
|
def saturate_colors(colors, amount):
|
||||||
|
"""Saturate all colors."""
|
||||||
|
if amount and float(amount) <= 1.0:
|
||||||
|
for i, _ in enumerate(colors):
|
||||||
|
if i not in [0, 7, 8, 15]:
|
||||||
|
colors[i] = util.saturate_color(colors[i], float(amount))
|
||||||
|
|
||||||
|
return colors
|
||||||
|
|
||||||
|
|
||||||
|
def cache_fname(img, backend, light, cache_dir, sat=""):
|
||||||
"""Create the cache file name."""
|
"""Create the cache file name."""
|
||||||
color_type = "light" if light else "dark"
|
color_type = "light" if light else "dark"
|
||||||
file_name = re.sub("[/|\\|.]", "_", img)
|
file_name = re.sub("[/|\\|.]", "_", img)
|
||||||
|
file_size = os.path.getsize(img)
|
||||||
|
|
||||||
file_parts = [file_name, color_type, backend, __cache_version__]
|
file_parts = [file_name, color_type, backend,
|
||||||
return [cache_dir, "schemes", "%s_%s_%s_%s.json" % (*file_parts,)]
|
sat, file_size, __cache_version__]
|
||||||
|
return [cache_dir, "schemes", "%s_%s_%s_%s_%s_%s.json" % (*file_parts,)]
|
||||||
|
|
||||||
|
|
||||||
def get_backend(backend):
|
def get_backend(backend):
|
||||||
@ -106,20 +118,15 @@ def palette():
|
|||||||
print("\n")
|
print("\n")
|
||||||
|
|
||||||
|
|
||||||
def get(img, light=False, backend="wal", cache_dir=CACHE_DIR):
|
def get(img, light=False, backend="wal", cache_dir=CACHE_DIR, sat=""):
|
||||||
"""Generate a palette."""
|
"""Generate a palette."""
|
||||||
# home_dylan_img_jpg_backend_1.2.2.json
|
# home_dylan_img_jpg_backend_1.2.2.json
|
||||||
cache_name = cache_fname(img, backend, light, cache_dir)
|
cache_name = cache_fname(img, backend, light, cache_dir, sat)
|
||||||
cache_file = os.path.join(*cache_name)
|
cache_file = os.path.join(*cache_name)
|
||||||
|
|
||||||
if os.path.isfile(cache_file):
|
if os.path.isfile(cache_file):
|
||||||
# Disable logging in theme.file().
|
|
||||||
logger = logging.getLogger()
|
|
||||||
logger.disabled = True
|
|
||||||
colors = theme.file(cache_file)
|
colors = theme.file(cache_file)
|
||||||
logger.disabled = False
|
colors["alpha"] = util.Color.alpha_num
|
||||||
|
|
||||||
util.Color.alpha_num = colors["alpha"]
|
|
||||||
logging.info("Found cached colorscheme.")
|
logging.info("Found cached colorscheme.")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@ -136,7 +143,8 @@ def get(img, light=False, backend="wal", cache_dir=CACHE_DIR):
|
|||||||
|
|
||||||
logging.info("Using %s backend.", backend)
|
logging.info("Using %s backend.", backend)
|
||||||
backend = sys.modules["pywal.backends.%s" % backend]
|
backend = sys.modules["pywal.backends.%s" % backend]
|
||||||
colors = colors_to_dict(getattr(backend, "get")(img, light), img)
|
colors = getattr(backend, "get")(img, light)
|
||||||
|
colors = colors_to_dict(saturate_colors(colors, sat), img)
|
||||||
|
|
||||||
util.save_file_json(colors, cache_file)
|
util.save_file_json(colors, cache_file)
|
||||||
logging.info("Generation complete.")
|
logging.info("Generation complete.")
|
||||||
|
1
pywal/colorschemes/dark/base16-snazzy.json
Normal file
1
pywal/colorschemes/dark/base16-snazzy.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"special":{"background":"#282a36","foreground":"#eff0eb","cursor":"#9aedfe"},"colors":{"color0":"#33303b","color1":"#ff5c57","color2":"#5af78e","color3":"#f3f99d","color4":"#57c7ff","color5":"#ff6ac1","color6":"#9aedfe","color7":"#eff0eb","color8":"#4f4b58","color9":"#ff5c57","color10":"#5af78e","color11":"#f3f99d","color12":"#57c7ff","color13":"#ff6ac1","color14":"#9aedfe","color15":"#eff0eb"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#353234","foreground":"#c29f6f","cursor":"#363334"},"colors":{"color0":"#353234","color1":"#97544d","color2":"#97a293","color3":"#c29f6f","color4":"#5e606c","color5":"#7a6054","color6":"#78746c","color7":"#c3c1b8","color7":"#c3c1b8","color8":"#5c575b","color9":"#97544d","color10":"#97a293","color11":"#c29f6f","color12":"#5e606c","color13":"#7a6054","color14":"#78746c","color15":"#c3c1b8","color15":"#c3c1b8"}}
|
{"special":{"background":"#353234","foreground":"#c29f6f","cursor":"#363334"},"colors":{"color0":"#353234","color1":"#97544d","color2":"#97a293","color3":"#c29f6f","color4":"#5e606c","color5":"#7a6054","color6":"#78746c","color7":"#c3c1b8","color8":"#5c575b","color9":"#97544d","color10":"#97a293","color11":"#c29f6f","color12":"#5e606c","color13":"#7a6054","color14":"#78746c","color15":"#c3c1b8"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#262020","foreground":"#aa9a71","cursor":"#b1a89c"},"colors":{"color0":"#262020","color1":"#925633","color2":"#55634f","color3":"#aa9a71","color4":"#5e6676","color5":"#57464d","color6":"#47676e","color7":"#b1a89c","color7":"#b1a89c","color8":"#514c4c","color9":"#925633","color10":"#55634f","color11":"#aa9a71","color12":"#5e6676","color13":"#57464d","color14":"#47676e","color15":"#b1a89c","color15":"#c8c1b9"}}
|
{"special":{"background":"#262020","foreground":"#aa9a71","cursor":"#b1a89c"},"colors":{"color0":"#262020","color1":"#925633","color2":"#55634f","color3":"#aa9a71","color4":"#5e6676","color5":"#57464d","color6":"#47676e","color7":"#b1a89c","color8":"#514c4c","color9":"#925633","color10":"#55634f","color11":"#aa9a71","color12":"#5e6676","color13":"#57464d","color14":"#47676e","color15":"#c8c1b9"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#30272b","foreground":"#978341","cursor":"#bcb8ba"},"colors":{"color0":"#30272b","color1":"#925633","color2":"#697234","color3":"#978341","color4":"#5e6676","color5":"#694e63","color6":"#47676e","color7":"#bcb8ba","color7":"#bcb8ba","color8":"#443c40","color9":"#925633","color10":"#697234","color11":"#978341","color12":"#5e6676","color13":"#694e63","color14":"#47676e","color15":"#bcb8ba","color15":"#bcb8ba"}}
|
{"special":{"background":"#30272b","foreground":"#978341","cursor":"#bcb8ba"},"colors":{"color0":"#30272b","color1":"#925633","color2":"#697234","color3":"#978341","color4":"#5e6676","color5":"#694e63","color6":"#47676e","color7":"#bcb8ba","color8":"#443c40","color9":"#925633","color10":"#697234","color11":"#978341","color12":"#5e6676","color13":"#694e63","color14":"#47676e","color15":"#bcb8ba"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#272725","foreground":"#bc9f67","cursor":"#282826"},"colors":{"color0":"#272725","color1":"#7d5151","color2":"#959c4f","color3":"#a78749","color4":"#455563","color5":"#9f908d","color6":"#4a5e5b","color7":"#f2f2f2","color7":"#f2f2f2","color8":"#4f4f4b","color9":"#7d5151","color10":"#959c4f","color11":"#a78749","color12":"#455563","color13":"#9f908d","color14":"#4a5e5b","color15":"#f2f2f2","color15":"#ffffff"}}
|
{"special":{"background":"#272725","foreground":"#bc9f67","cursor":"#282826"},"colors":{"color0":"#272725","color1":"#7d5151","color2":"#959c4f","color3":"#a78749","color4":"#455563","color5":"#9f908d","color6":"#4a5e5b","color7":"#f2f2f2","color8":"#4f4f4b","color9":"#7d5151","color10":"#959c4f","color11":"#a78749","color12":"#455563","color13":"#9f908d","color14":"#4a5e5b","color15":"#ffffff"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2c2a2b","foreground":"#baad8a","cursor":"#bab9ba"},"colors":{"color0":"#2c2a2b","color1":"#a67979","color2":"#809f7b","color3":"#baad8a","color4":"#6d7575","color5":"#7d6969","color6":"#7b9899","color7":"#bab9ba","color7":"#bab9ba","color8":"#545253","color9":"#a67979","color10":"#809f7b","color11":"#baad8a","color12":"#6d7575","color13":"#7d6969","color14":"#7b9899","color15":"#bab9ba","color15":"#bab9ba"}}
|
{"special":{"background":"#2c2a2b","foreground":"#baad8a","cursor":"#bab9ba"},"colors":{"color0":"#2c2a2b","color1":"#a67979","color2":"#809f7b","color3":"#baad8a","color4":"#6d7575","color5":"#7d6969","color6":"#7b9899","color7":"#bab9ba","color8":"#545253","color9":"#a67979","color10":"#809f7b","color11":"#baad8a","color12":"#6d7575","color13":"#7d6969","color14":"#7b9899","color15":"#bab9ba"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#272a2a","foreground":"#80807e","cursor":"#eaeaed"},"colors":{"color0":"#272a2a","color1":"#b05f5f","color2":"#b05f5f","color3":"#88aa55","color4":"#88aa55","color5":"#ccb05f","color6":"#ccb05f","color7":"#556973","color7":"#556973","color8":"#484c4e","color9":"#b05f5f","color10":"#b05f5f","color11":"#88aa55","color12":"#88aa55","color13":"#ccb05f","color14":"#ccb05f","color15":"#556973","color15":"#f6f7f8"}}
|
{"special":{"background":"#272a2a","foreground":"#80807e","cursor":"#eaeaed"},"colors":{"color0":"#272a2a","color1":"#b05f5f","color2":"#b05f5f","color3":"#88aa55","color4":"#88aa55","color5":"#ccb05f","color6":"#ccb05f","color7":"#556973","color8":"#484c4e","color9":"#b05f5f","color10":"#b05f5f","color11":"#88aa55","color12":"#88aa55","color13":"#ccb05f","color14":"#ccb05f","color15":"#f6f7f8"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#1c1f23","foreground":"#7e6b5f","cursor":"#202428"},"colors":{"color0":"#1c1f23","color1":"#234640","color2":"#555552","color3":"#7e6b5f","color4":"#384758","color5":"#444d4d","color6":"#415459","color7":"#ccc7bf","color7":"#ccc7bf","color8":"#33383f","color9":"#234640","color10":"#555552","color11":"#7e6b5f","color12":"#384758","color13":"#444d4d","color14":"#415459","color15":"#ccc7bf","color15":"#e3e0db"}}
|
{"special":{"background":"#1c1f23","foreground":"#7e6b5f","cursor":"#202428"},"colors":{"color0":"#1c1f23","color1":"#234640","color2":"#555552","color3":"#7e6b5f","color4":"#384758","color5":"#444d4d","color6":"#415459","color7":"#ccc7bf","color8":"#33383f","color9":"#234640","color10":"#555552","color11":"#7e6b5f","color12":"#384758","color13":"#444d4d","color14":"#415459","color15":"#e3e0db"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2b2b28","foreground":"#937b5a","cursor":"#2c2c29"},"colors":{"color0":"#2b2b28","color1":"#993f3c","color2":"#78855e","color3":"#937b5a","color4":"#415265","color5":"#885458","color6":"#646666","color7":"#c4c3c0","color7":"#c4c3c0","color8":"#c4c3c0","color9":"#993f3c","color10":"#78855e","color11":"#937b5a","color12":"#415265","color13":"#885458","color14":"#646666","color15":"#c4c3c0","color15":"#c4c3c0"}}
|
{"special":{"background":"#2b2b28","foreground":"#937b5a","cursor":"#2c2c29"},"colors":{"color0":"#2b2b28","color1":"#993f3c","color2":"#78855e","color3":"#937b5a","color4":"#415265","color5":"#885458","color6":"#646666","color7":"#c4c3c0","color8":"#c4c3c0","color9":"#993f3c","color10":"#78855e","color11":"#937b5a","color12":"#415265","color13":"#885458","color14":"#646666","color15":"#c4c3c0"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#32221a","foreground":"#d29b5a","cursor":"#cfc1a9"},"colors":{"color0":"#32221a","color1":"#c2562d","color2":"#96a65e","color3":"#d29b5a","color4":"#3b8e8c","color5":"#c47e5b","color6":"#639a90","color7":"#cfc1a9","color7":"#cfc1a9","color8":"#564a45","color9":"#c2562d","color10":"#96a65e","color11":"#d29b5a","color12":"#3b8e8c","color13":"#c47e5b","color14":"#639a90","color15":"#cfc1a9","color15":"#cfc1a9"}}
|
{"special":{"background":"#32221a","foreground":"#d29b5a","cursor":"#cfc1a9"},"colors":{"color0":"#32221a","color1":"#c2562d","color2":"#96a65e","color3":"#d29b5a","color4":"#3b8e8c","color5":"#c47e5b","color6":"#639a90","color7":"#cfc1a9","color8":"#564a45","color9":"#c2562d","color10":"#96a65e","color11":"#d29b5a","color12":"#3b8e8c","color13":"#c47e5b","color14":"#639a90","color15":"#cfc1a9"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#272825","foreground":"#7e744d","cursor":"#282926"},"colors":{"color0":"#272825","color1":"#674839","color2":"#6e794f","color3":"#7e744d","color4":"#3b474e","color5":"#554c41","color6":"#495355","color7":"#b0b0af","color7":"#b0b0af","color8":"#b0b0af","color9":"#674839","color10":"#6e794f","color11":"#7e744d","color12":"#3b474e","color13":"#554c41","color14":"#495355","color15":"#b0b0af","color15":"#c7c7c7"}}
|
{"special":{"background":"#272825","foreground":"#7e744d","cursor":"#282926"},"colors":{"color0":"#272825","color1":"#674839","color2":"#6e794f","color3":"#7e744d","color4":"#3b474e","color5":"#554c41","color6":"#495355","color7":"#b0b0af","color8":"#b0b0af","color9":"#674839","color10":"#6e794f","color11":"#7e744d","color12":"#3b474e","color13":"#554c41","color14":"#495355","color15":"#c7c7c7"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2c292b","foreground":"#c8a168","cursor":"#312e30"},"colors":{"color0":"#2c292b","color1":"#ab6d4e","color2":"#88885d","color3":"#c8a168","color4":"#45626e","color5":"#7c5545","color6":"#456e66","color7":"#c3b495","color7":"#c3b495","color8":"#c3b495","color9":"#ab6d4e","color10":"#88885d","color11":"#c8a168","color12":"#45626e","color13":"#7c5545","color14":"#456e66","color15":"#c3b495","color15":"#c3b495"}}
|
{"special":{"background":"#2c292b","foreground":"#c8a168","cursor":"#312e30"},"colors":{"color0":"#2c292b","color1":"#ab6d4e","color2":"#88885d","color3":"#c8a168","color4":"#45626e","color5":"#7c5545","color6":"#456e66","color7":"#c3b495","color8":"#c3b495","color9":"#ab6d4e","color10":"#88885d","color11":"#c8a168","color12":"#45626e","color13":"#7c5545","color14":"#456e66","color15":"#c3b495"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#383844","foreground":"#cba264","cursor":"#cdc5b7"},"colors":{"color0":"#383844","color1":"#a7664a","color2":"#6e8c6e","color3":"#cba264","color4":"#535f6b","color5":"#775a62","color6":"#576e68","color7":"#cdc5b7","color7":"#cdc5b7","color8":"#4f4f60","color9":"#a7664a","color10":"#6e8c6e","color11":"#cba264","color12":"#535f6b","color13":"#775a62","color14":"#576e68","color15":"#cdc5b7","color15":"#cdc5b7"}}
|
{"special":{"background":"#383844","foreground":"#cba264","cursor":"#cdc5b7"},"colors":{"color0":"#383844","color1":"#a7664a","color2":"#6e8c6e","color3":"#cba264","color4":"#535f6b","color5":"#775a62","color6":"#576e68","color7":"#cdc5b7","color8":"#4f4f60","color9":"#a7664a","color10":"#6e8c6e","color11":"#cba264","color12":"#535f6b","color13":"#775a62","color14":"#576e68","color15":"#cdc5b7"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#1f1d1d","foreground":"#856237","cursor":"#ccbaad"},"colors":{"color0":"#1f1d1d","color1":"#6b4747","color2":"#8d7138","color3":"#856237","color4":"#3c3c49","color5":"#3c342e","color6":"#5d5a4b","color7":"#ccbaad","color7":"#ccbaad","color8":"#4a4a4a","color9":"#6b4747","color10":"#8d7138","color11":"#856237","color12":"#3c3c49","color13":"#3c342e","color14":"#5d5a4b","color15":"#ccbaad","color15":"#eae2dc"}}
|
{"special":{"background":"#1f1d1d","foreground":"#856237","cursor":"#ccbaad"},"colors":{"color0":"#1f1d1d","color1":"#6b4747","color2":"#8d7138","color3":"#856237","color4":"#3c3c49","color5":"#3c342e","color6":"#5d5a4b","color7":"#ccbaad","color8":"#4a4a4a","color9":"#6b4747","color10":"#8d7138","color11":"#856237","color12":"#3c3c49","color13":"#3c342e","color14":"#5d5a4b","color15":"#eae2dc"}}
|
@ -1 +0,0 @@
|
|||||||
{"special":{"background":"#","foreground":""
|
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#27201d","foreground":"#987f4b","cursor":"#b7afa4"},"colors":{"color0":"#27201d","color1":"#663c23","color2":"#5c5933","color3":"#987f4b","color4":"#4b484b","color5":"#9c8065","color6":"#685a50","color7":"#b7afa4","color7":"#b7afa4","color8":"#3c3633","color9":"#663c23","color10":"#5c5933","color11":"#987f4b","color12":"#4b484b","color13":"#9c8065","color14":"#685a50","color15":"#b7afa4","color15":"#b7afa4"}}
|
{"special":{"background":"#27201d","foreground":"#987f4b","cursor":"#b7afa4"},"colors":{"color0":"#27201d","color1":"#663c23","color2":"#5c5933","color3":"#987f4b","color4":"#4b484b","color5":"#9c8065","color6":"#685a50","color7":"#b7afa4","color8":"#3c3633","color9":"#663c23","color10":"#5c5933","color11":"#987f4b","color12":"#4b484b","color13":"#9c8065","color14":"#685a50","color15":"#b7afa4"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2c2833","foreground":"#b7a16c","cursor":"#dbd7b8"},"colors":{"color0":"#2c2833","color1":"#bf6257","color2":"#82a37c","color3":"#b7a16c","color4":"#6d6a80","color5":"#825969","color6":"#938e8f","color7":"#dbd7b8","color7":"#dbd7b8","color8":"#4e4955","color9":"#bf6257","color10":"#82a37c","color11":"#b7a16c","color12":"#6d6a80","color13":"#825969","color14":"#938e8f","color15":"#dbd7b8","color15":"#dbd7b8"}}
|
{"special":{"background":"#2c2833","foreground":"#b7a16c","cursor":"#dbd7b8"},"colors":{"color0":"#2c2833","color1":"#bf6257","color2":"#82a37c","color3":"#b7a16c","color4":"#6d6a80","color5":"#825969","color6":"#938e8f","color7":"#dbd7b8","color8":"#4e4955","color9":"#bf6257","color10":"#82a37c","color11":"#b7a16c","color12":"#6d6a80","color13":"#825969","color14":"#938e8f","color15":"#dbd7b8"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#242e32","foreground":"#ac8d6e","cursor":"#c4c4b5"},"colors":{"color0":"#242e32","color1":"#a66959","color2":"#769070","color3":"#ac8d6e","color4":"#607a86","color5":"#8a757e","color6":"#60867f","color7":"#c4c4b5","color7":"#c4c4b5","color8":"#35444b","color9":"#a66959","color10":"#769070","color11":"#ac8d6e","color12":"#607a86","color13":"#8a757e","color14":"#60867f","color15":"#c4c4b5","color15":"#c4c4b5"}}
|
{"special":{"background":"#242e32","foreground":"#ac8d6e","cursor":"#c4c4b5"},"colors":{"color0":"#242e32","color1":"#a66959","color2":"#769070","color3":"#ac8d6e","color4":"#607a86","color5":"#8a757e","color6":"#60867f","color7":"#c4c4b5","color8":"#35444b","color9":"#a66959","color10":"#769070","color11":"#ac8d6e","color12":"#607a86","color13":"#8a757e","color14":"#60867f","color15":"#c4c4b5"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2e3738","foreground":"#b8af97","cursor":"#aba599"},"colors":{"color0":"#2e3738","color1":"#9c7f5d","color2":"#8e958f","color3":"#b8af97","color4":"#828882","color5":"#bb9a7f","color6":"#9daba2","color7":"#aba599","color7":"#aba599","color8":"#485152","color9":"#9c7f5d","color10":"#8e958f","color11":"#b8af97","color12":"#828882","color13":"#bb9a7f","color14":"#9daba2","color15":"#aba599","color15":"#aba599"}}
|
{"special":{"background":"#2e3738","foreground":"#b8af97","cursor":"#aba599"},"colors":{"color0":"#2e3738","color1":"#9c7f5d","color2":"#8e958f","color3":"#b8af97","color4":"#828882","color5":"#bb9a7f","color6":"#9daba2","color7":"#aba599","color8":"#485152","color9":"#9c7f5d","color10":"#8e958f","color11":"#b8af97","color12":"#828882","color13":"#bb9a7f","color14":"#9daba2","color15":"#aba599"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#1c2319","foreground":"#be9e61","cursor":"#bcbebb"},"colors":{"color0":"#1c2319","color1":"#c14d38","color2":"#a0ce52","color3":"#be9e61","color4":"#4c7e89","color5":"#814d61","color6":"#79a69d","color7":"#bcbebb","color7":"#bcbebb","color8":"#35422f","color9":"#c14d38","color10":"#a0ce52","color11":"#be9e61","color12":"#4c7e89","color13":"#814d61","color14":"#79a69d","color15":"#bcbebb","color15":"#bcbebb"}}
|
{"special":{"background":"#1c2319","foreground":"#be9e61","cursor":"#bcbebb"},"colors":{"color0":"#1c2319","color1":"#c14d38","color2":"#a0ce52","color3":"#be9e61","color4":"#4c7e89","color5":"#814d61","color6":"#79a69d","color7":"#bcbebb","color8":"#35422f","color9":"#c14d38","color10":"#a0ce52","color11":"#be9e61","color12":"#4c7e89","color13":"#814d61","color14":"#79a69d","color15":"#bcbebb"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#262c1b","foreground":"#d6caaa","cursor":"#c1c5bd"},"colors":{"color0":"#262c1b","color1":"#7f5545","color2":"#677c54","color3":"#bba772","color4":"#6e6a5b","color5":"#92887e","color6":"#7c7562","color7":"#cccdbd","color7":"#cccdbd","color8":"#474c3e","color9":"#7f5545","color10":"#677c54","color11":"#bba772","color12":"#6e6a5b","color13":"#92887e","color14":"#7c7562","color15":"#cccdbd","color15":"#e0e1d7"}}
|
{"special":{"background":"#262c1b","foreground":"#d6caaa","cursor":"#c1c5bd"},"colors":{"color0":"#262c1b","color1":"#7f5545","color2":"#677c54","color3":"#bba772","color4":"#6e6a5b","color5":"#92887e","color6":"#7c7562","color7":"#cccdbd","color8":"#474c3e","color9":"#7f5545","color10":"#677c54","color11":"#bba772","color12":"#6e6a5b","color13":"#92887e","color14":"#7c7562","color15":"#e0e1d7"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2f2832","foreground":"#9a8e80","cursor":"#302833"},"colors":{"color0":"#2f2832","color1":"#885d50","color2":"#747965","color3":"#9a8e80","color4":"#4a4e5a","color5":"#76675b","color6":"#59555c","color7":"#bcb5b5","color7":"#bcb5b5","color8":"#4a3f4e","color9":"#885d50","color10":"#747965","color11":"#9a8e80","color12":"#4a4e5a","color13":"#76675b","color14":"#59555c","color15":"#bcb5b5","color15":"#dddada"}}
|
{"special":{"background":"#2f2832","foreground":"#9a8e80","cursor":"#302833"},"colors":{"color0":"#2f2832","color1":"#885d50","color2":"#747965","color3":"#9a8e80","color4":"#4a4e5a","color5":"#76675b","color6":"#59555c","color7":"#bcb5b5","color8":"#4a3f4e","color9":"#885d50","color10":"#747965","color11":"#9a8e80","color12":"#4a4e5a","color13":"#76675b","color14":"#59555c","color15":"#dddada"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#161f14","foreground":"#806420","cursor":"#172015"},"colors":{"color0":"#161f14","color1":"#744425","color2":"#50703f","color3":"#806420","color4":"#56535d","color5":"#71532f","color6":"#45605d","color7":"#aca173","color7":"#aca173","color8":"#2d352b","color9":"#744425","color10":"#50703f","color11":"#806420","color12":"#56535d","color13":"#71532f","color14":"#45605d","color15":"#aca173","color15":"#aca173"}}
|
{"special":{"background":"#161f14","foreground":"#806420","cursor":"#172015"},"colors":{"color0":"#161f14","color1":"#744425","color2":"#50703f","color3":"#806420","color4":"#56535d","color5":"#71532f","color6":"#45605d","color7":"#aca173","color8":"#2d352b","color9":"#744425","color10":"#50703f","color11":"#806420","color12":"#56535d","color13":"#71532f","color14":"#45605d","color15":"#aca173"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#1e1e1e","foreground":"#4c6640","cursor":"#9e9e91"},"colors":{"color0":"#1e1e1e","color1":"#98442f","color2":"#9d8554","color3":"#4c6640","color4":"#4c596b","color5":"#7b6072","color6":"#385853","color7":"#9e9e91","color7":"#9e9e91","color8":"#363636","color9":"#98442f","color10":"#9d8554","color11":"#4c6640","color12":"#4c596b","color13":"#7b6072","color14":"#385853","color15":"#9e9e91","color15":"#9e9e91"}}
|
{"special":{"background":"#1e1e1e","foreground":"#4c6640","cursor":"#9e9e91"},"colors":{"color0":"#1e1e1e","color1":"#98442f","color2":"#9d8554","color3":"#4c6640","color4":"#4c596b","color5":"#7b6072","color6":"#385853","color7":"#9e9e91","color8":"#363636","color9":"#98442f","color10":"#9d8554","color11":"#4c6640","color12":"#4c596b","color13":"#7b6072","color14":"#385853","color15":"#9e9e91"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#322b26","foreground":"#d7b18a","cursor":"#c8b49d"},"colors":{"color0":"#322b26","color1":"#bd6151","color2":"#6e9383","color3":"#d7b18a","color4":"#8a8f94","color5":"#bd9a81","color6":"#91a1a5","color7":"#c8b49d","color7":"#c8b49d","color8":"#63554c","color9":"#bd6151","color10":"#6e9383","color11":"#d7b18a","color12":"#8a8f94","color13":"#bd9a81","color14":"#91a1a5","color15":"#c8b49d","color15":"#c8b49d"}}
|
{"special":{"background":"#322b26","foreground":"#d7b18a","cursor":"#c8b49d"},"colors":{"color0":"#322b26","color1":"#bd6151","color2":"#6e9383","color3":"#d7b18a","color4":"#8a8f94","color5":"#bd9a81","color6":"#91a1a5","color7":"#c8b49d","color8":"#63554c","color9":"#bd6151","color10":"#6e9383","color11":"#d7b18a","color12":"#8a8f94","color13":"#bd9a81","color14":"#91a1a5","color15":"#c8b49d"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#272733","foreground":"#dabe72","cursor":"#cac5b7"},"colors":{"color0":"#272733","color1":"#d65f2f","color2":"#aabf7f","color3":"#dabe72","color4":"#5e7e9b","color5":"#bf6c68","color6":"#5a7273","color7":"#cac5b7","color7":"#cac5b7","color8":"#48485e","color9":"#d65f2f","color10":"#aabf7f","color11":"#dabe72","color12":"#5e7e9b","color13":"#bf6c68","color14":"#5a7273","color15":"#cac5b7","color15":"#d5d1c6"}}
|
{"special":{"background":"#272733","foreground":"#dabe72","cursor":"#cac5b7"},"colors":{"color0":"#272733","color1":"#d65f2f","color2":"#aabf7f","color3":"#dabe72","color4":"#5e7e9b","color5":"#bf6c68","color6":"#5a7273","color7":"#cac5b7","color8":"#48485e","color9":"#d65f2f","color10":"#aabf7f","color11":"#dabe72","color12":"#5e7e9b","color13":"#bf6c68","color14":"#5a7273","color15":"#d5d1c6"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#303728","foreground":"#d4b06c","cursor":"#b9bcb7"},"colors":{"color0":"#303728","color1":"#d06e5c","color2":"#abbb52","color3":"#d4b06c","color4":"#4c7e89","color5":"#814d61","color6":"#79a69d","color7":"#b9bcb7","color7":"#b9bcb7","color8":"#505847","color9":"#d06e5c","color10":"#abbb52","color11":"#d4b06c","color12":"#4c7e89","color13":"#814d61","color14":"#79a69d","color15":"#b9bcb7","color15":"#b9bcb7"}}
|
{"special":{"background":"#303728","foreground":"#d4b06c","cursor":"#b9bcb7"},"colors":{"color0":"#303728","color1":"#d06e5c","color2":"#abbb52","color3":"#d4b06c","color4":"#4c7e89","color5":"#814d61","color6":"#79a69d","color7":"#b9bcb7","color8":"#505847","color9":"#d06e5c","color10":"#abbb52","color11":"#d4b06c","color12":"#4c7e89","color13":"#814d61","color14":"#79a69d","color15":"#b9bcb7"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#222222","foreground":"#c5c5b2","cursor":"#242424"},"colors":{"color0":"#222222","color1":"#4d4d4d","color2":"#8a8c84","color3":"#c5c5b2","color4":"#5d5d5d","color5":"#707070","color6":"#898989","color7":"#c2c2c2","color7":"#c2c2c2","color8":"#484848","color9":"#4d4d4d","color10":"#8a8c84","color11":"#c5c5b2","color12":"#5d5d5d","color13":"#707070","color14":"#898989","color15":"#c2c2c2","color15":"#f1f1f1"}}
|
{"special":{"background":"#222222","foreground":"#c5c5b2","cursor":"#242424"},"colors":{"color0":"#222222","color1":"#4d4d4d","color2":"#8a8c84","color3":"#c5c5b2","color4":"#5d5d5d","color5":"#707070","color6":"#898989","color7":"#c2c2c2","color8":"#484848","color9":"#4d4d4d","color10":"#8a8c84","color11":"#c5c5b2","color12":"#5d5d5d","color13":"#707070","color14":"#898989","color15":"#f1f1f1"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#20201f","foreground":"#799c6a","cursor":"#b0b0a2"},"colors":{"color0":"#20201f","color1":"#996140","color2":"#9d8554","color3":"#799c6a","color4":"#5f656a","color5":"#7b6064","color6":"#566e6b","color7":"#b0b0a2","color7":"#b0b0a2","color8":"#3a3a38","color9":"#996140","color10":"#9d8554","color11":"#799c6a","color12":"#5f656a","color13":"#7b6064","color14":"#566e6b","color15":"#b0b0a2","color15":"#d3d3cb"}}
|
{"special":{"background":"#20201f","foreground":"#799c6a","cursor":"#b0b0a2"},"colors":{"color0":"#20201f","color1":"#996140","color2":"#9d8554","color3":"#799c6a","color4":"#5f656a","color5":"#7b6064","color6":"#566e6b","color7":"#b0b0a2","color8":"#3a3a38","color9":"#996140","color10":"#9d8554","color11":"#799c6a","color12":"#5f656a","color13":"#7b6064","color14":"#566e6b","color15":"#d3d3cb"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#241d1a","foreground":"#cca75f","cursor":"#251e1b"},"colors":{"color0":"#241d1a","color1":"#9f6434","color2":"#9dac5f","color3":"#cca75f","color4":"#2f7d7c","color5":"#b5896e","color6":"#52877f","color7":"#c7b8ac","color7":"#c7b8ac","color8":"#50413a","color9":"#9f6434","color10":"#9dac5f","color11":"#cca75f","color12":"#2f7d7c","color13":"#b5896e","color14":"#52877f","color15":"#c7b8ac","color15":"#c7b8ac"}}
|
{"special":{"background":"#241d1a","foreground":"#cca75f","cursor":"#251e1b"},"colors":{"color0":"#241d1a","color1":"#9f6434","color2":"#9dac5f","color3":"#cca75f","color4":"#2f7d7c","color5":"#b5896e","color6":"#52877f","color7":"#c7b8ac","color8":"#50413a","color9":"#9f6434","color10":"#9dac5f","color11":"#cca75f","color12":"#2f7d7c","color13":"#b5896e","color14":"#52877f","color15":"#c7b8ac"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2f2b2c","foreground":"#cacaca","cursor":"#dedede"},"colors":{"color0":"#2f2b2c","color1":"#5a5a5a","color2":"#989898","color3":"#cacaca","color4":"#656565","color5":"#b1b1b1","color6":"#7f7f7f","color7":"#dedede","color7":"#dedede","color8":"#504c4e","color9":"#5a5a5a","color10":"#989898","color11":"#cacaca","color12":"#656565","color13":"#b1b1b1","color14":"#7f7f7f","color15":"#dedede","color15":"#FFFFFF"}}
|
{"special":{"background":"#2f2b2c","foreground":"#cacaca","cursor":"#dedede"},"colors":{"color0":"#2f2b2c","color1":"#5a5a5a","color2":"#989898","color3":"#cacaca","color4":"#656565","color5":"#b1b1b1","color6":"#7f7f7f","color7":"#dedede","color8":"#504c4e","color9":"#5a5a5a","color10":"#989898","color11":"#cacaca","color12":"#656565","color13":"#b1b1b1","color14":"#7f7f7f","color15":"#FFFFFF"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2f2a2a","foreground":"#b2885d","cursor":"#332e2e"},"colors":{"color0":"#2f2a2a","color1":"#854340","color2":"#668c71","color3":"#b2885d","color4":"#41647b","color5":"#915556","color6":"#477578","color7":"#c9c8c8","color7":"#c9c8c8","color8":"#c9c8c8","color9":"#854340","color10":"#668c71","color11":"#b2885d","color12":"#41647b","color13":"#915556","color14":"#477578","color15":"#c9c8c8","color15":"#c9c8c8"}}
|
{"special":{"background":"#2f2a2a","foreground":"#b2885d","cursor":"#332e2e"},"colors":{"color0":"#2f2a2a","color1":"#854340","color2":"#668c71","color3":"#b2885d","color4":"#41647b","color5":"#915556","color6":"#477578","color7":"#c9c8c8","color8":"#c9c8c8","color9":"#854340","color10":"#668c71","color11":"#b2885d","color12":"#41647b","color13":"#915556","color14":"#477578","color15":"#c9c8c8"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2b2428","foreground":"#b29d6a","cursor":"#c2b7aa"},"colors":{"color0":"#2b2428","color1":"#89453c","color2":"#59713f","color3":"#b29d6a","color4":"#464e59","color5":"#614e44","color6":"#4f545b","color7":"#c2b7aa","color7":"#c2b7aa","color8":"#413c40","color9":"#89453c","color10":"#59713f","color11":"#b29d6a","color12":"#464e59","color13":"#614e44","color14":"#4f545b","color15":"#c2b7aa","color15":"#c2b7aa"}}
|
{"special":{"background":"#2b2428","foreground":"#b29d6a","cursor":"#c2b7aa"},"colors":{"color0":"#2b2428","color1":"#89453c","color2":"#59713f","color3":"#b29d6a","color4":"#464e59","color5":"#614e44","color6":"#4f545b","color7":"#c2b7aa","color8":"#413c40","color9":"#89453c","color10":"#59713f","color11":"#b29d6a","color12":"#464e59","color13":"#614e44","color14":"#4f545b","color15":"#c2b7aa"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2c2c2e","foreground":"#87835d","cursor":"#2e2e30"},"colors":{"color0":"#2c2c2e","color1":"#645446","color2":"#59674f","color3":"#87835d","color4":"#4d554f","color5":"#70614f","color6":"#666755","color7":"#aba786","color7":"#aba786","color8":"#aba786","color9":"#645446","color10":"#59674f","color11":"#87835d","color12":"#4d554f","color13":"#70614f","color14":"#666755","color15":"#aba786","color15":"#c4c1aa"}}
|
{"special":{"background":"#2c2c2e","foreground":"#87835d","cursor":"#2e2e30"},"colors":{"color0":"#2c2c2e","color1":"#645446","color2":"#59674f","color3":"#87835d","color4":"#4d554f","color5":"#70614f","color6":"#666755","color7":"#aba786","color8":"#aba786","color9":"#645446","color10":"#59674f","color11":"#87835d","color12":"#4d554f","color13":"#70614f","color14":"#666755","color15":"#c4c1aa"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#22211f","foreground":"#827834","cursor":"#252422"},"colors":{"color0":"#22211f","color1":"#785326","color2":"#516941","color3":"#827834","color4":"#42514f","color5":"#6a5632","color6":"#4e5d4d","color7":"#b4b399","color7":"#b4b399","color8":"#b4b399","color9":"#785326","color10":"#516941","color11":"#827834","color12":"#42514f","color13":"#6a5632","color14":"#4e5d4d","color15":"#b4b399","color15":"#c9c9b6"}}
|
{"special":{"background":"#22211f","foreground":"#827834","cursor":"#252422"},"colors":{"color0":"#22211f","color1":"#785326","color2":"#516941","color3":"#827834","color4":"#42514f","color5":"#6a5632","color6":"#4e5d4d","color7":"#b4b399","color8":"#b4b399","color9":"#785326","color10":"#516941","color11":"#827834","color12":"#42514f","color13":"#6a5632","color14":"#4e5d4d","color15":"#c9c9b6"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#231c0d","foreground":"#aead5d","cursor":"#a5a39d"},"colors":{"color0":"#231c0d","color1":"#a47b3d","color2":"#7b9764","color3":"#aead5d","color4":"#628e8f","color5":"#ad9d52","color6":"#709681","color7":"#a5a39d","color7":"#a5a39d","color8":"#3f392a","color9":"#a47b3d","color10":"#7b9764","color11":"#aead5d","color12":"#628e8f","color13":"#ad9d52","color14":"#709681","color15":"#a5a39d","color15":"#a5a39d"}}
|
{"special":{"background":"#231c0d","foreground":"#aead5d","cursor":"#a5a39d"},"colors":{"color0":"#231c0d","color1":"#a47b3d","color2":"#7b9764","color3":"#aead5d","color4":"#628e8f","color5":"#ad9d52","color6":"#709681","color7":"#a5a39d","color8":"#3f392a","color9":"#a47b3d","color10":"#7b9764","color11":"#aead5d","color12":"#628e8f","color13":"#ad9d52","color14":"#709681","color15":"#a5a39d"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#263139","foreground":"#dac99d","cursor":"#28343c"},"colors":{"color0":"#263139","color1":"#f36f62","color2":"#c5e19c","color3":"#ccb478","color4":"#4c7e89","color5":"#814d61","color6":"#79a69d","color7":"#c4c4b5","color7":"#c4c4b5","color8":"#455867","color9":"#f36f62","color10":"#c5e19c","color11":"#ccb478","color12":"#4c7e89","color13":"#814d61","color14":"#79a69d","color15":"#c4c4b5","color15":"#dbdbd1"}}
|
{"special":{"background":"#263139","foreground":"#dac99d","cursor":"#28343c"},"colors":{"color0":"#263139","color1":"#f36f62","color2":"#c5e19c","color3":"#ccb478","color4":"#4c7e89","color5":"#814d61","color6":"#79a69d","color7":"#c4c4b5","color8":"#455867","color9":"#f36f62","color10":"#c5e19c","color11":"#ccb478","color12":"#4c7e89","color13":"#814d61","color14":"#79a69d","color15":"#dbdbd1"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#322f30","foreground":"#8d7766","cursor":"#353233"},"colors":{"color0":"#322f30","color1":"#654c51","color2":"#7f8281","color3":"#8d7766","color4":"#5b697e","color5":"#7b6b75","color6":"#7d8592","color7":"#c0bfbf","color7":"#c0bfbf","color8":"#c0bfbf","color9":"#654c51","color10":"#7f8281","color11":"#8d7766","color12":"#5b697e","color13":"#7b6b75","color14":"#7d8592","color15":"#c0bfbf","color15":"#dfdfdf"}}
|
{"special":{"background":"#322f30","foreground":"#8d7766","cursor":"#353233"},"colors":{"color0":"#322f30","color1":"#654c51","color2":"#7f8281","color3":"#8d7766","color4":"#5b697e","color5":"#7b6b75","color6":"#7d8592","color7":"#c0bfbf","color8":"#c0bfbf","color9":"#654c51","color10":"#7f8281","color11":"#8d7766","color12":"#5b697e","color13":"#7b6b75","color14":"#7d8592","color15":"#dfdfdf"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#282623","foreground":"#ad8b67","cursor":"#2b2825"},"colors":{"color0":"#282623","color1":"#935334","color2":"#66604d","color3":"#ad8b67","color4":"#504b44","color5":"#634737","color6":"#505349","color7":"#bcbba4","color7":"#bcbba4","color8":"#43403b","color9":"#935334","color10":"#66604d","color11":"#ad8b67","color12":"#504b44","color13":"#634737","color14":"#505349","color15":"#bcbba4","color15":"#dbdace"}}
|
{"special":{"background":"#282623","foreground":"#ad8b67","cursor":"#2b2825"},"colors":{"color0":"#282623","color1":"#935334","color2":"#66604d","color3":"#ad8b67","color4":"#504b44","color5":"#634737","color6":"#505349","color7":"#bcbba4","color8":"#43403b","color9":"#935334","color10":"#66604d","color11":"#ad8b67","color12":"#504b44","color13":"#634737","color14":"#505349","color15":"#dbdace"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#322835","foreground":"#b08960","cursor":"#332836"},"colors":{"color0":"#322835","color1":"#674f4a","color2":"#67786d","color3":"#b08960","color4":"#5e6d79","color5":"#7d6969","color6":"#6a7a76","color7":"#ccbfb3","color7":"#ccbfb3","color8":"#4b3f4e","color9":"#674f4a","color10":"#67786d","color11":"#b08960","color12":"#5e6d79","color13":"#7d6969","color14":"#6a7a76","color15":"#ccbfb3","color15":"#ccbfb3"}}
|
{"special":{"background":"#322835","foreground":"#b08960","cursor":"#332836"},"colors":{"color0":"#322835","color1":"#674f4a","color2":"#67786d","color3":"#b08960","color4":"#5e6d79","color5":"#7d6969","color6":"#6a7a76","color7":"#ccbfb3","color8":"#4b3f4e","color9":"#674f4a","color10":"#67786d","color11":"#b08960","color12":"#5e6d79","color13":"#7d6969","color14":"#6a7a76","color15":"#ccbfb3"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#252326","foreground":"#7a8648","cursor":"#c4bbb0"},"colors":{"color0":"#252326","color1":"#93503e","color2":"#9d8554","color3":"#7a8648","color4":"#5f656a","color5":"#7b6064","color6":"#566e6b","color7":"#c4bbb0","color7":"#c4bbb0","color8":"#413f43","color9":"#93503e","color10":"#9d8554","color11":"#7a8648","color12":"#5f656a","color13":"#7b6064","color14":"#566e6b","color15":"#c4bbb0","color15":"#c4bbb0"}}
|
{"special":{"background":"#252326","foreground":"#7a8648","cursor":"#c4bbb0"},"colors":{"color0":"#252326","color1":"#93503e","color2":"#9d8554","color3":"#7a8648","color4":"#5f656a","color5":"#7b6064","color6":"#566e6b","color7":"#c4bbb0","color8":"#413f43","color9":"#93503e","color10":"#9d8554","color11":"#7a8648","color12":"#5f656a","color13":"#7b6064","color14":"#566e6b","color15":"#c4bbb0"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#282423","foreground":"#987f4b","cursor":"#b7afa4"},"colors":{"color0":"#282423","color1":"#925633","color2":"#757c60","color3":"#987f4b","color4":"#515962","color5":"#685054","color6":"#506168","color7":"#b7afa4","color7":"#b7afa4","color8":"#3f3d3c","color9":"#925633","color10":"#757c60","color11":"#987f4b","color12":"#515962","color13":"#685054","color14":"#506168","color15":"#b7afa4","color15":"#b7afa4"}}
|
{"special":{"background":"#282423","foreground":"#987f4b","cursor":"#b7afa4"},"colors":{"color0":"#282423","color1":"#925633","color2":"#757c60","color3":"#987f4b","color4":"#515962","color5":"#685054","color6":"#506168","color7":"#b7afa4","color8":"#3f3d3c","color9":"#925633","color10":"#757c60","color11":"#987f4b","color12":"#515962","color13":"#685054","color14":"#506168","color15":"#b7afa4"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2c2c2c","foreground":"#d0c57a","cursor":"#ededb7"},"colors":{"color0":"#2c2c2c","color1":"#c77369","color2":"#93988a","color3":"#d0c57a","color4":"#747f89","color5":"#825969","color6":"#938e8f","color7":"#ddddb5","color7":"#ddddb5","color8":"#4e4e4e","color9":"#c77369","color10":"#93988a","color11":"#d0c57a","color12":"#747f89","color13":"#825969","color14":"#938e8f","color15":"#ddddb5","color15":"#ededb7"}}
|
{"special":{"background":"#2c2c2c","foreground":"#d0c57a","cursor":"#ededb7"},"colors":{"color0":"#2c2c2c","color1":"#c77369","color2":"#93988a","color3":"#d0c57a","color4":"#747f89","color5":"#825969","color6":"#938e8f","color7":"#ddddb5","color8":"#4e4e4e","color9":"#c77369","color10":"#93988a","color11":"#d0c57a","color12":"#747f89","color13":"#825969","color14":"#938e8f","color15":"#ededb7"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#28282C","foreground":"#A18673","cursor":"#F3F3F3"},"colors":{"color0":"#28282C","color1":"#BF5C56","color2":"#BF5C56","color3":"#97B19C","color4":"#97B19C","color5":"#D7BD8A","color6":"#D7BD8A","color7":"#545F72","color7":"#545F72","color8":"#404047","color9":"#BF5C56","color10":"#BF5C56","color11":"#97B19C","color12":"#97B19C","color13":"#D7BD8A","color14":"#D7BD8A","color15":"#545F72","color15":"#F4F4F2"}}
|
{"special":{"background":"#28282C","foreground":"#A18673","cursor":"#F3F3F3"},"colors":{"color0":"#28282C","color1":"#BF5C56","color2":"#BF5C56","color3":"#97B19C","color4":"#97B19C","color5":"#D7BD8A","color6":"#D7BD8A","color7":"#545F72","color8":"#404047","color9":"#BF5C56","color10":"#BF5C56","color11":"#97B19C","color12":"#97B19C","color13":"#D7BD8A","color14":"#D7BD8A","color15":"#F4F4F2"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#252a32","foreground":"#b39580","cursor":"#272c34"},"colors":{"color0":"#252a32","color1":"#876058","color2":"#6f7f71","color3":"#b39580","color4":"#546780","color5":"#84787d","color6":"#556f86","color7":"#bab7b5","color7":"#bab7b5","color8":"#bab7b5","color9":"#876058","color10":"#6f7f71","color11":"#b39580","color12":"#546780","color13":"#84787d","color14":"#556f86","color15":"#bab7b5","color15":"#dfdedd"}}
|
{"special":{"background":"#252a32","foreground":"#b39580","cursor":"#272c34"},"colors":{"color0":"#252a32","color1":"#876058","color2":"#6f7f71","color3":"#b39580","color4":"#546780","color5":"#84787d","color6":"#556f86","color7":"#bab7b5","color8":"#bab7b5","color9":"#876058","color10":"#6f7f71","color11":"#b39580","color12":"#546780","color13":"#84787d","color14":"#556f86","color15":"#dfdedd"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#242a2b","foreground":"#8d8150","cursor":"#242b2c"},"colors":{"color0":"#242a2b","color1":"#674839","color2":"#6e794f","color3":"#8d8150","color4":"#3b474e","color5":"#554c41","color6":"#495355","color7":"#939381","color7":"#939381","color8":"#939381","color9":"#674839","color10":"#6e794f","color11":"#8d8150","color12":"#3b474e","color13":"#554c41","color14":"#495355","color15":"#939381","color15":"#abab9c"}}
|
{"special":{"background":"#242a2b","foreground":"#8d8150","cursor":"#242b2c"},"colors":{"color0":"#242a2b","color1":"#674839","color2":"#6e794f","color3":"#8d8150","color4":"#3b474e","color5":"#554c41","color6":"#495355","color7":"#939381","color8":"#939381","color9":"#674839","color10":"#6e794f","color11":"#8d8150","color12":"#3b474e","color13":"#554c41","color14":"#495355","color15":"#abab9c"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#29231f","foreground":"#aa8f5f","cursor":"#bcb7aa"},"colors":{"color0":"#29231f","color1":"#675141","color2":"#625438","color3":"#aa8f5f","color4":"#6e6051","color5":"#514540","color6":"#5e4e3c","color7":"#bcb7aa","color7":"#bcb7aa","color8":"#514b49","color9":"#675141","color10":"#625438","color11":"#aa8f5f","color12":"#6e6051","color13":"#514540","color14":"#5e4e3c","color15":"#bcb7aa","color15":"#dedbd5"}}
|
{"special":{"background":"#29231f","foreground":"#aa8f5f","cursor":"#bcb7aa"},"colors":{"color0":"#29231f","color1":"#675141","color2":"#625438","color3":"#aa8f5f","color4":"#6e6051","color5":"#514540","color6":"#5e4e3c","color7":"#bcb7aa","color8":"#514b49","color9":"#675141","color10":"#625438","color11":"#aa8f5f","color12":"#6e6051","color13":"#514540","color14":"#5e4e3c","color15":"#dedbd5"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#262f33","foreground":"#948d65","cursor":"#b5b699"},"colors":{"color0":"#262f33","color1":"#804f4e","color2":"#68786c","color3":"#948d65","color4":"#47575f","color5":"#74636a","color6":"#526562","color7":"#b5b699","color7":"#b5b699","color8":"#464c50","color9":"#804f4e","color10":"#68786c","color11":"#948d65","color12":"#47575f","color13":"#74636a","color14":"#526562","color15":"#b5b699","color15":"#cbcbb7"}}
|
{"special":{"background":"#262f33","foreground":"#948d65","cursor":"#b5b699"},"colors":{"color0":"#262f33","color1":"#804f4e","color2":"#68786c","color3":"#948d65","color4":"#47575f","color5":"#74636a","color6":"#526562","color7":"#b5b699","color8":"#464c50","color9":"#804f4e","color10":"#68786c","color11":"#948d65","color12":"#47575f","color13":"#74636a","color14":"#526562","color15":"#cbcbb7"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2d3144","foreground":"#96915d","cursor":"#cfccbe"},"colors":{"color0":"#2d3144","color1":"#8d6d5c","color2":"#6d806d","color3":"#96915d","color4":"#68758d","color5":"#8a747b","color6":"#8d97a8","color7":"#cfccbe","color7":"#cfccbe","color8":"#525a69","color9":"#8d6d5c","color10":"#6d806d","color11":"#96915d","color12":"#68758d","color13":"#8a747b","color14":"#8d97a8","color15":"#cfccbe","color15":"#f0efeb"}}
|
{"special":{"background":"#2d3144","foreground":"#96915d","cursor":"#cfccbe"},"colors":{"color0":"#2d3144","color1":"#8d6d5c","color2":"#6d806d","color3":"#96915d","color4":"#68758d","color5":"#8a747b","color6":"#8d97a8","color7":"#cfccbe","color8":"#525a69","color9":"#8d6d5c","color10":"#6d806d","color11":"#96915d","color12":"#68758d","color13":"#8a747b","color14":"#8d97a8","color15":"#f0efeb"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#27201f","foreground":"#978341","cursor":"#bebcbc"},"colors":{"color0":"#27201f","color1":"#9b5208","color2":"#75922c","color3":"#978341","color4":"#5e6676","color5":"#824219","color6":"#4e7479","color7":"#bebcbc","color7":"#bebcbc","color8":"#3b3436","color9":"#9b5208","color10":"#75922c","color11":"#978341","color12":"#5e6676","color13":"#824219","color14":"#4e7479","color15":"#bebcbc","color15":"#bebcbc"}}
|
{"special":{"background":"#27201f","foreground":"#978341","cursor":"#bebcbc"},"colors":{"color0":"#27201f","color1":"#9b5208","color2":"#75922c","color3":"#978341","color4":"#5e6676","color5":"#824219","color6":"#4e7479","color7":"#bebcbc","color8":"#3b3436","color9":"#9b5208","color10":"#75922c","color11":"#978341","color12":"#5e6676","color13":"#824219","color14":"#4e7479","color15":"#bebcbc"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2c373d","foreground":"#baad8a","cursor":"#c4c0bb"},"colors":{"color0":"#2c373d","color1":"#a67979","color2":"#809f7b","color3":"#baad8a","color4":"#6d7575","color5":"#8e7d79","color6":"#7b9899","color7":"#c4c0bb","color7":"#c4c0bb","color8":"#4d5459","color9":"#a67979","color10":"#809f7b","color11":"#baad8a","color12":"#6d7575","color13":"#8e7d79","color14":"#7b9899","color15":"#c4c0bb","color15":"#c4c0bb"}}
|
{"special":{"background":"#2c373d","foreground":"#baad8a","cursor":"#c4c0bb"},"colors":{"color0":"#2c373d","color1":"#a67979","color2":"#809f7b","color3":"#baad8a","color4":"#6d7575","color5":"#8e7d79","color6":"#7b9899","color7":"#c4c0bb","color8":"#4d5459","color9":"#a67979","color10":"#809f7b","color11":"#baad8a","color12":"#6d7575","color13":"#8e7d79","color14":"#7b9899","color15":"#c4c0bb"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2c2c35","foreground":"#6b925a","cursor":"#2d2d36"},"colors":{"color0":"#2c2c35","color1":"#b56550","color2":"#b79b58","color3":"#6b925a","color4":"#6e747b","color5":"#96787d","color6":"#7b8889","color7":"#b4ada4","color7":"#b4ada4","color8":"#45454d","color9":"#b56550","color10":"#b79b58","color11":"#6b925a","color12":"#6e747b","color13":"#96787d","color14":"#7b8889","color15":"#b4ada4","color15":"#b4ada4"}}
|
{"special":{"background":"#2c2c35","foreground":"#6b925a","cursor":"#2d2d36"},"colors":{"color0":"#2c2c35","color1":"#b56550","color2":"#b79b58","color3":"#6b925a","color4":"#6e747b","color5":"#96787d","color6":"#7b8889","color7":"#b4ada4","color8":"#45454d","color9":"#b56550","color10":"#b79b58","color11":"#6b925a","color12":"#6e747b","color13":"#96787d","color14":"#7b8889","color15":"#b4ada4"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2b2320","foreground":"#aa9375","cursor":"#2e2522"},"colors":{"color0":"#2b2320","color1":"#734948","color2":"#768157","color3":"#aa9375","color4":"#585b63","color5":"#6f5a56","color6":"#7d8486","color7":"#bab1a1","color7":"#bab1a1","color8":"#bab1a1","color9":"#734948","color10":"#768157","color11":"#aa9375","color12":"#585b63","color13":"#6f5a56","color14":"#7d8486","color15":"#bab1a1","color15":"#bab1a1"}}
|
{"special":{"background":"#2b2320","foreground":"#aa9375","cursor":"#2e2522"},"colors":{"color0":"#2b2320","color1":"#734948","color2":"#768157","color3":"#aa9375","color4":"#585b63","color5":"#6f5a56","color6":"#7d8486","color7":"#bab1a1","color8":"#bab1a1","color9":"#734948","color10":"#768157","color11":"#aa9375","color12":"#585b63","color13":"#6f5a56","color14":"#7d8486","color15":"#bab1a1"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#25231b","foreground":"#988871","cursor":"#26241c"},"colors":{"color0":"#25231b","color1":"#8e2f34","color2":"#55654a","color3":"#988871","color4":"#848f89","color5":"#9f8c7c","color6":"#9cb4a6","color7":"#c4c1b0","color7":"#c4c1b0","color8":"#423f31","color9":"#8e2f34","color10":"#55654a","color11":"#988871","color12":"#848f89","color13":"#9f8c7c","color14":"#9cb4a6","color15":"#c4c1b0","color15":"#d8d4c5"}}
|
{"special":{"background":"#25231b","foreground":"#988871","cursor":"#26241c"},"colors":{"color0":"#25231b","color1":"#8e2f34","color2":"#55654a","color3":"#988871","color4":"#848f89","color5":"#9f8c7c","color6":"#9cb4a6","color7":"#c4c1b0","color8":"#423f31","color9":"#8e2f34","color10":"#55654a","color11":"#988871","color12":"#848f89","color13":"#9f8c7c","color14":"#9cb4a6","color15":"#d8d4c5"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#272c30","foreground":"#c79e84","cursor":"#cfb9a8"},"colors":{"color0":"#272c30","color1":"#934e46","color2":"#637268","color3":"#c79e84","color4":"#515e67","color5":"#715f5e","color6":"#5c6f7d","color7":"#cfb9a8","color7":"#cfb9a8","color8":"#414a51","color9":"#934e46","color10":"#637268","color11":"#c79e84","color12":"#515e67","color13":"#715f5e","color14":"#5c6f7d","color15":"#cfb9a8","color15":"#ddcec2"}}
|
{"special":{"background":"#272c30","foreground":"#c79e84","cursor":"#cfb9a8"},"colors":{"color0":"#272c30","color1":"#934e46","color2":"#637268","color3":"#c79e84","color4":"#515e67","color5":"#715f5e","color6":"#5c6f7d","color7":"#cfb9a8","color8":"#414a51","color9":"#934e46","color10":"#637268","color11":"#c79e84","color12":"#515e67","color13":"#715f5e","color14":"#5c6f7d","color15":"#ddcec2"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2a2725","foreground":"#bdac8c","cursor":"#2b2927"},"colors":{"color0":"#2a2725","color1":"#8e6f64","color2":"#849385","color3":"#bdac8c","color4":"#4c5467","color5":"#757580","color6":"#64697f","color7":"#b8b2a7","color7":"#b8b2a7","color8":"#474543","color9":"#8e6f64","color10":"#849385","color11":"#bdac8c","color12":"#4c5467","color13":"#757580","color14":"#64697f","color15":"#b8b2a7","color15":"#b8b2a7"}}
|
{"special":{"background":"#2a2725","foreground":"#bdac8c","cursor":"#2b2927"},"colors":{"color0":"#2a2725","color1":"#8e6f64","color2":"#849385","color3":"#bdac8c","color4":"#4c5467","color5":"#757580","color6":"#64697f","color7":"#b8b2a7","color8":"#474543","color9":"#8e6f64","color10":"#849385","color11":"#bdac8c","color12":"#4c5467","color13":"#757580","color14":"#64697f","color15":"#b8b2a7"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#312e39","foreground":"#ae835a","cursor":"#33303b"},"colors":{"color0":"#312e39","color1":"#87404f","color2":"#74934e","color3":"#ae835a","color4":"#615772","color5":"#783e57","color6":"#554757","color7":"#c0a79a","color7":"#c0a79a","color8":"#4f4b58","color9":"#87404f","color10":"#74934e","color11":"#ae835a","color12":"#615772","color13":"#783e57","color14":"#554757","color15":"#c0a79a","color15":"#c0a79a"}}
|
{"special":{"background":"#312e39","foreground":"#ae835a","cursor":"#33303b"},"colors":{"color0":"#312e39","color1":"#87404f","color2":"#74934e","color3":"#ae835a","color4":"#615772","color5":"#783e57","color6":"#554757","color7":"#c0a79a","color8":"#4f4b58","color9":"#87404f","color10":"#74934e","color11":"#ae835a","color12":"#615772","color13":"#783e57","color14":"#554757","color15":"#c0a79a"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2b2c33","foreground":"#e8dfcd","cursor":"#303139"},"colors":{"color0":"#2b2c33","color1":"#b16c7f","color2":"#92ab75","color3":"#bdab77","color4":"#485476","color5":"#746081","color6":"#636f7d","color7":"#d9c1a9","color7":"#d9c1a9","color8":"#d9c1a9","color9":"#b16c7f","color10":"#92ab75","color11":"#bdab77","color12":"#485476","color13":"#746081","color14":"#636f7d","color15":"#d9c1a9","color15":"#e9dbce"}}
|
{"special":{"background":"#2b2c33","foreground":"#e8dfcd","cursor":"#303139"},"colors":{"color0":"#2b2c33","color1":"#b16c7f","color2":"#92ab75","color3":"#bdab77","color4":"#485476","color5":"#746081","color6":"#636f7d","color7":"#d9c1a9","color8":"#d9c1a9","color9":"#b16c7f","color10":"#92ab75","color11":"#bdab77","color12":"#485476","color13":"#746081","color14":"#636f7d","color15":"#e9dbce"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2d2d33","foreground":"#a29474","cursor":"#303036"},"colors":{"color0":"#2d2d33","color1":"#9c6647","color2":"#708684","color3":"#a29474","color4":"#697284","color5":"#796a70","color6":"#47676e","color7":"#c4c4b5","color7":"#c4c4b5","color8":"#44444a","color9":"#9c6647","color10":"#708684","color11":"#a29474","color12":"#697284","color13":"#796a70","color14":"#47676e","color15":"#c4c4b5","color15":"#c4c4b5"}}
|
{"special":{"background":"#2d2d33","foreground":"#a29474","cursor":"#303036"},"colors":{"color0":"#2d2d33","color1":"#9c6647","color2":"#708684","color3":"#a29474","color4":"#697284","color5":"#796a70","color6":"#47676e","color7":"#c4c4b5","color8":"#44444a","color9":"#9c6647","color10":"#708684","color11":"#a29474","color12":"#697284","color13":"#796a70","color14":"#47676e","color15":"#c4c4b5"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#2a2d34","foreground":"#86733b","cursor":"#2e3239"},"colors":{"color0":"#2a2d34","color1":"#a2462e","color2":"#5e713d","color3":"#86733b","color4":"#394c5d","color5":"#855646","color6":"#6e727d","color7":"#cababa","color7":"#cababa","color8":"#414550","color9":"#a2462e","color10":"#5e713d","color11":"#86733b","color12":"#394c5d","color13":"#855646","color14":"#6e727d","color15":"#cababa","color15":"#cababa"}}
|
{"special":{"background":"#2a2d34","foreground":"#86733b","cursor":"#2e3239"},"colors":{"color0":"#2a2d34","color1":"#a2462e","color2":"#5e713d","color3":"#86733b","color4":"#394c5d","color5":"#855646","color6":"#6e727d","color7":"#cababa","color8":"#414550","color9":"#a2462e","color10":"#5e713d","color11":"#86733b","color12":"#394c5d","color13":"#855646","color14":"#6e727d","color15":"#cababa"}}
|
@ -1 +1 @@
|
|||||||
{"special":{"background":"#37273a","foreground":"#b3a67d","cursor":"#c3bec3"},"colors":{"color0":"#37273a","color1":"#9c595c","color2":"#8ba07a","color3":"#b3a67d","color4":"#7B6677","color5":"#83466D","color6":"#899079","color7":"#c3bec3","color7":"#c3bec3","color8":"#5e5261","color9":"#9c595c","color10":"#8ba07a","color11":"#b3a67d","color12":"#7B6677","color13":"#83466D","color14":"#899079","color15":"#c3bec3","color15":"#c3bec3"}}
|
{"special":{"background":"#37273a","foreground":"#b3a67d","cursor":"#c3bec3"},"colors":{"color0":"#37273a","color1":"#9c595c","color2":"#8ba07a","color3":"#b3a67d","color4":"#7B6677","color5":"#83466D","color6":"#899079","color7":"#c3bec3","color8":"#5e5261","color9":"#9c595c","color10":"#8ba07a","color11":"#b3a67d","color12":"#7B6677","color13":"#83466D","color14":"#899079","color15":"#c3bec3"}}
|
@ -3,17 +3,60 @@ Export colors in various formats.
|
|||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
from .settings import CACHE_DIR, MODULE_DIR, CONF_DIR
|
|
||||||
from . import util
|
from . import util
|
||||||
|
from .settings import CACHE_DIR, CONF_DIR, MODULE_DIR
|
||||||
|
|
||||||
|
|
||||||
def template(colors, input_file, output_file=None):
|
def template(colors, input_file, output_file=None):
|
||||||
"""Read template file, substitute markers and
|
"""Read template file, substitute markers and
|
||||||
save the file elsewhere."""
|
save the file elsewhere."""
|
||||||
template_data = util.read_file_raw(input_file)
|
template_data = util.read_file_raw(input_file)
|
||||||
template_data = "".join(template_data).format(**colors)
|
for i, l in enumerate(template_data):
|
||||||
|
for match in re.finditer(r"(?<=(?<!\{))(\{([^{}]+)\})(?=(?!\}))", l):
|
||||||
|
# Get the color, and the functions associated with it
|
||||||
|
cname, _, funcs = match.group(2).partition(".")
|
||||||
|
# Check that functions are needed for this color
|
||||||
|
if len(funcs) == 0:
|
||||||
|
continue
|
||||||
|
# Build up a string which will be replaced with the new color
|
||||||
|
replace_str = cname
|
||||||
|
# Color to be modified copied into new one
|
||||||
|
new_color = util.Color(colors[cname].hex_color)
|
||||||
|
# Execute each function to be done
|
||||||
|
for func in filter(None, funcs.split(")")):
|
||||||
|
# Get function name and arguments
|
||||||
|
func = func.split("(")
|
||||||
|
fname = func[0]
|
||||||
|
if fname[0] == '.':
|
||||||
|
fname = fname[1:]
|
||||||
|
if not hasattr(new_color, fname):
|
||||||
|
logging.error(
|
||||||
|
"Syntax error in template file '%s' on line '%s'",
|
||||||
|
input_file, i)
|
||||||
|
function = getattr(new_color, fname)
|
||||||
|
|
||||||
|
# If the function is callable, call it
|
||||||
|
if callable(function):
|
||||||
|
if len(func) > 1:
|
||||||
|
new_color = function(*func[1].split(","))
|
||||||
|
else:
|
||||||
|
new_color = function()
|
||||||
|
# string to replace generated colors
|
||||||
|
if func[0] != '.':
|
||||||
|
replace_str += "."
|
||||||
|
replace_str += "(".join(func) + ")"
|
||||||
|
# If the color was changed, replace with a unique identifier.
|
||||||
|
if new_color is not colors[cname]:
|
||||||
|
template_data[i] = l.replace(
|
||||||
|
replace_str, "color" + new_color.strip)
|
||||||
|
colors["color" + new_color.strip] = new_color
|
||||||
|
try:
|
||||||
|
template_data = "".join(template_data).format(**colors)
|
||||||
|
except ValueError:
|
||||||
|
logging.error("Syntax error in template file '%s'.", input_file)
|
||||||
|
return
|
||||||
util.save_file(template_data, output_file)
|
util.save_file(template_data, output_file)
|
||||||
|
|
||||||
|
|
||||||
@ -31,21 +74,26 @@ def get_export_type(export_type):
|
|||||||
"""Convert template type to the right filename."""
|
"""Convert template type to the right filename."""
|
||||||
return {
|
return {
|
||||||
"css": "colors.css",
|
"css": "colors.css",
|
||||||
|
"dmenu": "colors-wal-dmenu.h",
|
||||||
"dwm": "colors-wal-dwm.h",
|
"dwm": "colors-wal-dwm.h",
|
||||||
"st": "colors-wal-st.h",
|
"st": "colors-wal-st.h",
|
||||||
"tabbed": "colors-wal-tabbed.h",
|
"tabbed": "colors-wal-tabbed.h",
|
||||||
"gtk2": "colors-gtk2.rc",
|
"gtk2": "colors-gtk2.rc",
|
||||||
"json": "colors.json",
|
"json": "colors.json",
|
||||||
"konsole": "colors-konsole.colorscheme",
|
"konsole": "colors-konsole.colorscheme",
|
||||||
|
"kitty": "colors-kitty.conf",
|
||||||
"plain": "colors",
|
"plain": "colors",
|
||||||
"putty": "colors-putty.reg",
|
"putty": "colors-putty.reg",
|
||||||
"rofi": "colors-rofi.Xresources",
|
"rofi": "colors-rofi.Xresources",
|
||||||
"scss": "colors.scss",
|
"scss": "colors.scss",
|
||||||
"shell": "colors.sh",
|
"shell": "colors.sh",
|
||||||
|
"speedcrunch": "colors-speedcrunch.json",
|
||||||
"sway": "colors-sway",
|
"sway": "colors-sway",
|
||||||
"tty": "colors-tty.sh",
|
"tty": "colors-tty.sh",
|
||||||
"vscode": "colors-vscode.json",
|
"vscode": "colors-vscode.json",
|
||||||
|
"waybar": "colors-waybar.css",
|
||||||
"xresources": "colors.Xresources",
|
"xresources": "colors.Xresources",
|
||||||
|
"xmonad": "colors.hs",
|
||||||
"yaml": "colors.yml",
|
"yaml": "colors.yml",
|
||||||
}.get(export_type, export_type)
|
}.get(export_type, export_type)
|
||||||
|
|
||||||
@ -60,7 +108,7 @@ def every(colors, output_dir=CACHE_DIR):
|
|||||||
join = os.path.join # Minor optimization.
|
join = os.path.join # Minor optimization.
|
||||||
for file in [*os.scandir(template_dir),
|
for file in [*os.scandir(template_dir),
|
||||||
*os.scandir(template_dir_user)]:
|
*os.scandir(template_dir_user)]:
|
||||||
if file.name != ".DS_Store":
|
if file.name != ".DS_Store" and not file.name.endswith(".swp"):
|
||||||
template(colors, file.path, join(output_dir, file.name))
|
template(colors, file.path, join(output_dir, file.name))
|
||||||
|
|
||||||
logging.info("Exported all files.")
|
logging.info("Exported all files.")
|
||||||
|
@ -12,6 +12,24 @@ from . import util
|
|||||||
from . import wallpaper
|
from . import wallpaper
|
||||||
|
|
||||||
|
|
||||||
|
def get_image_dir_recursive(img_dir):
|
||||||
|
"""Get all images in a directory recursively."""
|
||||||
|
current_wall = wallpaper.get()
|
||||||
|
current_wall = os.path.basename(current_wall)
|
||||||
|
|
||||||
|
file_types = (".png", ".jpg", ".jpeg", ".jpe", ".gif")
|
||||||
|
|
||||||
|
images = []
|
||||||
|
for path, _, files in os.walk(img_dir):
|
||||||
|
for name in files:
|
||||||
|
if name.lower().endswith(file_types):
|
||||||
|
if name.endswith(current_wall):
|
||||||
|
current_wall = os.path.join(path, name)
|
||||||
|
images.append(os.path.join(path, name))
|
||||||
|
|
||||||
|
return images, current_wall
|
||||||
|
|
||||||
|
|
||||||
def get_image_dir(img_dir):
|
def get_image_dir(img_dir):
|
||||||
"""Get all images in a directory."""
|
"""Get all images in a directory."""
|
||||||
current_wall = wallpaper.get()
|
current_wall = wallpaper.get()
|
||||||
@ -23,9 +41,12 @@ def get_image_dir(img_dir):
|
|||||||
if img.name.lower().endswith(file_types)], current_wall
|
if img.name.lower().endswith(file_types)], current_wall
|
||||||
|
|
||||||
|
|
||||||
def get_random_image(img_dir):
|
def get_random_image(img_dir, recursive):
|
||||||
"""Pick a random image file from a directory."""
|
"""Pick a random image file from a directory."""
|
||||||
images, current_wall = get_image_dir(img_dir)
|
if recursive:
|
||||||
|
images, current_wall = get_image_dir_recursive(img_dir)
|
||||||
|
else:
|
||||||
|
images, current_wall = get_image_dir(img_dir)
|
||||||
|
|
||||||
if len(images) > 2 and current_wall in images:
|
if len(images) > 2 and current_wall in images:
|
||||||
images.remove(current_wall)
|
images.remove(current_wall)
|
||||||
@ -35,12 +56,16 @@ def get_random_image(img_dir):
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
random.shuffle(images)
|
random.shuffle(images)
|
||||||
return os.path.join(img_dir, images[0])
|
return os.path.join(img_dir if not recursive else "", images[0])
|
||||||
|
|
||||||
|
|
||||||
def get_next_image(img_dir):
|
def get_next_image(img_dir, recursive):
|
||||||
"""Get the next image in a dir."""
|
"""Get the next image in a dir."""
|
||||||
images, current_wall = get_image_dir(img_dir)
|
if recursive:
|
||||||
|
images, current_wall = get_image_dir_recursive(img_dir)
|
||||||
|
else:
|
||||||
|
images, current_wall = get_image_dir(img_dir)
|
||||||
|
|
||||||
images.sort(key=lambda img: [int(x) if x.isdigit() else x
|
images.sort(key=lambda img: [int(x) if x.isdigit() else x
|
||||||
for x in re.split('([0-9]+)', img)])
|
for x in re.split('([0-9]+)', img)])
|
||||||
|
|
||||||
@ -56,20 +81,20 @@ def get_next_image(img_dir):
|
|||||||
except IndexError:
|
except IndexError:
|
||||||
image = images[0]
|
image = images[0]
|
||||||
|
|
||||||
return os.path.join(img_dir, image)
|
return os.path.join(img_dir if not recursive else "", image)
|
||||||
|
|
||||||
|
|
||||||
def get(img, cache_dir=CACHE_DIR, iterative=False):
|
def get(img, cache_dir=CACHE_DIR, iterative=False, recursive=False):
|
||||||
"""Validate image input."""
|
"""Validate image input."""
|
||||||
if os.path.isfile(img):
|
if os.path.isfile(img):
|
||||||
wal_img = img
|
wal_img = img
|
||||||
|
|
||||||
elif os.path.isdir(img):
|
elif os.path.isdir(img):
|
||||||
if iterative:
|
if iterative:
|
||||||
wal_img = get_next_image(img)
|
wal_img = get_next_image(img, recursive)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
wal_img = get_random_image(img)
|
wal_img = get_random_image(img, recursive)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
logging.error("No valid image file found.")
|
logging.error("No valid image file found.")
|
||||||
|
@ -26,24 +26,7 @@ def xrdb(xrdb_files=None):
|
|||||||
|
|
||||||
if shutil.which("xrdb") and OS != "Darwin":
|
if shutil.which("xrdb") and OS != "Darwin":
|
||||||
for file in xrdb_files:
|
for file in xrdb_files:
|
||||||
subprocess.run(["xrdb", "-merge", "-quiet", file])
|
subprocess.Popen(["xrdb", "-merge", "-quiet", file])
|
||||||
|
|
||||||
|
|
||||||
def oomox(gen_theme):
|
|
||||||
"""Call oomox to generate a theme."""
|
|
||||||
if gen_theme:
|
|
||||||
if not shutil.which("oomox-cli"):
|
|
||||||
logging.warning("Oomox not found, skipping.")
|
|
||||||
return
|
|
||||||
|
|
||||||
oomox_file = os.path.join(CACHE_DIR, "colors-oomox")
|
|
||||||
|
|
||||||
logging.info("Waiting for Oomox.")
|
|
||||||
subprocess.run(["oomox-cli", "-o", "wal", oomox_file],
|
|
||||||
stdout=subprocess.DEVNULL)
|
|
||||||
|
|
||||||
else:
|
|
||||||
logging.info("Use -g to generate an oomox theme.")
|
|
||||||
|
|
||||||
|
|
||||||
def gtk():
|
def gtk():
|
||||||
@ -61,19 +44,36 @@ def gtk():
|
|||||||
|
|
||||||
def i3():
|
def i3():
|
||||||
"""Reload i3 colors."""
|
"""Reload i3 colors."""
|
||||||
if shutil.which("i3-msg"):
|
if shutil.which("i3-msg") and util.get_pid("i3"):
|
||||||
util.disown(["i3-msg", "reload"])
|
util.disown(["i3-msg", "reload"])
|
||||||
|
|
||||||
|
|
||||||
|
def bspwm():
|
||||||
|
"""Reload bspwm colors."""
|
||||||
|
if shutil.which("bspc") and util.get_pid("bspwm"):
|
||||||
|
util.disown(["bspc", "wm", "-r"])
|
||||||
|
|
||||||
|
|
||||||
|
def kitty():
|
||||||
|
""" Reload kitty colors. """
|
||||||
|
if (shutil.which("kitty")
|
||||||
|
and util.get_pid("kitty")
|
||||||
|
and os.getenv('TERM') == 'xterm-kitty'):
|
||||||
|
subprocess.call([
|
||||||
|
"kitty", "@", "set-colors", "--all",
|
||||||
|
os.path.join(CACHE_DIR, "colors-kitty.conf")
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
def polybar():
|
def polybar():
|
||||||
"""Reload polybar colors."""
|
"""Reload polybar colors."""
|
||||||
if shutil.which("polybar"):
|
if shutil.which("polybar") and util.get_pid("polybar"):
|
||||||
util.disown(["pkill", "-USR1", "polybar"])
|
util.disown(["pkill", "-USR1", "polybar"])
|
||||||
|
|
||||||
|
|
||||||
def sway():
|
def sway():
|
||||||
"""Reload sway colors."""
|
"""Reload sway colors."""
|
||||||
if shutil.which("swaymsg"):
|
if shutil.which("swaymsg") and util.get_pid("sway"):
|
||||||
util.disown(["swaymsg", "reload"])
|
util.disown(["swaymsg", "reload"])
|
||||||
|
|
||||||
|
|
||||||
@ -92,6 +92,8 @@ def env(xrdb_file=None, tty_reload=True):
|
|||||||
"""Reload environment."""
|
"""Reload environment."""
|
||||||
xrdb(xrdb_file)
|
xrdb(xrdb_file)
|
||||||
i3()
|
i3()
|
||||||
|
bspwm()
|
||||||
|
kitty()
|
||||||
sway()
|
sway()
|
||||||
polybar()
|
polybar()
|
||||||
logging.info("Reloaded environment.")
|
logging.info("Reloaded environment.")
|
||||||
|
@ -11,7 +11,7 @@ from . import util
|
|||||||
|
|
||||||
def set_special(index, color, iterm_name="h", alpha=100):
|
def set_special(index, color, iterm_name="h", alpha=100):
|
||||||
"""Convert a hex color to a special sequence."""
|
"""Convert a hex color to a special sequence."""
|
||||||
if OS == "Darwin":
|
if OS == "Darwin" and iterm_name:
|
||||||
return "\033]P%s%s\033\\" % (iterm_name, color.strip("#"))
|
return "\033]P%s%s\033\\" % (iterm_name, color.strip("#"))
|
||||||
|
|
||||||
if index in [11, 708] and alpha != "100":
|
if index in [11, 708] and alpha != "100":
|
||||||
@ -22,22 +22,20 @@ def set_special(index, color, iterm_name="h", alpha=100):
|
|||||||
|
|
||||||
def set_color(index, color):
|
def set_color(index, color):
|
||||||
"""Convert a hex color to a text color sequence."""
|
"""Convert a hex color to a text color sequence."""
|
||||||
if OS == "Darwin":
|
if OS == "Darwin" and index < 20:
|
||||||
return "\033]P%x%s\033\\" % (index, color.strip("#"))
|
return "\033]P%1x%s\033\\" % (index, color.strip("#"))
|
||||||
|
|
||||||
return "\033]4;%s;%s\033\\" % (index, color)
|
return "\033]4;%s;%s\033\\" % (index, color)
|
||||||
|
|
||||||
|
|
||||||
def set_iterm_tab_color(color):
|
def set_iterm_tab_color(color):
|
||||||
"""Set iTerm2 tab/window color"""
|
"""Set iTerm2 tab/window color"""
|
||||||
return """
|
return ("\033]6;1;bg;red;brightness;%s\a"
|
||||||
\033]6;1;bg;red;brightness;%s\a
|
"\033]6;1;bg;green;brightness;%s\a"
|
||||||
\033]6;1;bg;green;brightness;%s\a
|
"\033]6;1;bg;blue;brightness;%s\a") % (*util.hex_to_rgb(color),)
|
||||||
\033]6;1;bg;blue;brightness;%s\a
|
|
||||||
""" % (*util.hex_to_rgb(color),)
|
|
||||||
|
|
||||||
|
|
||||||
def create_sequences(colors):
|
def create_sequences(colors, vte_fix=False):
|
||||||
"""Create the escape sequences."""
|
"""Create the escape sequences."""
|
||||||
alpha = colors["alpha"]
|
alpha = colors["alpha"]
|
||||||
|
|
||||||
@ -48,30 +46,22 @@ def create_sequences(colors):
|
|||||||
# Special colors.
|
# Special colors.
|
||||||
# Source: https://goo.gl/KcoQgP
|
# Source: https://goo.gl/KcoQgP
|
||||||
# 10 = foreground, 11 = background, 12 = cursor foregound
|
# 10 = foreground, 11 = background, 12 = cursor foregound
|
||||||
# 13 = mouse foreground
|
# 13 = mouse foreground, 708 = background border color.
|
||||||
sequences.extend([
|
sequences.extend([
|
||||||
set_special(10, colors["special"]["foreground"], "g"),
|
set_special(10, colors["special"]["foreground"], "g"),
|
||||||
set_special(11, colors["special"]["background"], "h", alpha),
|
set_special(11, colors["special"]["background"], "h", alpha),
|
||||||
set_special(12, colors["special"]["cursor"], "l"),
|
set_special(12, colors["special"]["cursor"], "l"),
|
||||||
set_special(13, colors["special"]["foreground"], "l"),
|
set_special(13, colors["special"]["foreground"], "j"),
|
||||||
set_special(17, colors["special"]["foreground"], "l"),
|
set_special(17, colors["special"]["foreground"], "k"),
|
||||||
set_special(19, colors["special"]["background"], "l"),
|
set_special(19, colors["special"]["background"], "m"),
|
||||||
set_color(232, colors["special"]["background"])
|
set_color(232, colors["special"]["background"]),
|
||||||
|
set_color(256, colors["special"]["foreground"])
|
||||||
])
|
])
|
||||||
|
|
||||||
# This escape sequence doesn't work in VTE terminals and their parsing of
|
if not vte_fix:
|
||||||
# unknown sequences is garbage so we need to use some escape sequence
|
sequences.extend(
|
||||||
# M A G I C to hide the output.
|
set_special(708, colors["special"]["background"], "", alpha)
|
||||||
# \033[s # Save cursor position.
|
)
|
||||||
# \033[1000H # Move the cursor off screen.
|
|
||||||
# \033[8m # Conceal text.
|
|
||||||
# \033]708;#000000\033\\ # Garbage sequence.
|
|
||||||
# \033[u # Restore cursor position.
|
|
||||||
sequences.extend([
|
|
||||||
"\033[s\033[1000H\033[8m%s\033[u" %
|
|
||||||
set_special(708, colors["special"]["background"], "h", alpha),
|
|
||||||
set_special(13, colors["special"]["cursor"], "l")
|
|
||||||
])
|
|
||||||
|
|
||||||
if OS == "Darwin":
|
if OS == "Darwin":
|
||||||
sequences += set_iterm_tab_color(colors["special"]["background"])
|
sequences += set_iterm_tab_color(colors["special"]["background"])
|
||||||
@ -79,7 +69,7 @@ def create_sequences(colors):
|
|||||||
return "".join(sequences)
|
return "".join(sequences)
|
||||||
|
|
||||||
|
|
||||||
def send(colors, cache_dir=CACHE_DIR, to_send=True):
|
def send(colors, cache_dir=CACHE_DIR, to_send=True, vte_fix=False):
|
||||||
"""Send colors to all open terminals."""
|
"""Send colors to all open terminals."""
|
||||||
if OS == "Darwin":
|
if OS == "Darwin":
|
||||||
tty_pattern = "/dev/ttys00[0-9]*"
|
tty_pattern = "/dev/ttys00[0-9]*"
|
||||||
@ -87,7 +77,7 @@ def send(colors, cache_dir=CACHE_DIR, to_send=True):
|
|||||||
else:
|
else:
|
||||||
tty_pattern = "/dev/pts/[0-9]*"
|
tty_pattern = "/dev/pts/[0-9]*"
|
||||||
|
|
||||||
sequences = create_sequences(colors)
|
sequences = create_sequences(colors, vte_fix)
|
||||||
|
|
||||||
# Writing to "/dev/pts/[0-9] lets you send data to open terminals.
|
# Writing to "/dev/pts/[0-9] lets you send data to open terminals.
|
||||||
if to_send:
|
if to_send:
|
||||||
|
@ -13,12 +13,16 @@ import os
|
|||||||
import platform
|
import platform
|
||||||
|
|
||||||
|
|
||||||
__version__ = "3.0.1"
|
__version__ = "3.3.0"
|
||||||
__cache_version__ = "1.1.0"
|
__cache_version__ = "1.1.0"
|
||||||
|
|
||||||
|
|
||||||
HOME = os.getenv("HOME", os.getenv("USERPROFILE"))
|
HOME = os.getenv("HOME", os.getenv("USERPROFILE"))
|
||||||
CACHE_DIR = os.path.join(HOME, ".cache", "wal")
|
XDG_CACHE_DIR = os.getenv("XDG_CACHE_HOME", os.path.join(HOME, ".cache"))
|
||||||
|
XDG_CONF_DIR = os.getenv("XDG_CONFIG_HOME", os.path.join(HOME, ".config"))
|
||||||
|
|
||||||
|
CACHE_DIR = os.getenv("PYWAL_CACHE_DIR", os.path.join(XDG_CACHE_DIR, "wal"))
|
||||||
|
CONF_DIR = os.path.join(XDG_CONF_DIR, "wal")
|
||||||
MODULE_DIR = os.path.dirname(__file__)
|
MODULE_DIR = os.path.dirname(__file__)
|
||||||
CONF_DIR = os.path.join(HOME, ".config", "wal")
|
|
||||||
OS = platform.uname()[0]
|
OS = platform.uname()[0]
|
||||||
|
29
pywal/templates/colors-kitty.conf
Normal file
29
pywal/templates/colors-kitty.conf
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
foreground {foreground}
|
||||||
|
background {background}
|
||||||
|
cursor {cursor}
|
||||||
|
|
||||||
|
active_tab_foreground {background}
|
||||||
|
active_tab_background {foreground}
|
||||||
|
inactive_tab_foreground {foreground}
|
||||||
|
inactive_tab_background {background}
|
||||||
|
|
||||||
|
active_border_color {foreground}
|
||||||
|
inactive_border_color {background}
|
||||||
|
bell_border_color {color1}
|
||||||
|
|
||||||
|
color0 {color0}
|
||||||
|
color8 {color8}
|
||||||
|
color1 {color1}
|
||||||
|
color9 {color9}
|
||||||
|
color2 {color2}
|
||||||
|
color10 {color10}
|
||||||
|
color3 {color3}
|
||||||
|
color11 {color11}
|
||||||
|
color4 {color4}
|
||||||
|
color12 {color12}
|
||||||
|
color5 {color5}
|
||||||
|
color13 {color13}
|
||||||
|
color6 {color6}
|
||||||
|
color14 {color14}
|
||||||
|
color7 {color7}
|
||||||
|
color15 {color15}
|
@ -1,19 +1,26 @@
|
|||||||
Windows Registry Editor Version 5.00
|
Windows Registry Editor Version 5.00
|
||||||
|
|
||||||
[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\Default%20Settings]]
|
[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\wal]
|
||||||
"colour0"="{color0.rgb}"
|
"Colour0"="{foreground.rgb}" ; Default Foreground
|
||||||
"colour1"="{color1.rgb}"
|
"Colour1"="{foreground.rgb}" ; Default Bold Foreground
|
||||||
"colour2"="{color2.rgb}"
|
"Colour2"="{background.rgb}" ; Default Background
|
||||||
"colour3"="{color3.rgb}"
|
"Colour3"="{background.rgb}" ; Default Bold Background
|
||||||
"colour4"="{color4.rgb}"
|
"Colour4"="{background.rgb}" ; Cursor Text
|
||||||
"colour5"="{color5.rgb}"
|
"Colour5"="{cursor.rgb}" ; Cursor Color
|
||||||
"colour6"="{color6.rgb}"
|
"Colour6"="{color0.rgb}" ; ANSI Black
|
||||||
"colour7"="{color7.rgb}"
|
"Colour7"="{color8.rgb}" ; ANSI Black Bold
|
||||||
"colour8"="{color8.rgb}"
|
"Colour8"="{color1.rgb}" ; ANSI Red
|
||||||
"colour9"="{color9.rgb}"
|
"Colour9"="{color9.rgb}" ; ANSI Red Bold
|
||||||
"colour10"="{color10.rgb}"
|
"Colour10"="{color2.rgb}" ; ANSI Green
|
||||||
"colour11"="{color11.rgb}"
|
"Colour11"="{color10.rgb}" ; ANSI Green Bold
|
||||||
"colour12"="{color12.rgb}"
|
"Colour12"="{color3.rgb}" ; ANSI Yellow
|
||||||
"colour13"="{color13.rgb}"
|
"Colour13"="{color11.rgb}" ; ANSI Yellow Bold
|
||||||
"colour14"="{color14.rgb}"
|
"Colour14"="{color4.rgb}" ; ANSI Blue
|
||||||
"colour15"="{color15.rgb}"
|
"Colour15"="{color12.rgb}" ; ANSI Blue Bold
|
||||||
|
"Colour16"="{color5.rgb}" ; ANSI Magenta
|
||||||
|
"Colour17"="{color13.rgb}" ; ANSI Magenta Bold
|
||||||
|
"Colour18"="{color6.rgb}" ; ANSI Cyan
|
||||||
|
"Colour19"="{color14.rgb}" ; ANSI Cyan Bold
|
||||||
|
"Colour20"="{color7.rgb}" ; ANSI White
|
||||||
|
"Colour21"="{color15.rgb}" ; ANSI White Bold
|
||||||
|
|
||||||
|
@ -48,11 +48,11 @@
|
|||||||
text-color: @foreground;
|
text-color: @foreground;
|
||||||
}}
|
}}
|
||||||
|
|
||||||
inputbar {{
|
#inputbar {{
|
||||||
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
||||||
}}
|
}}
|
||||||
|
|
||||||
textbox-prompt-colon {{
|
#textbox-prompt-colon {{
|
||||||
expand: false;
|
expand: false;
|
||||||
str: ":";
|
str: ":";
|
||||||
margin: 0px 0.3em 0em 0em;
|
margin: 0px 0.3em 0em 0em;
|
||||||
|
@ -48,11 +48,11 @@
|
|||||||
text-color: @foreground;
|
text-color: @foreground;
|
||||||
}}
|
}}
|
||||||
|
|
||||||
inputbar {{
|
#inputbar {{
|
||||||
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
||||||
}}
|
}}
|
||||||
|
|
||||||
textbox-prompt-colon {{
|
#textbox-prompt-colon {{
|
||||||
expand: false;
|
expand: false;
|
||||||
str: ":";
|
str: ":";
|
||||||
margin: 0px 0.3em 0em 0em;
|
margin: 0px 0.3em 0em 0em;
|
||||||
|
15
pywal/templates/colors-speedcrunch.json
Normal file
15
pywal/templates/colors-speedcrunch.json
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{{
|
||||||
|
"cursor": "{cursor}",
|
||||||
|
"number": "{foreground}",
|
||||||
|
"parens": "{color13}",
|
||||||
|
"result": "{color12}",
|
||||||
|
"comment": "{color8}",
|
||||||
|
"matched": "{color4}",
|
||||||
|
"function": "{color1}",
|
||||||
|
"operator": "{color3}",
|
||||||
|
"variable": "{color2}",
|
||||||
|
"scrollbar": "{color3}",
|
||||||
|
"separator": "{color3}",
|
||||||
|
"background": "{background}",
|
||||||
|
"editorbackground": "{background}"
|
||||||
|
}}
|
6
pywal/templates/colors-wal-dmenu.h
Normal file
6
pywal/templates/colors-wal-dmenu.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
static const char *colors[SchemeLast][2] = {{
|
||||||
|
/* fg bg */
|
||||||
|
[SchemeNorm] = {{ "{color15}", "{color0}" }},
|
||||||
|
[SchemeSel] = {{ "{color15}", "{color1}" }},
|
||||||
|
[SchemeOut] = {{ "{color15}", "{color14}" }},
|
||||||
|
}};
|
23
pywal/templates/colors-wal.vim
Normal file
23
pywal/templates/colors-wal.vim
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
" Special
|
||||||
|
let wallpaper = "{wallpaper}"
|
||||||
|
let background = "{background}"
|
||||||
|
let foreground = "{foreground}"
|
||||||
|
let cursor = "{cursor}"
|
||||||
|
|
||||||
|
" Colors
|
||||||
|
let color0 = "{color0}"
|
||||||
|
let color1 = "{color1}"
|
||||||
|
let color2 = "{color2}"
|
||||||
|
let color3 = "{color3}"
|
||||||
|
let color4 = "{color4}"
|
||||||
|
let color5 = "{color5}"
|
||||||
|
let color6 = "{color6}"
|
||||||
|
let color7 = "{color7}"
|
||||||
|
let color8 = "{color8}"
|
||||||
|
let color9 = "{color9}"
|
||||||
|
let color10 = "{color10}"
|
||||||
|
let color11 = "{color11}"
|
||||||
|
let color12 = "{color12}"
|
||||||
|
let color13 = "{color13}"
|
||||||
|
let color14 = "{color14}"
|
||||||
|
let color15 = "{color15}"
|
20
pywal/templates/colors-waybar.css
Normal file
20
pywal/templates/colors-waybar.css
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
@define-color foreground {foreground};
|
||||||
|
@define-color background {background};
|
||||||
|
@define-color cursor {cursor};
|
||||||
|
|
||||||
|
@define-color color0 {color0};
|
||||||
|
@define-color color1 {color1};
|
||||||
|
@define-color color2 {color2};
|
||||||
|
@define-color color3 {color3};
|
||||||
|
@define-color color4 {color4};
|
||||||
|
@define-color color5 {color5};
|
||||||
|
@define-color color6 {color6};
|
||||||
|
@define-color color7 {color7};
|
||||||
|
@define-color color8 {color8};
|
||||||
|
@define-color color9 {color9};
|
||||||
|
@define-color color10 {color10};
|
||||||
|
@define-color color11 {color11};
|
||||||
|
@define-color color12 {color12};
|
||||||
|
@define-color color13 {color13};
|
||||||
|
@define-color color14 {color14};
|
||||||
|
@define-color color15 {color15};
|
37
pywal/templates/colors.hs
Normal file
37
pywal/templates/colors.hs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
--Place this file in your .xmonad/lib directory and import module Colors into .xmonad/xmonad.hs config
|
||||||
|
--The easy way is to create a soft link from this file to the file in .xmonad/lib using ln -s
|
||||||
|
--Then recompile and restart xmonad.
|
||||||
|
|
||||||
|
module Colors
|
||||||
|
( wallpaper
|
||||||
|
, background, foreground, cursor
|
||||||
|
, color0, color1, color2, color3, color4, color5, color6, color7
|
||||||
|
, color8, color9, color10, color11, color12, color13, color14, color15
|
||||||
|
) where
|
||||||
|
|
||||||
|
-- Shell variables
|
||||||
|
-- Generated by 'wal'
|
||||||
|
wallpaper="{wallpaper}"
|
||||||
|
|
||||||
|
-- Special
|
||||||
|
background="{background}"
|
||||||
|
foreground="{foreground}"
|
||||||
|
cursor="{cursor}"
|
||||||
|
|
||||||
|
-- Colors
|
||||||
|
color0="{color0}"
|
||||||
|
color1="{color1}"
|
||||||
|
color2="{color2}"
|
||||||
|
color3="{color3}"
|
||||||
|
color4="{color4}"
|
||||||
|
color5="{color5}"
|
||||||
|
color6="{color6}"
|
||||||
|
color7="{color7}"
|
||||||
|
color8="{color8}"
|
||||||
|
color9="{color9}"
|
||||||
|
color10="{color10}"
|
||||||
|
color11="{color11}"
|
||||||
|
color12="{color12}"
|
||||||
|
color13="{color13}"
|
||||||
|
color14="{color14}"
|
||||||
|
color15="{color15}"
|
@ -1,6 +1,6 @@
|
|||||||
# Shell variables
|
# Shell variables
|
||||||
# Generated by 'wal'
|
# Generated by 'wal'
|
||||||
wallpaper='{wallpaper}'
|
wallpaper="{wallpaper}"
|
||||||
|
|
||||||
# Special
|
# Special
|
||||||
background='{background}'
|
background='{background}'
|
||||||
@ -33,4 +33,4 @@ export FZF_DEFAULT_OPTS="
|
|||||||
"
|
"
|
||||||
|
|
||||||
# Fix LS_COLORS being unreadable.
|
# Fix LS_COLORS being unreadable.
|
||||||
export LS_COLORS="$LS_COLORS:su=30;41:ow=30;42:st=30;44:"
|
export LS_COLORS="${{LS_COLORS}}:su=30;41:ow=30;42:st=30;44:"
|
||||||
|
24
pywal/templates/colors.styl
Normal file
24
pywal/templates/colors.styl
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// Stylus Variables
|
||||||
|
// Generated by 'wal'
|
||||||
|
$wallpaper = "{wallpaper}"
|
||||||
|
|
||||||
|
$background = {background}
|
||||||
|
$foregroud = {foreground}
|
||||||
|
$cursor = {cursor}
|
||||||
|
|
||||||
|
$color0 = {color0}
|
||||||
|
$color1 = {color1}
|
||||||
|
$color2 = {color2}
|
||||||
|
$color3 = {color3}
|
||||||
|
$color4 = {color4}
|
||||||
|
$color5 = {color5}
|
||||||
|
$color6 = {color6}
|
||||||
|
$color7 = {color7}
|
||||||
|
$color8 = {color8}
|
||||||
|
$color9 = {color9}
|
||||||
|
$color10 = {color10}
|
||||||
|
$color11 = {color11}
|
||||||
|
$color12 = {color12}
|
||||||
|
$color13 = {color13}
|
||||||
|
$color14 = {color14}
|
||||||
|
$color15 = {color15}
|
@ -6,7 +6,7 @@ import os
|
|||||||
import random
|
import random
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from .settings import CONF_DIR, MODULE_DIR
|
from .settings import CACHE_DIR, CONF_DIR, MODULE_DIR
|
||||||
from . import util
|
from . import util
|
||||||
|
|
||||||
|
|
||||||
@ -19,20 +19,30 @@ def list_out():
|
|||||||
user_themes = [theme.name.replace(".json", "")
|
user_themes = [theme.name.replace(".json", "")
|
||||||
for theme in list_themes_user()]
|
for theme in list_themes_user()]
|
||||||
|
|
||||||
|
try:
|
||||||
|
last_used_theme = util.read_file(os.path.join(
|
||||||
|
CACHE_DIR, "last_used_theme"))[0].replace(".json", "")
|
||||||
|
except FileNotFoundError:
|
||||||
|
last_used_theme = ""
|
||||||
|
|
||||||
if user_themes:
|
if user_themes:
|
||||||
print("\033[1;32mUser Themes\033[0m:")
|
print("\033[1;32mUser Themes\033[0m:")
|
||||||
print(" -", "\n - ".join(sorted(user_themes)))
|
print(" -", "\n - ".join(t + " (last used)" if t == last_used_theme
|
||||||
|
else t for t in sorted(user_themes)))
|
||||||
|
|
||||||
print("\033[1;32mDark Themes\033[0m:")
|
print("\033[1;32mDark Themes\033[0m:")
|
||||||
print(" -", "\n - ".join(sorted(dark_themes)))
|
print(" -", "\n - ".join(t + " (last used)" if t == last_used_theme else t
|
||||||
|
for t in sorted(dark_themes)))
|
||||||
|
|
||||||
print("\033[1;32mLight Themes\033[0m:")
|
print("\033[1;32mLight Themes\033[0m:")
|
||||||
print(" -", "\n - ".join(sorted(ligh_themes)))
|
print(" -", "\n - ".join(t + " (last used)" if t == last_used_theme else t
|
||||||
|
for t in sorted(ligh_themes)))
|
||||||
|
|
||||||
print("\033[1;32mExtra\033[0m:")
|
print("\033[1;32mExtra\033[0m:")
|
||||||
print(" - random (select a random dark theme)")
|
print(" - random (select a random dark theme)")
|
||||||
print(" - random_dark (select a random dark theme)")
|
print(" - random_dark (select a random dark theme)")
|
||||||
print(" - random_light (select a random light theme)")
|
print(" - random_light (select a random light theme)")
|
||||||
|
print(" - random_user (select a random user theme)")
|
||||||
|
|
||||||
|
|
||||||
def list_themes(dark=True):
|
def list_themes(dark=True):
|
||||||
@ -72,7 +82,7 @@ def parse(theme_file):
|
|||||||
data["wallpaper"] = "None"
|
data["wallpaper"] = "None"
|
||||||
|
|
||||||
if "alpha" not in data:
|
if "alpha" not in data:
|
||||||
data["alpha"] = "100"
|
data["alpha"] = util.Color.alpha_num
|
||||||
|
|
||||||
# Terminal.sexy format.
|
# Terminal.sexy format.
|
||||||
if "color" in data:
|
if "color" in data:
|
||||||
@ -88,6 +98,13 @@ def get_random_theme(dark=True):
|
|||||||
return themes[0]
|
return themes[0]
|
||||||
|
|
||||||
|
|
||||||
|
def get_random_theme_user():
|
||||||
|
"""Get a random theme file from user theme directories."""
|
||||||
|
themes = [theme.path for theme in list_themes_user()]
|
||||||
|
random.shuffle(themes)
|
||||||
|
return themes[0]
|
||||||
|
|
||||||
|
|
||||||
def file(input_file, light=False):
|
def file(input_file, light=False):
|
||||||
"""Import colorscheme from json file."""
|
"""Import colorscheme from json file."""
|
||||||
util.create_dir(os.path.join(CONF_DIR, "colorschemes/light/"))
|
util.create_dir(os.path.join(CONF_DIR, "colorschemes/light/"))
|
||||||
@ -100,12 +117,15 @@ def file(input_file, light=False):
|
|||||||
theme_file = os.path.join(MODULE_DIR, "colorschemes", bri, theme_name)
|
theme_file = os.path.join(MODULE_DIR, "colorschemes", bri, theme_name)
|
||||||
|
|
||||||
# Find the theme file.
|
# Find the theme file.
|
||||||
if input_file == "random" or input_file == "random_dark":
|
if input_file in ("random", "random_dark"):
|
||||||
theme_file = get_random_theme()
|
theme_file = get_random_theme()
|
||||||
|
|
||||||
elif input_file == "random_light":
|
elif input_file == "random_light":
|
||||||
theme_file = get_random_theme(light)
|
theme_file = get_random_theme(light)
|
||||||
|
|
||||||
|
elif input_file == "random_user":
|
||||||
|
theme_file = get_random_theme_user()
|
||||||
|
|
||||||
elif os.path.isfile(user_theme_file):
|
elif os.path.isfile(user_theme_file):
|
||||||
theme_file = user_theme_file
|
theme_file = user_theme_file
|
||||||
|
|
||||||
@ -116,10 +136,19 @@ def file(input_file, light=False):
|
|||||||
if os.path.isfile(theme_file):
|
if os.path.isfile(theme_file):
|
||||||
logging.info("Set theme to \033[1;37m%s\033[0m.",
|
logging.info("Set theme to \033[1;37m%s\033[0m.",
|
||||||
os.path.basename(theme_file))
|
os.path.basename(theme_file))
|
||||||
|
util.save_file(os.path.basename(theme_file),
|
||||||
|
os.path.join(CACHE_DIR, "last_used_theme"))
|
||||||
return parse(theme_file)
|
return parse(theme_file)
|
||||||
|
|
||||||
else:
|
logging.error("No %s colorscheme file found.", bri)
|
||||||
logging.error("No %s colorscheme file found.", bri)
|
logging.error("Try adding '-l' to set light themes.")
|
||||||
logging.error("Try adding '-l' to set light themes.")
|
logging.error("Try removing '-l' to set dark themes.")
|
||||||
logging.error("Try removing '-l' to set dark themes.")
|
sys.exit(1)
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
def save(colors, theme_name, light=False):
|
||||||
|
"""Save colors to a theme file."""
|
||||||
|
theme_file = theme_name + ".json"
|
||||||
|
theme_path = os.path.join(CONF_DIR, "colorschemes",
|
||||||
|
"light" if light else "dark", theme_file)
|
||||||
|
util.save_file_json(colors, theme_path)
|
||||||
|
@ -5,6 +5,9 @@ import colorsys
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import platform
|
||||||
|
import re
|
||||||
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@ -29,6 +32,12 @@ class Color:
|
|||||||
"""Convert a hex color to xrdb rgba."""
|
"""Convert a hex color to xrdb rgba."""
|
||||||
return hex_to_xrgba(self.hex_color)
|
return hex_to_xrgba(self.hex_color)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def rgba(self):
|
||||||
|
"""Convert a hex color to rgba."""
|
||||||
|
return "rgba(%s,%s,%s,%s)" % (*hex_to_rgb(self.hex_color),
|
||||||
|
int(self.alpha_num) / 100)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def alpha(self):
|
def alpha(self):
|
||||||
"""Add URxvt alpha value to color."""
|
"""Add URxvt alpha value to color."""
|
||||||
@ -49,6 +58,21 @@ class Color:
|
|||||||
"""Strip '#' from color."""
|
"""Strip '#' from color."""
|
||||||
return self.hex_color[1:]
|
return self.hex_color[1:]
|
||||||
|
|
||||||
|
def lighten(self, percent):
|
||||||
|
"""Lighten color by percent"""
|
||||||
|
percent = float(re.sub(r'[\D\.]', '', str(percent)))
|
||||||
|
return Color(lighten_color(self.hex_color, percent / 100))
|
||||||
|
|
||||||
|
def darken(self, percent):
|
||||||
|
"""Darken color by percent"""
|
||||||
|
percent = float(re.sub(r'[\D\.]', '', str(percent)))
|
||||||
|
return Color(darken_color(self.hex_color, percent / 100))
|
||||||
|
|
||||||
|
def saturate(self, percent):
|
||||||
|
"""Saturate a color"""
|
||||||
|
percent = float(re.sub(r'[\D\.]', '', str(percent)))
|
||||||
|
return Color(saturate_color(self.hex_color, percent / 100))
|
||||||
|
|
||||||
|
|
||||||
def read_file(input_file):
|
def read_file(input_file):
|
||||||
"""Read data from a file and trim newlines."""
|
"""Read data from a file and trim newlines."""
|
||||||
@ -148,12 +172,11 @@ def blend_color(color, color2):
|
|||||||
def saturate_color(color, amount):
|
def saturate_color(color, amount):
|
||||||
"""Saturate a hex color."""
|
"""Saturate a hex color."""
|
||||||
r, g, b = hex_to_rgb(color)
|
r, g, b = hex_to_rgb(color)
|
||||||
r, g, b = [x/255.0 for x in (r, g, b)]
|
r, g, b = [x / 255.0 for x in (r, g, b)]
|
||||||
h, s, v = colorsys.rgb_to_hsv(r, g, b)
|
h, l, s = colorsys.rgb_to_hls(r, g, b)
|
||||||
s = amount
|
s = amount
|
||||||
v = 0.2
|
r, g, b = colorsys.hls_to_rgb(h, l, s)
|
||||||
r, g, b = colorsys.hls_to_rgb(h, s, v)
|
r, g, b = [x * 255.0 for x in (r, g, b)]
|
||||||
r, g, b = [x*255.0 for x in (r, g, b)]
|
|
||||||
|
|
||||||
return rgb_to_hex((int(r), int(g), int(b)))
|
return rgb_to_hex((int(r), int(g), int(b)))
|
||||||
|
|
||||||
@ -169,3 +192,20 @@ def disown(cmd):
|
|||||||
subprocess.Popen(cmd,
|
subprocess.Popen(cmd,
|
||||||
stdout=subprocess.DEVNULL,
|
stdout=subprocess.DEVNULL,
|
||||||
stderr=subprocess.DEVNULL)
|
stderr=subprocess.DEVNULL)
|
||||||
|
|
||||||
|
|
||||||
|
def get_pid(name):
|
||||||
|
"""Check if process is running by name."""
|
||||||
|
if not shutil.which("pidof"):
|
||||||
|
return False
|
||||||
|
|
||||||
|
try:
|
||||||
|
if platform.system() != 'Darwin':
|
||||||
|
subprocess.check_output(["pidof", "-s", name])
|
||||||
|
else:
|
||||||
|
subprocess.check_output(["pidof", name])
|
||||||
|
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
import ctypes
|
import ctypes
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
@ -32,13 +33,28 @@ def get_desktop_env():
|
|||||||
if desktop:
|
if desktop:
|
||||||
return "SWAY"
|
return "SWAY"
|
||||||
|
|
||||||
|
desktop = os.environ.get("DESKTOP_STARTUP_ID")
|
||||||
|
if desktop and "awesome" in desktop:
|
||||||
|
return "AWESOME"
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def xfconf(path, img):
|
def xfconf(img):
|
||||||
"""Call xfconf to set the wallpaper on XFCE."""
|
"""Call xfconf to set the wallpaper on XFCE."""
|
||||||
util.disown(["xfconf-query", "--channel", "xfce4-desktop",
|
xfconf_re = re.compile(
|
||||||
"--property", path, "--set", img])
|
r"^/backdrop/screen\d/monitor(?:0|\w*)/"
|
||||||
|
r"(?:(?:image-path|last-image)|workspace\d/last-image)$",
|
||||||
|
flags=re.M
|
||||||
|
)
|
||||||
|
xfconf_data = subprocess.check_output(
|
||||||
|
["xfconf-query", "--channel", "xfce4-desktop", "--list"],
|
||||||
|
stderr=subprocess.DEVNULL
|
||||||
|
).decode('utf8')
|
||||||
|
paths = xfconf_re.findall(xfconf_data)
|
||||||
|
for path in paths:
|
||||||
|
util.disown(["xfconf-query", "--channel", "xfce4-desktop",
|
||||||
|
"--property", path, "--set", img])
|
||||||
|
|
||||||
|
|
||||||
def set_wm_wallpaper(img):
|
def set_wm_wallpaper(img):
|
||||||
@ -71,9 +87,7 @@ def set_desktop_wallpaper(desktop, img):
|
|||||||
desktop = str(desktop).lower()
|
desktop = str(desktop).lower()
|
||||||
|
|
||||||
if "xfce" in desktop or "xubuntu" in desktop:
|
if "xfce" in desktop or "xubuntu" in desktop:
|
||||||
# XFCE requires two commands since they differ between versions.
|
xfconf(img)
|
||||||
xfconf("/backdrop/screen0/monitor0/image-path", img)
|
|
||||||
xfconf("/backdrop/screen0/monitor0/workspace0/last-image", img)
|
|
||||||
|
|
||||||
elif "muffin" in desktop or "cinnamon" in desktop:
|
elif "muffin" in desktop or "cinnamon" in desktop:
|
||||||
util.disown(["gsettings", "set",
|
util.disown(["gsettings", "set",
|
||||||
@ -92,6 +106,11 @@ def set_desktop_wallpaper(desktop, img):
|
|||||||
elif "sway" in desktop:
|
elif "sway" in desktop:
|
||||||
util.disown(["swaymsg", "output", "*", "bg", img, "fill"])
|
util.disown(["swaymsg", "output", "*", "bg", img, "fill"])
|
||||||
|
|
||||||
|
elif "awesome" in desktop:
|
||||||
|
util.disown(["awesome-client",
|
||||||
|
"require('gears').wallpaper.maximized('{img}')"
|
||||||
|
.format(**locals())])
|
||||||
|
|
||||||
else:
|
else:
|
||||||
set_wm_wallpaper(img)
|
set_wm_wallpaper(img)
|
||||||
|
|
||||||
@ -100,7 +119,18 @@ def set_mac_wallpaper(img):
|
|||||||
"""Set the wallpaper on macOS."""
|
"""Set the wallpaper on macOS."""
|
||||||
db_file = "Library/Application Support/Dock/desktoppicture.db"
|
db_file = "Library/Application Support/Dock/desktoppicture.db"
|
||||||
db_path = os.path.join(HOME, db_file)
|
db_path = os.path.join(HOME, db_file)
|
||||||
subprocess.call(["sqlite3", db_path, "update data set value = '%s'" % img])
|
img_dir, _ = os.path.split(img)
|
||||||
|
|
||||||
|
# Clear the existing picture data and write the image paths
|
||||||
|
sql = "delete from data; "
|
||||||
|
sql += "insert into data values(\"%s\"); " % img_dir
|
||||||
|
sql += "insert into data values(\"%s\"); " % img
|
||||||
|
|
||||||
|
# Set all monitors/workspaces to the selected image
|
||||||
|
sql += "update preferences set data_id=2 where key=1 or key=2 or key=3; "
|
||||||
|
sql += "update preferences set data_id=1 where key=10 or key=20 or key=30;"
|
||||||
|
|
||||||
|
subprocess.call(["sqlite3", db_path, sql])
|
||||||
|
|
||||||
# Kill the dock to fix issues with cached wallpapers.
|
# Kill the dock to fix issues with cached wallpapers.
|
||||||
# macOS caches wallpapers and if a wallpaper is set that shares
|
# macOS caches wallpapers and if a wallpaper is set that shares
|
||||||
|
3
setup.py
3
setup.py
@ -1,11 +1,12 @@
|
|||||||
"""wal - setup.py"""
|
"""wal - setup.py"""
|
||||||
|
import sys
|
||||||
import setuptools
|
import setuptools
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import pywal
|
import pywal
|
||||||
except ImportError:
|
except ImportError:
|
||||||
print("error: pywal requires Python 3.5 or greater.")
|
print("error: pywal requires Python 3.5 or greater.")
|
||||||
quit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
LONG_DESC = open('README.md').read()
|
LONG_DESC = open('README.md').read()
|
||||||
VERSION = pywal.__version__
|
VERSION = pywal.__version__
|
||||||
|
@ -12,11 +12,6 @@ class TestGenColors(unittest.TestCase):
|
|||||||
result = colors.get("tests/test_files/test.jpg")
|
result = colors.get("tests/test_files/test.jpg")
|
||||||
self.assertEqual(len(result["colors"]["color0"]), 7)
|
self.assertEqual(len(result["colors"]["color0"]), 7)
|
||||||
|
|
||||||
def test_gen_colors_fail(self):
|
|
||||||
"""> Generate a colorscheme and fail."""
|
|
||||||
with self.assertRaises(SystemExit):
|
|
||||||
colors.get("tests/test_files/test.png")
|
|
||||||
|
|
||||||
def test_color_import(self):
|
def test_color_import(self):
|
||||||
"""> Read colors from a file."""
|
"""> Read colors from a file."""
|
||||||
result = colors.file("tests/test_files/test_file.json")
|
result = colors.file("tests/test_files/test_file.json")
|
||||||
|
@ -48,7 +48,7 @@ class Testsequences(unittest.TestCase):
|
|||||||
def test_set_iterm_tab_color(self):
|
def test_set_iterm_tab_color(self):
|
||||||
"""> Create iterm tab color sequences"""
|
"""> Create iterm tab color sequences"""
|
||||||
result = sequences.set_iterm_tab_color(COLORS["special"]["background"])
|
result = sequences.set_iterm_tab_color(COLORS["special"]["background"])
|
||||||
self.assertEqual(len(result), 104)
|
self.assertEqual(len(result), 84)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
Loading…
Reference in New Issue
Block a user