Des icônes dans le terminal : logos (Apple, Python, GitHub…), fichiers, dossiers, batterie, flèches, météo… Ce sont des caractères spéciaux des Nerd Fonts : ils s'écrivent comme du texte, se colorent comme du texte, et tiennent dans un print.
from simplesuit import icons as si
print(si.apple, si.python, si.github) # Raccourci : le nom de l'icôneprint(si.icon("python")) # Pareil, avec le nom en texteprint(si.icon("heart", "crimson")) # En couleur (un nom ou HEX de simplesuit.colors)print(si.icon("check", "mint", styles="bold")) # + styleprint(f"{si.folder} Documents {si.file_pdf} cours.pdf")
📌icon() ou le raccourci ?
si.apple est le plus court. si.icon("apple") sert quand le nom est dans une variable, ou pour ajouter une couleur d'un coup.
si.file_icon(chemin) donne l'icône d'un dossier, ou celle d'un fichier selon son extension (.py, .js, .json, .md, .pdf, .png, .mp3, .zip, .sh…, sinon une icône de fichier). Parfait pour faire son propre ls :
python
import os
from simplesuit import icons as si
for nom insorted(os.listdir(".")):
print(si.file_icon(nom), nom)
🪤Un dossier n'est reconnu que s'il existe
file_icon regarde le disque pour savoir si c'est un dossier : un chemin qui n'existe pas (ou relatif au mauvais endroit) est traité comme un fichier.
si.spinner(i) donne l'image n°i d'un cercle qui tourne ; elle revient au début toute seule.
python
import time
from simplesuit import icons as si
for i inrange(30):
print(f"\r{si.spinner(i)} Chargement…", end="", flush=True)
time.sleep(0.1)
print("\r" + si.check + " Terminé ! ")
💡Le \r
\r ramène le curseur au début de la ligne sans en créer une nouvelle : chaque image remplace la précédente. Ajoute quelques espaces à la fin du dernier texte pour effacer les restes d'un texte plus long.
si.search("arrow") # ['arrow_right', 'arrow_left', 'arrow_up', 'arrow_down']
si.show_icons() # Les 109 icônes, avec leur nom
si.show_icons("file") # Seulement celles qui contiennent "file"
Une faute de frappe ? Le message propose les bons noms :
La constante ICONS montre toutes les icônes (avec la police déjà chargée sur ce site) : un clic copie le nom.
Il me faut une icône qui n'est pas dans la liste
Toute icône Nerd Font est un caractère : trouve son code sur nerdfonts.com/cheat-sheet et écris-le directement, par exemple "". Les couleurs de simplesuit.colors marchent dessus aussi.
Exemples
Les icônes
Des icônes Nerd Font par leur nom, avec une couleur si tu veux. ⚠️ Il faut une Nerd Font dans le terminal (sinon : des carrés vides).
icones.py
from simplesuit import icons as si
print(si.icon("python", "yellow"), "Python")
print(si.icon("apple"), si.icon("linux"), si.icon("windows"))
print(si.icon("heart", "crimson", styles="bold"), "avec un style")
print(si.github, "raccourci : si.github au lieu de si.icon('github')")
print(si.search("arrow")) # ['arrow_right', 'arrow_left', 'arrow_up', 'arrow_down']
Batterie et fichiers
La bonne icône selon le niveau de batterie, ou selon le type de fichier.
batterie_et_fichiers.py
from simplesuit import icons as si
for niveau in (95, 70, 40, 15, 5):
print(si.battery(niveau), f"{niveau} %")
print(si.battery(50, plugged=True), "en charge")
for fichier in ("main.py", "photo.png", "notes.md", "archive.zip", "."):
print(si.file_icon(fichier), fichier)
Animation de chargement
spinner(i) donne l'image n°i d'un cercle qui tourne : à afficher en boucle.
spinner.py
import time
from simplesuit import icons as si
for i inrange(30):
print(f"\r{si.spinner(i)} Chargement…", end="", flush=True)
time.sleep(0.08)
print(f"\r{si.icon('check', 'lime')} Terminé ! ")
Jauge de batterie en couleur
sys donne les chiffres, colors et icons les mettent en forme.
jauge_batterie.py
from simplesuit import colors as sc
from simplesuit import icons as si
from simplesuit import sys as ss
niveau = ss.battery()
if niveau isNone:
print("Pas de batterie sur cet ordinateur")
else:
couleur = "lime"if niveau > 50else"orange"if niveau > 20else"red"
barre = "█" * (niveau // 5) + "░" * (20 - niveau // 5)
reste = ss.time_left_text() or"-"print(si.battery(niveau, ss.plugged()), sc.color(barre, couleur), f"{niveau} % (reste {reste})")
Une bannière de démarrage
Un dégradé sur des lignes de ═ autour d'un titre : 3 lignes pour un démarrage qui a de la gueule.
banniere.py
from simplesuit import colors as sc
from simplesuit import icons as si
LARGEUR = 40
titre = f" {si.rocket} mon super programme {si.rocket} "print(sc.gradient("═" * LARGEUR, "cyan", "magenta"))
print(sc.gradient(titre.center(LARGEUR), "cyan", "magenta", styles="bold"))
print(sc.gradient("═" * LARGEUR, "magenta", "cyan"))
print(sc.color("v1.0 · tape help pour l'aide".center(LARGEUR), "gray", styles="italic"))
Mini tableau de bord
Toutes les secondes : on efface l'écran, puis on affiche les infos avec des icônes et des couleurs. Ctrl+C pour quitter.
tableau_de_bord.py
import time
from simplesuit import colors as sc
from simplesuit import icons as si
from simplesuit import sys as ss
# Une barre de progression colorée selon le niveau (vert, orange, rouge)defbarre(pourcentage, largeur=20):
plein = round(pourcentage / 100 * largeur)
couleur = "mint"if pourcentage < 60else"orange"if pourcentage < 85else"tomato"return sc.color("█" * plein, couleur) + sc.color("░" * (largeur - plein), "dimgray")
try:
whileTrue:
cpu, ram, disque = ss.cpu(), ss.ram(), ss.disk() # cpu() attend 0,3 s : c'est notre pauseprint("\033[2J\033[H", end="") # Effacer l'écran, curseur en hautprint(sc.gradient(f" {ss.hostname()} ", "cyan", "magenta", styles="bold"), "\n")
print(f"{si.cpu} CPU {barre(cpu)} {cpu:5.1f} %")
print(f"{si.memory} RAM {barre(ram)} {ram:5.1f} % {ss.ram_used()}")
print(f"{si.disk} Disque {barre(disque)} {disque:5.1f} % {ss.disk_free()} libres")
if ss.battery() isnotNone:
print(f"{si.battery(ss.battery(), bool(ss.plugged()))} Batterie {ss.battery()} %")
print(sc.color(f"\nAllumé depuis {ss.uptime_text()} · Ctrl+C pour quitter", "gray"))
time.sleep(0.7)
exceptKeyboardInterrupt:
print()
Son propre ls, avec des icônes
file_icon() choisit l'icône selon le type : dossier, .py, .json, .md, image, musique… Les dossiers en bleu et en premier, les tailles alignées à droite.
mon_ls.py
import os
from simplesuit import colors as sc
from simplesuit import icons as si
from simplesuit import sys as ss
noms = sorted(os.listdir("."), key=lambda n: (not os.path.isdir(n), n.lower()))
for nom in noms:
if nom.startswith("."):
continueif os.path.isdir(nom):
print(sc.color(f"{si.file_icon(nom)} {nom}/", "cornflowerblue", styles="bold"))
else:
taille = ss.human_size(os.path.getsize(nom))
print(f"{si.file_icon(nom)} {nom:<30} {sc.color(f'{taille:>9}', 'gray')}")
Magie : permet d'écrire si.apple au lieu de si.icon("apple")
Python appelle cette fonction quand on demande un nom qui n'existe pas dans le module
Voir le code
python
def__getattr__(name):
if name in ICONS:
return ICONS[name]
raiseAttributeError(f"module 'simplesuit.icons' has no attribute '{name}'" + _suggest(name))