mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-27 02:31:45 +02:00
spinner and progress bar for kittens UI
This commit is contained in:
39
kittens/tui/progress.py
Normal file
39
kittens/tui/progress.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# vim:fileencoding=utf-8
|
||||||
|
# License: GPLv3 Copyright: 2021, Kovid Goyal <kovid at kovidgoyal.net>
|
||||||
|
|
||||||
|
|
||||||
|
from .operations import styled
|
||||||
|
|
||||||
|
|
||||||
|
def render_progress_bar(frac: float, width: int = 80) -> str:
|
||||||
|
if frac >= 1:
|
||||||
|
return styled('🬋' * width, fg='green')
|
||||||
|
if frac <= 0:
|
||||||
|
return styled('🬋' * width, dim=True)
|
||||||
|
w = frac * width
|
||||||
|
overhang = w - int(w)
|
||||||
|
filled = '🬋' * int(w)
|
||||||
|
if overhang < 0.2:
|
||||||
|
needs_break = True
|
||||||
|
elif overhang < 0.8:
|
||||||
|
filled += '🬃'
|
||||||
|
needs_break = False
|
||||||
|
else:
|
||||||
|
if len(filled) < width - 1:
|
||||||
|
filled += '🬋'
|
||||||
|
needs_break = True
|
||||||
|
else:
|
||||||
|
filled += '🬃'
|
||||||
|
needs_break = False
|
||||||
|
ans = styled(filled, fg='blue')
|
||||||
|
unfilled = ''
|
||||||
|
if width > len(filled):
|
||||||
|
if needs_break:
|
||||||
|
unfilled += '🬇'
|
||||||
|
filler = width - len(filled) - len(unfilled)
|
||||||
|
if filler > 0:
|
||||||
|
unfilled += '🬋' * filler
|
||||||
|
if unfilled:
|
||||||
|
ans += styled(unfilled, dim=True)
|
||||||
|
return ans
|
||||||
531
kittens/tui/spinners.py
Normal file
531
kittens/tui/spinners.py
Normal file
@@ -0,0 +1,531 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# vim:fileencoding=utf-8
|
||||||
|
# License: GPLv3 Copyright: 2021, Kovid Goyal <kovid at kovidgoyal.net>
|
||||||
|
|
||||||
|
from time import monotonic
|
||||||
|
from typing import Dict, Sequence
|
||||||
|
|
||||||
|
from kitty.typing import TypedDict
|
||||||
|
|
||||||
|
|
||||||
|
class SpinnerDef(TypedDict):
|
||||||
|
interval: int
|
||||||
|
frames: Sequence[str]
|
||||||
|
|
||||||
|
|
||||||
|
# Spinner definitions are from
|
||||||
|
# https://raw.githubusercontent.com/sindresorhus/cli-spinners/main/spinners.json
|
||||||
|
spinners: Dict[str, SpinnerDef] = { # {{{
|
||||||
|
"dots": {
|
||||||
|
"interval": 80,
|
||||||
|
"frames": ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"]
|
||||||
|
},
|
||||||
|
"dots2": {
|
||||||
|
"interval": 80,
|
||||||
|
"frames": ["⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷"]
|
||||||
|
},
|
||||||
|
"dots3": {
|
||||||
|
"interval": 80,
|
||||||
|
"frames": ["⠋", "⠙", "⠚", "⠞", "⠖", "⠦", "⠴", "⠲", "⠳", "⠓"]
|
||||||
|
},
|
||||||
|
"dots4": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames":
|
||||||
|
["⠄", "⠆", "⠇", "⠋", "⠙", "⠸", "⠰", "⠠", "⠰", "⠸", "⠙", "⠋", "⠇", "⠆"]
|
||||||
|
},
|
||||||
|
"dots5": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames": [
|
||||||
|
"⠋", "⠙", "⠚", "⠒", "⠂", "⠂", "⠒", "⠲", "⠴", "⠦", "⠖", "⠒", "⠐",
|
||||||
|
"⠐", "⠒", "⠓", "⠋"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dots6": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames": [
|
||||||
|
"⠁", "⠉", "⠙", "⠚", "⠒", "⠂", "⠂", "⠒", "⠲", "⠴", "⠤", "⠄", "⠄",
|
||||||
|
"⠤", "⠴", "⠲", "⠒", "⠂", "⠂", "⠒", "⠚", "⠙", "⠉", "⠁"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dots7": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames": [
|
||||||
|
"⠈", "⠉", "⠋", "⠓", "⠒", "⠐", "⠐", "⠒", "⠖", "⠦", "⠤", "⠠", "⠠",
|
||||||
|
"⠤", "⠦", "⠖", "⠒", "⠐", "⠐", "⠒", "⠓", "⠋", "⠉", "⠈"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dots8": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames": [
|
||||||
|
"⠁", "⠁", "⠉", "⠙", "⠚", "⠒", "⠂", "⠂", "⠒", "⠲", "⠴", "⠤", "⠄",
|
||||||
|
"⠄", "⠤", "⠠", "⠠", "⠤", "⠦", "⠖", "⠒", "⠐", "⠐", "⠒", "⠓", "⠋",
|
||||||
|
"⠉", "⠈", "⠈"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dots9": {
|
||||||
|
"interval": 80,
|
||||||
|
"frames": ["⢹", "⢺", "⢼", "⣸", "⣇", "⡧", "⡗", "⡏"]
|
||||||
|
},
|
||||||
|
"dots10": {
|
||||||
|
"interval": 80,
|
||||||
|
"frames": ["⢄", "⢂", "⢁", "⡁", "⡈", "⡐", "⡠"]
|
||||||
|
},
|
||||||
|
"dots11": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["⠁", "⠂", "⠄", "⡀", "⢀", "⠠", "⠐", "⠈"]
|
||||||
|
},
|
||||||
|
"dots12": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames": [
|
||||||
|
"⢀⠀", "⡀⠀", "⠄⠀", "⢂⠀", "⡂⠀", "⠅⠀", "⢃⠀", "⡃⠀", "⠍⠀", "⢋⠀", "⡋⠀",
|
||||||
|
"⠍⠁", "⢋⠁", "⡋⠁", "⠍⠉", "⠋⠉", "⠋⠉", "⠉⠙", "⠉⠙", "⠉⠩", "⠈⢙", "⠈⡙",
|
||||||
|
"⢈⠩", "⡀⢙", "⠄⡙", "⢂⠩", "⡂⢘", "⠅⡘", "⢃⠨", "⡃⢐", "⠍⡐", "⢋⠠", "⡋⢀",
|
||||||
|
"⠍⡁", "⢋⠁", "⡋⠁", "⠍⠉", "⠋⠉", "⠋⠉", "⠉⠙", "⠉⠙", "⠉⠩", "⠈⢙", "⠈⡙",
|
||||||
|
"⠈⠩", "⠀⢙", "⠀⡙", "⠀⠩", "⠀⢘", "⠀⡘", "⠀⠨", "⠀⢐", "⠀⡐", "⠀⠠", "⠀⢀",
|
||||||
|
"⠀⡀"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dots8Bit": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames": [
|
||||||
|
"⠀", "⠁", "⠂", "⠃", "⠄", "⠅", "⠆", "⠇", "⡀", "⡁", "⡂", "⡃", "⡄",
|
||||||
|
"⡅", "⡆", "⡇", "⠈", "⠉", "⠊", "⠋", "⠌", "⠍", "⠎", "⠏", "⡈", "⡉",
|
||||||
|
"⡊", "⡋", "⡌", "⡍", "⡎", "⡏", "⠐", "⠑", "⠒", "⠓", "⠔", "⠕", "⠖",
|
||||||
|
"⠗", "⡐", "⡑", "⡒", "⡓", "⡔", "⡕", "⡖", "⡗", "⠘", "⠙", "⠚", "⠛",
|
||||||
|
"⠜", "⠝", "⠞", "⠟", "⡘", "⡙", "⡚", "⡛", "⡜", "⡝", "⡞", "⡟", "⠠",
|
||||||
|
"⠡", "⠢", "⠣", "⠤", "⠥", "⠦", "⠧", "⡠", "⡡", "⡢", "⡣", "⡤", "⡥",
|
||||||
|
"⡦", "⡧", "⠨", "⠩", "⠪", "⠫", "⠬", "⠭", "⠮", "⠯", "⡨", "⡩", "⡪",
|
||||||
|
"⡫", "⡬", "⡭", "⡮", "⡯", "⠰", "⠱", "⠲", "⠳", "⠴", "⠵", "⠶", "⠷",
|
||||||
|
"⡰", "⡱", "⡲", "⡳", "⡴", "⡵", "⡶", "⡷", "⠸", "⠹", "⠺", "⠻", "⠼",
|
||||||
|
"⠽", "⠾", "⠿", "⡸", "⡹", "⡺", "⡻", "⡼", "⡽", "⡾", "⡿", "⢀", "⢁",
|
||||||
|
"⢂", "⢃", "⢄", "⢅", "⢆", "⢇", "⣀", "⣁", "⣂", "⣃", "⣄", "⣅", "⣆",
|
||||||
|
"⣇", "⢈", "⢉", "⢊", "⢋", "⢌", "⢍", "⢎", "⢏", "⣈", "⣉", "⣊", "⣋",
|
||||||
|
"⣌", "⣍", "⣎", "⣏", "⢐", "⢑", "⢒", "⢓", "⢔", "⢕", "⢖", "⢗", "⣐",
|
||||||
|
"⣑", "⣒", "⣓", "⣔", "⣕", "⣖", "⣗", "⢘", "⢙", "⢚", "⢛", "⢜", "⢝",
|
||||||
|
"⢞", "⢟", "⣘", "⣙", "⣚", "⣛", "⣜", "⣝", "⣞", "⣟", "⢠", "⢡", "⢢",
|
||||||
|
"⢣", "⢤", "⢥", "⢦", "⢧", "⣠", "⣡", "⣢", "⣣", "⣤", "⣥", "⣦", "⣧",
|
||||||
|
"⢨", "⢩", "⢪", "⢫", "⢬", "⢭", "⢮", "⢯", "⣨", "⣩", "⣪", "⣫", "⣬",
|
||||||
|
"⣭", "⣮", "⣯", "⢰", "⢱", "⢲", "⢳", "⢴", "⢵", "⢶", "⢷", "⣰", "⣱",
|
||||||
|
"⣲", "⣳", "⣴", "⣵", "⣶", "⣷", "⢸", "⢹", "⢺", "⢻", "⢼", "⢽", "⢾",
|
||||||
|
"⢿", "⣸", "⣹", "⣺", "⣻", "⣼", "⣽", "⣾", "⣿"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"line": {
|
||||||
|
"interval": 130,
|
||||||
|
"frames": ["-", "\\", "|", "/"]
|
||||||
|
},
|
||||||
|
"line2": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["⠂", "-", "–", "—", "–", "-"]
|
||||||
|
},
|
||||||
|
"pipe": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["┤", "┘", "┴", "└", "├", "┌", "┬", "┐"]
|
||||||
|
},
|
||||||
|
"simpleDots": {
|
||||||
|
"interval": 400,
|
||||||
|
"frames": [". ", ".. ", "...", " "]
|
||||||
|
},
|
||||||
|
"simpleDotsScrolling": {
|
||||||
|
"interval": 200,
|
||||||
|
"frames": [". ", ".. ", "...", " ..", " .", " "]
|
||||||
|
},
|
||||||
|
"star": {
|
||||||
|
"interval": 70,
|
||||||
|
"frames": ["✶", "✸", "✹", "✺", "✹", "✷"]
|
||||||
|
},
|
||||||
|
"star2": {
|
||||||
|
"interval": 80,
|
||||||
|
"frames": ["+", "x", "*"]
|
||||||
|
},
|
||||||
|
"flip": {
|
||||||
|
"interval": 70,
|
||||||
|
"frames": ["_", "_", "_", "-", "`", "`", "'", "´", "-", "_", "_", "_"]
|
||||||
|
},
|
||||||
|
"hamburger": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["☱", "☲", "☴"]
|
||||||
|
},
|
||||||
|
"growVertical": {
|
||||||
|
"interval": 120,
|
||||||
|
"frames": ["▁", "▃", "▄", "▅", "▆", "▇", "▆", "▅", "▄", "▃"]
|
||||||
|
},
|
||||||
|
"growHorizontal": {
|
||||||
|
"interval": 120,
|
||||||
|
"frames": ["▏", "▎", "▍", "▌", "▋", "▊", "▉", "▊", "▋", "▌", "▍", "▎"]
|
||||||
|
},
|
||||||
|
"balloon": {
|
||||||
|
"interval": 140,
|
||||||
|
"frames": [" ", ".", "o", "O", "@", "*", " "]
|
||||||
|
},
|
||||||
|
"balloon2": {
|
||||||
|
"interval": 120,
|
||||||
|
"frames": [".", "o", "O", "°", "O", "o", "."]
|
||||||
|
},
|
||||||
|
"noise": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["▓", "▒", "░"]
|
||||||
|
},
|
||||||
|
"bounce": {
|
||||||
|
"interval": 120,
|
||||||
|
"frames": ["⠁", "⠂", "⠄", "⠂"]
|
||||||
|
},
|
||||||
|
"boxBounce": {
|
||||||
|
"interval": 120,
|
||||||
|
"frames": ["▖", "▘", "▝", "▗"]
|
||||||
|
},
|
||||||
|
"boxBounce2": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["▌", "▀", "▐", "▄"]
|
||||||
|
},
|
||||||
|
"triangle": {
|
||||||
|
"interval": 50,
|
||||||
|
"frames": ["◢", "◣", "◤", "◥"]
|
||||||
|
},
|
||||||
|
"arc": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["◜", "◠", "◝", "◞", "◡", "◟"]
|
||||||
|
},
|
||||||
|
"circle": {
|
||||||
|
"interval": 120,
|
||||||
|
"frames": ["◡", "⊙", "◠"]
|
||||||
|
},
|
||||||
|
"squareCorners": {
|
||||||
|
"interval": 180,
|
||||||
|
"frames": ["◰", "◳", "◲", "◱"]
|
||||||
|
},
|
||||||
|
"circleQuarters": {
|
||||||
|
"interval": 120,
|
||||||
|
"frames": ["◴", "◷", "◶", "◵"]
|
||||||
|
},
|
||||||
|
"circleHalves": {
|
||||||
|
"interval": 50,
|
||||||
|
"frames": ["◐", "◓", "◑", "◒"]
|
||||||
|
},
|
||||||
|
"squish": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["╫", "╪"]
|
||||||
|
},
|
||||||
|
"toggle": {
|
||||||
|
"interval": 250,
|
||||||
|
"frames": ["⊶", "⊷"]
|
||||||
|
},
|
||||||
|
"toggle2": {
|
||||||
|
"interval": 80,
|
||||||
|
"frames": ["▫", "▪"]
|
||||||
|
},
|
||||||
|
"toggle3": {
|
||||||
|
"interval": 120,
|
||||||
|
"frames": ["□", "■"]
|
||||||
|
},
|
||||||
|
"toggle4": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["■", "□", "▪", "▫"]
|
||||||
|
},
|
||||||
|
"toggle5": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["▮", "▯"]
|
||||||
|
},
|
||||||
|
"toggle6": {
|
||||||
|
"interval": 300,
|
||||||
|
"frames": ["ဝ", "၀"]
|
||||||
|
},
|
||||||
|
"toggle7": {
|
||||||
|
"interval": 80,
|
||||||
|
"frames": ["⦾", "⦿"]
|
||||||
|
},
|
||||||
|
"toggle8": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["◍", "◌"]
|
||||||
|
},
|
||||||
|
"toggle9": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["◉", "◎"]
|
||||||
|
},
|
||||||
|
"toggle10": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["㊂", "㊀", "㊁"]
|
||||||
|
},
|
||||||
|
"toggle11": {
|
||||||
|
"interval": 50,
|
||||||
|
"frames": ["⧇", "⧆"]
|
||||||
|
},
|
||||||
|
"toggle12": {
|
||||||
|
"interval": 120,
|
||||||
|
"frames": ["☗", "☖"]
|
||||||
|
},
|
||||||
|
"toggle13": {
|
||||||
|
"interval": 80,
|
||||||
|
"frames": ["=", "*", "-"]
|
||||||
|
},
|
||||||
|
"arrow": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["←", "↖", "↑", "↗", "→", "↘", "↓", "↙"]
|
||||||
|
},
|
||||||
|
"arrow2": {
|
||||||
|
"interval": 80,
|
||||||
|
"frames": ["⬆️ ", "↗️ ", "➡️ ", "↘️ ", "⬇️ ", "↙️ ", "⬅️ ", "↖️ "]
|
||||||
|
},
|
||||||
|
"arrow3": {
|
||||||
|
"interval": 120,
|
||||||
|
"frames": ["▹▹▹▹▹", "▸▹▹▹▹", "▹▸▹▹▹", "▹▹▸▹▹", "▹▹▹▸▹", "▹▹▹▹▸"]
|
||||||
|
},
|
||||||
|
"bouncingBar": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames": [
|
||||||
|
"[ ]", "[= ]", "[== ]", "[=== ]", "[ ===]", "[ ==]",
|
||||||
|
"[ =]", "[ ]", "[ =]", "[ ==]", "[ ===]", "[====]",
|
||||||
|
"[=== ]", "[== ]", "[= ]"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"bouncingBall": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames": [
|
||||||
|
"( ● )", "( ● )", "( ● )", "( ● )", "( ●)",
|
||||||
|
"( ● )", "( ● )", "( ● )", "( ● )", "(● )"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"smiley": {
|
||||||
|
"interval": 200,
|
||||||
|
"frames": ["😄 ", "😝 "]
|
||||||
|
},
|
||||||
|
"monkey": {
|
||||||
|
"interval": 300,
|
||||||
|
"frames": ["🙈 ", "🙈 ", "🙉 ", "🙊 "]
|
||||||
|
},
|
||||||
|
"hearts": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["💛 ", "💙 ", "💜 ", "💚 ", "❤️ "]
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"interval":
|
||||||
|
100,
|
||||||
|
"frames": [
|
||||||
|
"🕛 ", "🕐 ", "🕑 ", "🕒 ", "🕓 ", "🕔 ", "🕕 ", "🕖 ", "🕗 ", "🕘 ", "🕙 ",
|
||||||
|
"🕚 "
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"earth": {
|
||||||
|
"interval": 180,
|
||||||
|
"frames": ["🌍 ", "🌎 ", "🌏 "]
|
||||||
|
},
|
||||||
|
"material": {
|
||||||
|
"interval":
|
||||||
|
17,
|
||||||
|
"frames": [
|
||||||
|
"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||||
|
"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||||
|
"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁", "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||||
|
"███████▁▁▁▁▁▁▁▁▁▁▁▁▁", "████████▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||||
|
"█████████▁▁▁▁▁▁▁▁▁▁▁", "█████████▁▁▁▁▁▁▁▁▁▁▁",
|
||||||
|
"██████████▁▁▁▁▁▁▁▁▁▁", "███████████▁▁▁▁▁▁▁▁▁",
|
||||||
|
"█████████████▁▁▁▁▁▁▁", "██████████████▁▁▁▁▁▁",
|
||||||
|
"██████████████▁▁▁▁▁▁", "▁██████████████▁▁▁▁▁",
|
||||||
|
"▁██████████████▁▁▁▁▁", "▁██████████████▁▁▁▁▁",
|
||||||
|
"▁▁██████████████▁▁▁▁", "▁▁▁██████████████▁▁▁",
|
||||||
|
"▁▁▁▁█████████████▁▁▁", "▁▁▁▁██████████████▁▁",
|
||||||
|
"▁▁▁▁██████████████▁▁", "▁▁▁▁▁██████████████▁",
|
||||||
|
"▁▁▁▁▁██████████████▁", "▁▁▁▁▁██████████████▁",
|
||||||
|
"▁▁▁▁▁▁██████████████", "▁▁▁▁▁▁██████████████",
|
||||||
|
"▁▁▁▁▁▁▁█████████████", "▁▁▁▁▁▁▁█████████████",
|
||||||
|
"▁▁▁▁▁▁▁▁████████████", "▁▁▁▁▁▁▁▁████████████",
|
||||||
|
"▁▁▁▁▁▁▁▁▁███████████", "▁▁▁▁▁▁▁▁▁███████████",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁██████████", "▁▁▁▁▁▁▁▁▁▁██████████",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁▁▁████████", "▁▁▁▁▁▁▁▁▁▁▁▁▁███████",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████", "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
|
||||||
|
"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
|
||||||
|
"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
|
||||||
|
"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
||||||
|
"██████▁▁▁▁▁▁▁▁▁▁▁▁▁█", "████████▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||||
|
"█████████▁▁▁▁▁▁▁▁▁▁▁", "█████████▁▁▁▁▁▁▁▁▁▁▁",
|
||||||
|
"█████████▁▁▁▁▁▁▁▁▁▁▁", "█████████▁▁▁▁▁▁▁▁▁▁▁",
|
||||||
|
"███████████▁▁▁▁▁▁▁▁▁", "████████████▁▁▁▁▁▁▁▁",
|
||||||
|
"████████████▁▁▁▁▁▁▁▁", "██████████████▁▁▁▁▁▁",
|
||||||
|
"██████████████▁▁▁▁▁▁", "▁██████████████▁▁▁▁▁",
|
||||||
|
"▁██████████████▁▁▁▁▁", "▁▁▁█████████████▁▁▁▁",
|
||||||
|
"▁▁▁▁▁████████████▁▁▁", "▁▁▁▁▁████████████▁▁▁",
|
||||||
|
"▁▁▁▁▁▁███████████▁▁▁", "▁▁▁▁▁▁▁▁█████████▁▁▁",
|
||||||
|
"▁▁▁▁▁▁▁▁█████████▁▁▁", "▁▁▁▁▁▁▁▁▁█████████▁▁",
|
||||||
|
"▁▁▁▁▁▁▁▁▁█████████▁▁", "▁▁▁▁▁▁▁▁▁▁█████████▁",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁▁████████▁", "▁▁▁▁▁▁▁▁▁▁▁████████▁",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁▁▁███████▁", "▁▁▁▁▁▁▁▁▁▁▁▁███████▁",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁▁▁▁███████", "▁▁▁▁▁▁▁▁▁▁▁▁▁███████",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||||
|
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"moon": {
|
||||||
|
"interval": 80,
|
||||||
|
"frames": ["🌑 ", "🌒 ", "🌓 ", "🌔 ", "🌕 ", "🌖 ", "🌗 ", "🌘 "]
|
||||||
|
},
|
||||||
|
"runner": {
|
||||||
|
"interval": 140,
|
||||||
|
"frames": ["🚶 ", "🏃 "]
|
||||||
|
},
|
||||||
|
"pong": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames": [
|
||||||
|
"▐⠂ ▌", "▐⠈ ▌", "▐ ⠂ ▌", "▐ ⠠ ▌",
|
||||||
|
"▐ ⡀ ▌", "▐ ⠠ ▌", "▐ ⠂ ▌", "▐ ⠈ ▌",
|
||||||
|
"▐ ⠂ ▌", "▐ ⠠ ▌", "▐ ⡀ ▌", "▐ ⠠ ▌",
|
||||||
|
"▐ ⠂ ▌", "▐ ⠈ ▌", "▐ ⠂▌", "▐ ⠠▌",
|
||||||
|
"▐ ⡀▌", "▐ ⠠ ▌", "▐ ⠂ ▌", "▐ ⠈ ▌",
|
||||||
|
"▐ ⠂ ▌", "▐ ⠠ ▌", "▐ ⡀ ▌", "▐ ⠠ ▌",
|
||||||
|
"▐ ⠂ ▌", "▐ ⠈ ▌", "▐ ⠂ ▌", "▐ ⠠ ▌",
|
||||||
|
"▐ ⡀ ▌", "▐⠠ ▌"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"shark": {
|
||||||
|
"interval":
|
||||||
|
120,
|
||||||
|
"frames": [
|
||||||
|
"▐|\\____________▌", "▐_|\\___________▌", "▐__|\\__________▌",
|
||||||
|
"▐___|\\_________▌", "▐____|\\________▌", "▐_____|\\_______▌",
|
||||||
|
"▐______|\\______▌", "▐_______|\\_____▌", "▐________|\\____▌",
|
||||||
|
"▐_________|\\___▌", "▐__________|\\__▌", "▐___________|\\_▌",
|
||||||
|
"▐____________|\\▌", "▐____________/|▌", "▐___________/|_▌",
|
||||||
|
"▐__________/|__▌", "▐_________/|___▌", "▐________/|____▌",
|
||||||
|
"▐_______/|_____▌", "▐______/|______▌", "▐_____/|_______▌",
|
||||||
|
"▐____/|________▌", "▐___/|_________▌", "▐__/|__________▌",
|
||||||
|
"▐_/|___________▌", "▐/|____________▌"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dqpb": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["d", "q", "p", "b"]
|
||||||
|
},
|
||||||
|
"weather": {
|
||||||
|
"interval":
|
||||||
|
100,
|
||||||
|
"frames": [
|
||||||
|
"☀️ ", "☀️ ", "☀️ ", "🌤 ", "⛅️ ", "🌥 ", "☁️ ", "🌧 ", "🌨 ", "🌧 ",
|
||||||
|
"🌨 ", "🌧 ", "🌨 ", "⛈ ", "🌨 ", "🌧 ", "🌨 ", "☁️ ", "🌥 ", "⛅️ ", "🌤 ",
|
||||||
|
"☀️ ", "☀️ "
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"christmas": {
|
||||||
|
"interval": 400,
|
||||||
|
"frames": ["🌲", "🎄"]
|
||||||
|
},
|
||||||
|
"grenade": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames": [
|
||||||
|
"، ", "′ ", " ´ ", " ‾ ", " ⸌", " ⸊", " |", " ⁎", " ⁕",
|
||||||
|
" ෴ ", " ⁓", " ", " ", " "
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"point": {
|
||||||
|
"interval": 125,
|
||||||
|
"frames": ["∙∙∙", "●∙∙", "∙●∙", "∙∙●", "∙∙∙"]
|
||||||
|
},
|
||||||
|
"layer": {
|
||||||
|
"interval": 150,
|
||||||
|
"frames": ["-", "=", "≡"]
|
||||||
|
},
|
||||||
|
"betaWave": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames": [
|
||||||
|
"ρββββββ", "βρβββββ", "ββρββββ", "βββρβββ", "ββββρββ", "βββββρβ",
|
||||||
|
"ββββββρ"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"fingerDance": {
|
||||||
|
"interval": 160,
|
||||||
|
"frames": ["🤘 ", "🤟 ", "🖖 ", "✋ ", "🤚 ", "👆 "]
|
||||||
|
},
|
||||||
|
"fistBump": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames": [
|
||||||
|
"🤜\u3000\u3000\u3000\u3000🤛 ", "🤜\u3000\u3000\u3000\u3000🤛 ",
|
||||||
|
"🤜\u3000\u3000\u3000\u3000🤛 ", "\u3000🤜\u3000\u3000🤛\u3000 ",
|
||||||
|
"\u3000\u3000🤜🤛\u3000\u3000 ", "\u3000🤜✨🤛\u3000\u3000 ",
|
||||||
|
"🤜\u3000✨\u3000🤛\u3000 "
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"soccerHeader": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames": [
|
||||||
|
" 🧑⚽️ 🧑 ", "🧑 ⚽️ 🧑 ", "🧑 ⚽️ 🧑 ", "🧑 ⚽️ 🧑 ",
|
||||||
|
"🧑 ⚽️ 🧑 ", "🧑 ⚽️ 🧑 ", "🧑 ⚽️🧑 ", "🧑 ⚽️ 🧑 ",
|
||||||
|
"🧑 ⚽️ 🧑 ", "🧑 ⚽️ 🧑 ", "🧑 ⚽️ 🧑 ", "🧑 ⚽️ 🧑 "
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"mindblown": {
|
||||||
|
"interval":
|
||||||
|
160,
|
||||||
|
"frames": [
|
||||||
|
"😐 ", "😐 ", "😮 ", "😮 ", "😦 ", "😦 ", "😧 ", "😧 ", "🤯 ", "💥 ", "✨ ",
|
||||||
|
"\u3000 ", "\u3000 ", "\u3000 "
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaker": {
|
||||||
|
"interval": 160,
|
||||||
|
"frames": ["🔈 ", "🔉 ", "🔊 ", "🔉 "]
|
||||||
|
},
|
||||||
|
"orangePulse": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["🔸 ", "🔶 ", "🟠 ", "🟠 ", "🔶 "]
|
||||||
|
},
|
||||||
|
"bluePulse": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["🔹 ", "🔷 ", "🔵 ", "🔵 ", "🔷 "]
|
||||||
|
},
|
||||||
|
"orangeBluePulse": {
|
||||||
|
"interval": 100,
|
||||||
|
"frames": ["🔸 ", "🔶 ", "🟠 ", "🟠 ", "🔶 ", "🔹 ", "🔷 ", "🔵 ", "🔵 ", "🔷 "]
|
||||||
|
},
|
||||||
|
"timeTravel": {
|
||||||
|
"interval":
|
||||||
|
100,
|
||||||
|
"frames": [
|
||||||
|
"🕛 ", "🕚 ", "🕙 ", "🕘 ", "🕗 ", "🕖 ", "🕕 ", "🕔 ", "🕓 ", "🕒 ", "🕑 ",
|
||||||
|
"🕐 "
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"aesthetic": {
|
||||||
|
"interval":
|
||||||
|
80,
|
||||||
|
"frames": [
|
||||||
|
"▰▱▱▱▱▱▱", "▰▰▱▱▱▱▱", "▰▰▰▱▱▱▱", "▰▰▰▰▱▱▱", "▰▰▰▰▰▱▱", "▰▰▰▰▰▰▱",
|
||||||
|
"▰▰▰▰▰▰▰", "▰▱▱▱▱▱▱"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
} # }}}
|
||||||
|
|
||||||
|
|
||||||
|
class Spinner:
|
||||||
|
|
||||||
|
def __init__(self, name: str = 'dots'):
|
||||||
|
definition = spinners[name]
|
||||||
|
self.interval = definition['interval'] / 1000
|
||||||
|
self.frames = definition['frames']
|
||||||
|
self.current_frame = -1
|
||||||
|
self.last_change_at = -self.interval
|
||||||
|
|
||||||
|
def __call__(self) -> str:
|
||||||
|
now = monotonic()
|
||||||
|
if now - self.last_change_at >= self.interval:
|
||||||
|
self.last_change_at = now
|
||||||
|
self.current_frame = (self.current_frame + 1) % len(self.frames)
|
||||||
|
return self.frames[self.current_frame]
|
||||||
Reference in New Issue
Block a user