File size: 2,164 Bytes
90f10d2 271bd15 90f10d2 271bd15 90f10d2 271bd15 90f10d2 271bd15 90f10d2 271bd15 90f10d2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | """Terminal output, prompts, and formatting."""
import os
import sys
_PLAIN_MAP = {"β": "[OK]", "β": "[ERR]", "β ": "[WARN]", "β": ">", "β³": "->", "Β·": "-", "β¦": "...", "β": "-", "β": "-", "β": "<-", "β": "<->"}
def _plain():
return os.environ.get("VOICE_PLAIN") == "1"
def _transform(msg):
if not _plain():
return msg
for k, v in _PLAIN_MAP.items():
msg = msg.replace(k, v)
return msg
def _now_iso():
from datetime import datetime, timezone
return datetime.now(timezone.utc).isoformat()
def _say(msg):
print(_transform(msg), flush=True)
def _quiet():
try:
from vlib import ctx as _ctx
return bool(getattr(_ctx, "QUIET", False))
except Exception:
return False
def _ok(msg):
if _quiet():
return
_say(f" β {msg}")
def _warn(msg):
_say(f" β {msg}")
def _step(msg):
if _quiet():
return
_say(f" β {msg}")
def _note(msg):
if _quiet():
return
_say(f" β³ {msg}")
def _fail(msg):
sys.stdout.flush()
msg = str(msg).lstrip()
if msg.startswith("β"):
msg = msg[1:].lstrip()
_say(f" β {msg}")
sys.exit(1)
def _noninteractive(args):
if getattr(args, "non_interactive", False) or getattr(args, "yes", False):
return True
try:
return not sys.stdin.isatty()
except Exception:
return True
def _progress_pref():
if _plain() or os.environ.get("REDUCE_MOTION") == "1":
return True
try:
return not sys.stdout.isatty()
except Exception:
return True
def _confirm(question, args):
if getattr(args, "yes", False):
return True
if _noninteractive(args):
return False
try:
ans = input(question).strip().lower()
except (EOFError, KeyboardInterrupt):
_say(" β Cancelled.")
sys.exit(1)
return ans in ("y", "yes")
def _trunc(s, w):
s = str(s)
return s[: w - 1] + "β¦" if len(s) > w else s
def _term_width():
try:
import shutil
return shutil.get_terminal_size().columns
except Exception:
return 80
|