[U] Detect background and color mode in main
This commit is contained in:
parent
75ed187e72
commit
0a9ac6a351
1 changed files with 44 additions and 24 deletions
|
@ -4,13 +4,14 @@ from __future__ import annotations
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
import random
|
import random
|
||||||
import re
|
|
||||||
from itertools import permutations
|
|
||||||
import traceback
|
import traceback
|
||||||
from typing import Iterable
|
from itertools import permutations
|
||||||
from math import ceil
|
from math import ceil
|
||||||
|
from typing import Iterable
|
||||||
|
|
||||||
from .color_util import printc, color, clear_screen
|
from . import termenv
|
||||||
|
from .color_scale import Scale
|
||||||
|
from .color_util import printc, color, clear_screen, AnsiMode
|
||||||
from .constants import *
|
from .constants import *
|
||||||
from .models import Config
|
from .models import Config
|
||||||
from .neofetch_util import *
|
from .neofetch_util import *
|
||||||
|
@ -85,11 +86,25 @@ def create_config() -> Config:
|
||||||
|
|
||||||
:return: Config object (automatically stored)
|
:return: Config object (automatically stored)
|
||||||
"""
|
"""
|
||||||
|
# Detect terminal environment
|
||||||
|
det_bg = termenv.get_background_color()
|
||||||
|
det_ansi = termenv.detect_ansi_mode()
|
||||||
|
|
||||||
asc = get_distro_ascii()
|
asc = get_distro_ascii()
|
||||||
asc_width, asc_lines = ascii_size(asc)
|
asc_width, asc_lines = ascii_size(asc)
|
||||||
title = 'Welcome to &b&lhy&f&lfetch&r! Let\'s set up some colors first.'
|
logo = color("&b&lhyfetch&r" if det_bg is None or det_bg.is_light() else "&b&lhy&f&lfetch&r")
|
||||||
|
title = f'Welcome to {logo} Let\'s set up some colors first.'
|
||||||
clear_screen(title)
|
clear_screen(title)
|
||||||
|
|
||||||
|
option_counter = 1
|
||||||
|
|
||||||
|
def update_title(k: str, v: str):
|
||||||
|
nonlocal title, option_counter
|
||||||
|
if not k.endswith(":"):
|
||||||
|
k += ':'
|
||||||
|
title += f"\n&e{option_counter}. {k.ljust(30)} &r{v}"
|
||||||
|
option_counter += 1
|
||||||
|
|
||||||
##############################
|
##############################
|
||||||
# 0. Check term size
|
# 0. Check term size
|
||||||
try:
|
try:
|
||||||
|
@ -104,11 +119,12 @@ def create_config() -> Config:
|
||||||
|
|
||||||
##############################
|
##############################
|
||||||
# 1. Select color system
|
# 1. Select color system
|
||||||
clear_screen(title)
|
def select_color_system():
|
||||||
term_len, term_lines = term_size()
|
if det_ansi == 'rgb':
|
||||||
try:
|
return 'rgb', 'Detected color mode'
|
||||||
# Demonstrate RGB with a gradient. This requires numpy
|
|
||||||
from .color_scale import Scale
|
clear_screen(title)
|
||||||
|
term_len, term_lines = term_size()
|
||||||
|
|
||||||
scale2 = Scale(['#12c2e9', '#c471ed', '#f7797d'])
|
scale2 = Scale(['#12c2e9', '#c471ed', '#f7797d'])
|
||||||
_8bit = [scale2(i / term_len).to_ansi_8bit(False) for i in range(term_len)]
|
_8bit = [scale2(i / term_len).to_ansi_8bit(False) for i in range(term_len)]
|
||||||
|
@ -121,25 +137,29 @@ def create_config() -> Config:
|
||||||
printc(f'&a1. Which &bcolor system &ado you want to use?')
|
printc(f'&a1. Which &bcolor system &ado you want to use?')
|
||||||
printc(f'(If you can\'t see colors under "RGB Color Testing", please choose 8bit)')
|
printc(f'(If you can\'t see colors under "RGB Color Testing", please choose 8bit)')
|
||||||
print()
|
print()
|
||||||
color_system = literal_input('Your choice?', ['8bit', 'rgb'], 'rgb')
|
|
||||||
|
|
||||||
except ModuleNotFoundError:
|
return literal_input('Your choice?', ['8bit', 'rgb'], 'rgb'), 'Selected color mode'
|
||||||
# Numpy not found, skip gradient test, use fallback
|
|
||||||
color_system = literal_input('Which &acolor &bsystem &rdo you want to use?',
|
|
||||||
['8bit', 'rgb'], 'rgb')
|
|
||||||
|
|
||||||
# Override global color mode
|
# Override global color mode
|
||||||
|
color_system, ttl = select_color_system()
|
||||||
GLOBAL_CFG.color_mode = color_system
|
GLOBAL_CFG.color_mode = color_system
|
||||||
title += f'\n&e1. Selected color mode: &r{color_system}'
|
update_title(ttl, color_system)
|
||||||
|
|
||||||
##############################
|
##############################
|
||||||
# 2. Select light/dark mode
|
# 2. Select light/dark mode
|
||||||
clear_screen(title)
|
def select_light_dark():
|
||||||
light_dark = literal_input(f'2. Is your terminal in &gf(#85e7e9)light mode&r or &gf(#c471ed)dark mode&r?',
|
if det_bg is not None:
|
||||||
['light', 'dark'], 'dark')
|
return det_bg.is_light(), 'Detected background color'
|
||||||
is_light = light_dark == 'light'
|
|
||||||
|
clear_screen(title)
|
||||||
|
inp = literal_input(f'2. Is your terminal in &blight mode&r or &4dark mode&r?',
|
||||||
|
['light', 'dark'], 'dark')
|
||||||
|
return inp == 'light', 'Selected background color'
|
||||||
|
|
||||||
|
is_light, ttl = select_light_dark()
|
||||||
|
light_dark = 'light' if is_light else 'dark'
|
||||||
GLOBAL_CFG.is_light = is_light
|
GLOBAL_CFG.is_light = is_light
|
||||||
title += f'\n&e2. Light/Dark: &r{light_dark}'
|
update_title(ttl, light_dark)
|
||||||
|
|
||||||
##############################
|
##############################
|
||||||
# 3. Choose preset
|
# 3. Choose preset
|
||||||
|
@ -198,7 +218,7 @@ def create_config() -> Config:
|
||||||
page -= 1
|
page -= 1
|
||||||
else:
|
else:
|
||||||
_prs = PRESETS[preset]
|
_prs = PRESETS[preset]
|
||||||
title += f'\n&e3. Selected flag: &r{_prs.color_text(preset)}'
|
update_title('Selected flag', _prs.set_light_dl_def(light_dark).color_text(preset))
|
||||||
break
|
break
|
||||||
|
|
||||||
#############################
|
#############################
|
||||||
|
@ -236,7 +256,7 @@ def create_config() -> Config:
|
||||||
|
|
||||||
if lightness:
|
if lightness:
|
||||||
_prs = _prs.set_light_dl(lightness, light_dark)
|
_prs = _prs.set_light_dl(lightness, light_dark)
|
||||||
title += f'\n&e4. Brightness: &r{f"{lightness:.2f}" if lightness else "unset"}'
|
update_title('Selected Brightness', f"{lightness:.2f}" if lightness else f"unset = {def_lightness * 100:.0f}%")
|
||||||
|
|
||||||
#############################
|
#############################
|
||||||
# 5. Color arrangement
|
# 5. Color arrangement
|
||||||
|
@ -302,7 +322,7 @@ def create_config() -> Config:
|
||||||
|
|
||||||
break
|
break
|
||||||
|
|
||||||
title += f'\n&e5. Color Alignment: &r{color_alignment}'
|
update_title('Color alignment', color_alignment)
|
||||||
|
|
||||||
# Create config
|
# Create config
|
||||||
clear_screen(title)
|
clear_screen(title)
|
||||||
|
|
Loading…
Reference in a new issue