[F] Implement os detection in termenv

https://github.com/hykilpikonna/hyfetch/issues/16
This commit is contained in:
Hykilpikonna 2022-11-22 14:59:46 -05:00
parent 79a086fcc3
commit 1bccaad8fd
No known key found for this signature in database
GPG key ID: 256CD01A41D7FA26
2 changed files with 16 additions and 13 deletions

View file

@ -9,6 +9,7 @@ from itertools import permutations
from math import ceil
from typing import Iterable
from . import termenv
from .color_scale import Scale
from .color_util import printc, clear_screen
from .constants import *
@ -86,11 +87,8 @@ def create_config() -> Config:
:return: Config object (automatically stored)
"""
# Detect terminal environment (doesn't work on Windows)
det_bg, det_ansi = None, None
if platform.system() != 'Windows':
from . import termenv
det_bg = termenv.get_background_color()
det_ansi = termenv.detect_ansi_mode()
det_bg = termenv.get_background_color()
det_ansi = termenv.detect_ansi_mode()
asc = get_distro_ascii()
asc_width, asc_lines = ascii_size(asc)

View file

@ -2,11 +2,7 @@ from __future__ import annotations
import os
import platform
import signal
import sys
import termios
import tty
from select import select
from .color_util import RGB, AnsiMode
@ -91,6 +87,11 @@ def detect_ansi_mode() -> AnsiMode | None:
def unix_read_osc(seq: int) -> str:
import termios
import tty
import signal
from select import select
# screen/tmux can't support OSC, because they can be connected to multiple
# terminals concurrently.
term = os.environ.get('TERM')
@ -155,10 +156,14 @@ def unix_read_osc(seq: int) -> str:
def get_background_color() -> RGB | None:
try:
osc = unix_read_osc(11).lstrip("rgb:")
return RGB.from_hex(''.join([v[:2] for v in osc.split('/')]))
except Exception:
system = platform.system().lower()
if system.startswith("linux") or system.startswith("darwin"):
try:
osc = unix_read_osc(11).lstrip("rgb:")
return RGB.from_hex(''.join([v[:2] for v in osc.split('/')]))
except Exception:
return None
if system.startswith("windows"):
return None