Merge my branch "wip-porting-my-previous-powerline" (huge reworking with lots of new segments features)
Hello,
Tout d'abord merci pour ce super bout de code !
Ça m'a donné envie de porter et publier la powerline très customisée que j'utilise depuis quelques années et qui est très efficace pour mes besoins.
J'ai donc fait un fork puis une branche pour bosser: https://gitlab.com/mbideau/powerline.bash/-/tree/wip-porting-my-previous-powerline
Sauf que je n'ai fait qu'un seul énorme commit, après avoir terminé le portage ! C'est donc impossible à fusionner en l'état.
Je sais que c'est pas les bonnes pratiques, mais j'avais besoins de voir les limites de ce qu'il était possible de faire techniquement (avec cette base là) avant d'être sûr de vouloir contribuer (et j'ai eu la flemme de faire ça propre avec des petits commits au fur et à mesure).
Je souhaite donc fusionner mes modifications dans l'upstream, et dans ce but je voulais avoir ton ressenti et comment tu souhaitais faire.
Voici les nouvelles fonctionnalités :
- alignement du PS1 à droite (au choix), avec inversion des séparateurs et de l'ordre des segments
- affichage de l'icône de la distribution (en utilisant un script fourni par icons-in-terminal)
- remplacement de deux ou trois icônes incohérentes
- ajout de la colorisation de la ligne de commande (entre PS1 et PS0)
- ajout d'un séparateur vide (utiliser le code 'n' au lieu de 'p' ou 't')
- ajout automatique d'un séparateur fin si le fond entre deux segments est identique (et qu'on ne force pas l'absence de séparateur)
- coloration du "dollar" du prompt et affichage d'un charactère plus joli (selon mes goûts)
Voici les modifications techniques que j'ai faites sur la structure :
- changement de l'indentation (remplacement des tabs par 4 espaces)
- remplacement de l'unique variable globale de retour '__powerline_retval' par deux autres "typées": __powerline_retval_str et __powerline_retval_array
- vérification en début de script de la présence des binaires requis (/optionels)
- s'assurer que la variable USER est bien définie en début de script (pas seulement pour le segment hostname)
- rendre configurable par variable, en début de script, toutes les couleurs utilisées pour les fonds et les polices
- ajout d'un mécanisme de debug global et aussi par segment
- ajout de débug du temps passé à calculer chaque segment si la variable d'environnement DEBUG_TIME est non-vide
Voici les modifications fonctionnelles et techniques que j'ai faites sur les segments existant :
-
hostname:
- limiter les couleurs "aléatoires" de fonds possibles
- utiliser une couleur séparée pour l'utilisateur root
- rendre le arobase moins visible
- détection des systèmes virtualisé (via systemd-detect-virt)
-
pwd:
- renommé en "pwd_parts" (car j'ai ajouté un segment "pwd" qui ne sépare pas en différents segments le chemin)
-
git:
- icône qui indique le type de branche (branche "classique", "tag", ou "commit")
- affichage du détail des informations sur le nombres de fichier à commiter, modifiés, supprimés, etc. présence de stash
Voici les nouveaux segments :
- pwd : un autre affichage du chemin courant, avec une autre manière de le réduire (permettant des copiers-coller)
- svn : même fonctionnalités que celui de git mais adapté à svn
- time : affiche l'heure, et éventuellement un message si une certaine heure est dépassée (chez moi c'est "Go to bed !" ahah)
- os_and_arch : affiche un segment uniquement si l'architecture n'est pas x86_64 ou l'OS n'est pas Linux
- external_msg : permet de parser des fichiers textes d'un certain format et d'afficher des infos dans des segments (pour que des scripts asynchrones puissent produirent des segments)
Parmis les scripts permettant d'alimenter les segments de manière asynchrone voici ceux fournis et fonctionnels :
- fs_usage_per_mount.sh : analyse l'espace disque par point de montage et produire une sortie (texte) si un seuil est atteint
- log_parser.sh : analyse des fichiers logs selon un motif (éventuellement en excluant un autre) et produit une sortie comptant le nombre de motifs trouvés (si au moins un est trouvé)
- system_load.sh : analyse la charge système et produit une sortir si un seuil est atteint
Enfin il y a également un petit script, grep_icons_in_terminal.sh, qui permet de rechercher et afficher des icônes parmi celles d'icons-in-terminal.
Et une petite précision: j'ai essayé de maximiser les performances en évitant d'utiliser des 'subshell' du genre 'sed' ou 'awk'.
Voilà pour le contenu.
Maintenant comment faire ? ...
Je te propose d'y aller petit à petit en travaillant sur une nouvelle branche dans mon propre fork, en reproduisant chaque petite modification pour que tu puisse les merger (avec revue) au fur et à mesure ...
Ça va être laborieux, mais y a pas non-plus 5000 lignes.
Par contre ça me serait beaucoup plus simple si tu acceptais de remplacer les tabs par des espaces
Par ailleurs, je t'invite à tester ma version et à me faire des retours sur les fonctionnalités ou la technique, si tu le souhaite et afin que j'effectue des modifications avant fusion dans l'upstream.
Qu'en dis-tu ?
Si tu as besoin de m'appeler on peut se faire une session Jitsi si tu veux...
Tâches
-
Fixer le type de __powerline_retval
-
shellcheck -
PS1 à droite. -
Personnalisation du dollar. -
Palette de couleurs. light, dark, fade, 16colors, 24bit, etc. -
Colorisation de la ligne de commande. -
Tracer le temps de traitement de chaque segments. -
Changement de certaines icônes incohérentes. -
Segment svn-> #20 -
Segment git_changes, svn_changes, git_sync. -
Segment time -
Segment job -
Segment hostname. -
Segment os_and_arch. -
Segment external_msgs-> #21