Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 02-12-2019 18:46:57

Elzen
Membre
Distrib. : Debian Sid GNU/Linux
Noyau : amd64 (à jour le vendredi)
(G)UI : Touhy
Inscription : 01-07-2014

Un script pour visualiser des choses dans le terminal

Plop les gens o/

Je suis en train de bosser, pour le fun, sur un script (en Python) permettant de visualiser des choses diverses dans le terminal. Dans ce genre-là :

1575307040.png

Comme vous pouvez le voir, pour l'instant, ça sait afficher le contenu des répertoires (un simple ls -lAH), du texte brut ('pas le plus compliqué, en même temps), et des images (j'ai un peu hésité à utiliser la libcaca qui est faite pour ça, mais c'était fun de bricoler quelque chose à la main, donc j'ai fait ça. Ça utilise PIL, et le rendu est plutôt chouette, je trouve), en provenance de fichiers sur le disque ou d'un presse-papier (Je pense rajouter aussi la possibilité de lire des URL en HTTP(S), ça n'est pas tellement plus compliqué).

C'est déjà pas mal du tout (et c'est assez fun de se passer un répertoire plein d'images dans le désordre pour voir si on arrive à les reconnaître :-°), mais, bien sûr, pour en faire un afficheur universel, il manquerait encore pas mal de choses. Notamment, me viennent en tête comme ça :

– Du code. Ce serait fun d'avoir de la coloration syntaxique, mais ça risque de demander du taff, il faudrait que je regarde comment font, par exemple, les outils pour HTML comme celui qu'on a sur ce site.

– Du HTML, en affichant le texte formaté résultant. Pour ça, comme il existe des navigateurs en mode texte, je me disais que je n'avais pas forcément à recoder le truc moi-même. Sauf que, quand j'utilise w3m en mode interactif, il me met des jolies couleurs et du formatage partout, c'est chouette (par exemple, le texte entre <em> est souligné, celui entre <strong> est en gras, tout ça); par contre, quand je l'utilise avec -dump, ce joli formatage-là disparaît. Si quelqu'un sait comment régler ça ou connaît un autre outil pour faire la même chose, je prends smile

– Du PDF. Peut-être juste en passant un coup de pdf2txt (voire de pdftocairo pour afficher ça sous forme d'image, vu que j'ai des images qui marchent), mais s'il y avait moyen d'avoir un truc un peu bien formaté, ce ne serait pas plus mal (il me semble que vim arrive à faire ça pas trop mal, il faudrait regarder comment)

– Des archives (en listant les fichiers présents à l'intérieur, déjà, je n'vais pas forcément aller jusqu'à faire des aperçus en profondeur, ça peut être long et pas forcément intéressant…)

– Des mails. Avec visualisation des pièces jointes, bien sûr :-°

Autre point: ça vise aussi à être capable de déchiffrer à la volée le contenu demandé en cas de besoin (pour l'instant, ça gère les deux/trois fichiers que j'ai sur mon disque qui ont été chiffrés avec openssl, il faudra que je rajoute du support pour gpg et quelques autres trucs de ce genre).

Si vous avez d'autres idées et/ou des suggestions sur comment arriver à coder ce qui est déjà dans la liste, n'hésitez pas wink (Je poste ça dans « Débuter avec la ligne de commande » parce que, pour pas mal de choses, on va tâcher de ne pas réinventer la roue, et donc la question est surtout « est-ce que vous connaissez un outil qui fait déjà le taff, qu'on n'ait qu'à l'utiliser ? », mais si vous trouvez que ça aurait plus sa place ailleurs, déplaçons).

Oh, pour les gens qui veulent jeter un œil à l'état actuel,

git clone git://fadrienn.irlnc.org/elzapps/show



(Ça fait partie d'un projet plus vaste contenant d'autres sortes d'applis étranges du même style, mais on en reparlera en temps utile)

Dernière modification par Elzen (02-12-2019 18:52:09)

En ligne

#2 12-12-2019 19:34:05

Elzen
Membre
Distrib. : Debian Sid GNU/Linux
Noyau : amd64 (à jour le vendredi)
(G)UI : Touhy
Inscription : 01-07-2014

Re : Un script pour visualiser des choses dans le terminal

Eh beh ça déchaîne les foules ^^

Bon, j'ai progressé un peu depuis, donc des fois que ça intéresserait du monde (auquel cas vous avez le droit de le dire, hein !), un petit changelog depuis la dernière fois.

– J'ai ajouté la décompression à la volée, les formats .gz, .bz2 et .xz sont gérés (pour peu que vous ayez l'utilitaire adéquat dans $PATH). J'ai aussi ajouté le support de la lecture par le réseau (http(s) ou ftp, c'est de base en Python donc ça se faisait tout simplement). J'ai aussi ajouté un fichier de conf' pour régler certaines couleurs, et pas mal d'autres modifs internes pour rendre le truc plus facilement évolutif.

– En fait, en relisant la doc', j'ai trouvé moyen d'afficher les images de façon encore plus chouette. Du coup, le quadrillage de fond tel que montré ci-dessus disparaît pour la transparence, mais on gagne pas mal en qualité (ainsi qu'en rapidité d'affichage, d'ailleurs, curieusement). Un bon train valant mieux que de longs discours, voici une image d'origine de l'Orient Express, et voici comment elle s'affiche chez moi, dans un simple xterm (en plein écran mais à résolution raisonnable) :

1576173760.png 1576173798.png

Pas mal, non ? smile

(Bon, évidemment, dans un TTY qui n'a pas autant de couleurs, c'est un poil moins beau, forcément. Mais je suis curieux de voir ce que ça rend dans les terminaux que vous utilisez, donc n'hésitez pas à poster des captures si vous voulez)

– J'ai aussi ajouté une option pour sélectionner le pager utilisé. Avec --pager=none (par défaut si vous pipez la sortie vers autre chose), ça affiche simplement tous les fichiers que vous demandez, les uns à la suite des autres. Avec --pager=wait (par défaut si vous ne redirigez pas la sortie), ça affiche les fichiers les uns à la suite des autres, mais ça vous demande de saisir une confirmation pour passer au suivant. Avec --pager=less, chaque fichier est affiché comme si vous l'aviez pipé vers less (en gardant les couleurs et le formatage), mais on a donc bien un less indépendant par fichier et pas un seul less avec tout.

J'aimerais bien rajouter une option --pager=auto, qui afficherait le début du fichier sur la sortie standard, puis, si ça commence à dépasser la taille du terminal, abandonne et passe dans less (ou un équivalent). Techniquement, je vois comment faire. Ce qui m'ennuie, c'est que les deux façons de faire n'auraient pas le même comportement (mon wait qu'on tape entrée, en ayant ou pas spécifié Y ou N, less attend qu'on tape Q pour quitter), et je ne suis pas sûr que changer de façon de manier le truc en cours de route soit bien, donc il faudrait voir pour un less-like un peu plus proche du comportement standard, si ça existe.

– Et puis, faute d'avoir trouvé un navigateur en mode texte fonctionnant comme je veux (cf message précédent), j'ai fini par recoder moi-même un truc qui me sort un résultat à peu près potable. Encore une fois, très expérimental, je suis preneur de tout retour (mais ça reste très personnalisable, il y a d'ailleurs un fichier CSS à modifier pour le rendu des balises).

Notez d'ailleurs que vous avez plusieurs choix, à ce niveau-là : de base, ça vous affiche le texte de la page avec des petits numéros derrière les liens, puis, dans une deuxième étape (et donc un deuxième less si vous avez spécifié l'option concernée), ça vous affiche la liste, numérotée, des liens, pour que vous puissiez retrouver l'adresse que vous aviez repéré en première lecture. Mais vous pouvez aussi demander à afficher le fichier en ajoutant à son chemin d'accès le suffixe « [full] », et dans ce cas, en plus de la CSS par défaut, ça essayera d'aller charger le style précisé dans le fichier, donc avec les couleurs de fond/d'arrière plan et autres instructions plus ou moins étrange. Ce rendu-là n'est pas par défaut, parce que c'est généralement plus bizarre en terminal ^^

Le coup d'ajouter un suffixe est d'ailleurs pris en compte pour tous types de fichier : demandez « [raw] » pour avoir le fichier brut (donc pour du HTML ou du SVG, le code XML de base, sans le transformer en texte ou en image. Une coloration syntaxique sera ajoutée un jour…) ou « [metadata] » pour afficher les méta-données sur le fichier. On peut aussi demander plusieurs choses successivement, par exemple « [full:links] » pour afficher une page HTML avec tout son style, puis sa liste de liens.


Au fait, vu que je n'ai toujours pas eu le courage d'écrire un readme digne de ce nom dans le git, quelques infos supplémentaires sur les dépendances, ça manquait : c'est codé en Python 3, et le truc utilise magic pour repérer de quel type de fichier il s'agit. C'est normalement la seule dépendance totalement requise : pour toutes les autres, si vous ne les avez pas, le script général devrait fonctionner, mais le support des fichiers ayant besoin de la dépendance manquante sera désactivé. Et donc, les dépendances optionnelles sont : PIL pour lire les images, d'une façon générale, plus cairosvg pour lire spécifiquement les SVG ; bs4 (aka BeautifulSoup, version 4) et cssutils pour lire les fichiers HTML ; XLib pour la gestion des presses-papiers. En l'état, je crois que c'est tout, râlez si j'ai oublié quelque chose.
Pour installer les dépendances manquantes, ç'facile, on est sous Debian, donc « apt install python3-x » pour chaque bibliothèque X, vous savez ^^

Dernière modification par Elzen (12-12-2019 19:39:04)

En ligne

Pied de page des forums