pretty_print_success/attention/failure/yield, universal unicode fallbacks
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
import os
|
||||||
|
import platform
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from typing import (Any, Callable, Dict, List, Literal, NoReturn, Optional,
|
from typing import (Any, Callable, Dict, List, Literal, NoReturn, Optional,
|
||||||
@@ -42,9 +44,13 @@ TOOLCHAIN_STYLE = {
|
|||||||
"task.execute": "fg:ansibrightgreen bold",
|
"task.execute": "fg:ansibrightgreen bold",
|
||||||
"print.answer": "fg:ansibrightblack",
|
"print.answer": "fg:ansibrightblack",
|
||||||
"print.debug": "fg:ansibrightblack",
|
"print.debug": "fg:ansibrightblack",
|
||||||
|
"print.yield": "fg:ansibrightblue",
|
||||||
"print.info": "fg:ansibrightgreen",
|
"print.info": "fg:ansibrightgreen",
|
||||||
|
"print.success": "fg:ansibrightgreen",
|
||||||
"print.warn": "fg:ansibrightyellow",
|
"print.warn": "fg:ansibrightyellow",
|
||||||
|
"print.attention": "fg:ansibrightyellow",
|
||||||
"print.error": "fg:ansibrightred",
|
"print.error": "fg:ansibrightred",
|
||||||
|
"print.failure": "fg:ansibrightred",
|
||||||
"print.abort-message": "fg:ansibrightred bold",
|
"print.abort-message": "fg:ansibrightred bold",
|
||||||
|
|
||||||
# interactables styling
|
# interactables styling
|
||||||
@@ -65,6 +71,39 @@ TOOLCHAIN_STYLE = {
|
|||||||
def get_toolchain_style() -> Style:
|
def get_toolchain_style() -> Style:
|
||||||
return Style.from_dict(TOOLCHAIN_STYLE)
|
return Style.from_dict(TOOLCHAIN_STYLE)
|
||||||
|
|
||||||
|
def is_unicode_supported() -> bool:
|
||||||
|
environ = os.environ
|
||||||
|
terminal = environ.get("TERM", "")
|
||||||
|
if platform.system() != "Windows":
|
||||||
|
return terminal != "linux" # Linux console (kernel)
|
||||||
|
return (
|
||||||
|
terminal in {
|
||||||
|
"xterm-256color",
|
||||||
|
"alacritty",
|
||||||
|
"rxvt-unicode",
|
||||||
|
"rxvt-unicode-256color"
|
||||||
|
}
|
||||||
|
or environ.get("TERM_PROGRAM") in {
|
||||||
|
"Terminus-Sublime",
|
||||||
|
"vscode"
|
||||||
|
}
|
||||||
|
or bool(environ.get("WT_SESSION")) # Windows Terminal
|
||||||
|
or bool(environ.get("TERMINUS_SUBLIME")) # Terminus (older versions)
|
||||||
|
or environ.get("ConEmuTask") == "{cmd::Cmder}" # ConEmu/cmder
|
||||||
|
or environ.get("TERMINAL_EMULATOR") == "JetBrains-JediTerm"
|
||||||
|
)
|
||||||
|
|
||||||
|
if is_unicode_supported():
|
||||||
|
UNICODE_CHECK_MARK = "✓"
|
||||||
|
UNICODE_POINTED_STAR = "✦"
|
||||||
|
UNICODE_BALLOT_X = "✗"
|
||||||
|
UNICODE_SNOWFLAKE = "❄"
|
||||||
|
else:
|
||||||
|
UNICODE_CHECK_MARK = "√"
|
||||||
|
UNICODE_POINTED_STAR = "i"
|
||||||
|
UNICODE_BALLOT_X = "×"
|
||||||
|
UNICODE_SNOWFLAKE = "*"
|
||||||
|
|
||||||
class InteractableMargin(Margin):
|
class InteractableMargin(Margin):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
@@ -823,6 +862,22 @@ def pretty_print_answer(prompt: AnyFormattedText, *values: object, sep: str=", "
|
|||||||
pretty_print(prompt, end=prompt_end, file=file, flush=flush, include_default_pygments_style=include_default_pygments_style)
|
pretty_print(prompt, end=prompt_end, file=file, flush=flush, include_default_pygments_style=include_default_pygments_style)
|
||||||
pretty_print(*values, style="class:print.answer", sep=sep, end=end, file=file, flush=flush, include_default_pygments_style=include_default_pygments_style)
|
pretty_print(*values, style="class:print.answer", sep=sep, end=end, file=file, flush=flush, include_default_pygments_style=include_default_pygments_style)
|
||||||
|
|
||||||
|
def pretty_print_success(*values: object, sep: str = " ", end: Optional[str] = "\n", file: Optional[Any] = None, flush: bool = False, include_default_pygments_style: bool = False):
|
||||||
|
pretty_print(UNICODE_CHECK_MARK, style="class:print.success", end=" ")
|
||||||
|
pretty_print(*values, style="class:print.success", sep=sep, end=end, file=file, flush=flush, include_default_pygments_style=include_default_pygments_style)
|
||||||
|
|
||||||
|
def pretty_print_attention(*values: object, sep: str = " ", end: Optional[str] = "\n", file: Optional[Any] = None, flush: bool = False, include_default_pygments_style: bool = False):
|
||||||
|
pretty_print(UNICODE_POINTED_STAR, style="class:print.attention", end=" ")
|
||||||
|
pretty_print(*values, style="class:print.attention", sep=sep, end=end, file=file, flush=flush, include_default_pygments_style=include_default_pygments_style)
|
||||||
|
|
||||||
|
def pretty_print_failure(*values: object, sep: str = " ", end: Optional[str] = "\n", file: Optional[Any] = None, flush: bool = False, include_default_pygments_style: bool = False):
|
||||||
|
pretty_print(UNICODE_BALLOT_X, style="class:print.failure", end=" ")
|
||||||
|
pretty_print(*values, style="class:print.failure", sep=sep, end=end, file=file, flush=flush, include_default_pygments_style=include_default_pygments_style)
|
||||||
|
|
||||||
|
def pretty_print_yield(*values: object, sep: str = " ", end: Optional[str] = "\n", file: Optional[Any] = None, flush: bool = False, include_default_pygments_style: bool = False):
|
||||||
|
pretty_print(UNICODE_SNOWFLAKE, style="class:print.yield", end=" ")
|
||||||
|
pretty_print(*values, style="class:print.yield", sep=sep, end=end, file=file, flush=flush, include_default_pygments_style=include_default_pygments_style)
|
||||||
|
|
||||||
def abort(*values: object, sep: Optional[str] = " ", code: int = 255, cause: Optional[BaseException] = None) -> NoReturn:
|
def abort(*values: object, sep: Optional[str] = " ", code: int = 255, cause: Optional[BaseException] = None) -> NoReturn:
|
||||||
if cause:
|
if cause:
|
||||||
from traceback import print_exception
|
from traceback import print_exception
|
||||||
|
|||||||
Reference in New Issue
Block a user