- lsix est un script Bash qui, comme
ls, affiche des images sous forme de miniatures dans le terminal à partir du répertoire courant ou d’une liste de fichiers spécifiée, en utilisant des graphiques Sixel pour la sortie
- Il s’appuie sur ImageMagick pour gérer de nombreux formats d’image et, si un GIF ou un fichier contenant plusieurs images est indiqué en ligne de commande, il déplie les images en une mosaïque
- Il détecte la prise en charge de Sixel par le terminal, les couleurs de premier plan et d’arrière-plan, la possibilité d’étendre les registres de couleur et la largeur de la fenêtre afin d’ajuster la qualité et la disposition des miniatures
- L’installation consiste à placer le fichier
lsix dans votre chemin et à disposer d’ImageMagick ; sur macOS, brew install lsix permet aussi d’installer ImageMagick
- XTerm a le mode Sixel désactivé par défaut et certains terminaux ne sont pas compatibles ; il faut donc vérifier avant usage qu’il s’agit bien d’un terminal compatible Sixel
Un outil de liste d’images dans le terminal, à la manière de ls
- lsix est un outil proche de
ls pour les images, qui affiche les miniatures de fichiers directement dans le terminal
- Son mode d’exécution de base est simple
- Tapez simplement
lsix pour afficher les images du répertoire de travail courant
- Vous pouvez préciser des noms de fichiers sous la forme
lsix [ FILES ... ]
- Les jokers du shell sont pris en charge, ce qui permet des commandes comme
lsix *jpg * png
- La sortie utilise des graphiques Sixel
Gestion des formats et mode d’affichage avec ImageMagick
- Comme ImageMagick est utilisé, de nombreux formats d’image sont pris en charge
- Les formats dont le rendu peut être lent, comme les PDF, ne sont pas affichés sauf demande explicite
- Pour forcer l’énumération d’un format particulier, indiquez directement le nom de fichier ou utilisez un joker comme
*.pdf
- Si un GIF ou un fichier contenant plusieurs images est indiqué en ligne de commande, toutes les images sont dépliées et affichées en mosaïque
- Pour les GIF, certaines images peuvent ne stocker que les pixels modifiés par rapport à l’image précédente
- Les graphiques non bitmap peuvent aussi fonctionner
- Exemples :
.svg, .eps, .pdf, .xcf
Détection de l’environnement du terminal
- lsix utilise des séquences de contrôle pour détecter si le terminal peut afficher des graphiques Sixel en ligne
- Les canaux alpha des PNG et SVG sont traités en fonction de la couleur de fond du terminal
- lsix essaie de récupérer les couleurs de premier plan et d’arrière-plan via les séquences d’échappement du terminal
- La couleur de premier plan est utilisée comme couleur de remplissage du texte
- Si un terminal comme xterm capable d’augmenter le nombre de registres de couleur est détecté, lsix les étend automatiquement pour améliorer la qualité d’image
- Sur les terminaux prenant en charge dtterm WindowOps, le nombre de tuiles par ligne est ajusté à la largeur de la fenêtre
- Lorsqu’un répertoire contient beaucoup d’images, lsix évite d’attendre la génération de toute la mosaïque
- S’il y a plus de 21 images, elles sont affichées ligne par ligne
- Si les noms de fichiers sont trop longs, le texte est renvoyé à la ligne avant d’être transmis à ImageMagick
montage
- En utilisant
montage sans lsix, les noms de fichiers longs peuvent se chevaucher
- Les noms de fichiers Unicode fonctionnent si la police utilisée contient les glyphes nécessaires
Installation et configuration
- Pour l’installation, il suffit de placer le fichier
lsix dans un chemin comme /usr/local/bin puis de l’exécuter
- lsix est un script shell Bash
- Le seul logiciel requis est ImageMagick
- Exemple :
apt-get install imagemagick
- Les utilisateurs macOS peuvent utiliser
brew install lsix
- Si nécessaire, ImageMagick sera également installé
- La conception actuelle est volontairement très simple
- Aucun drapeau en ligne de commande
- Aucun fichier de configuration
- Aucun réglage dédié
- Des valeurs comme la largeur des tuiles, la famille de polices ou la taille en points peuvent être modifiées en changeant les variables en haut du fichier
- La liste des polices installées peut être consultée avec
convert -list font
Exigences des terminaux compatibles Sixel
- Le terminal doit prendre en charge les graphiques Sixel
- Vous pouvez tester votre terminal en affichant une image unique au format Sixel
convert foo.jpg -geometry 800x480 sixel:-
- Le développement a été effectué avec le mode d’émulation vt340 de xterm
- XTerm n’active pas le mode Sixel par défaut
- Au lancement, vous pouvez utiliser
xterm -ti vt340
- Ou ajouter
xterm*decTerminalID : vt340 à .Xresources, puis exécuter xrdb -merge .Xresources
- Certaines distributions comme Fedora peuvent compiler
xterm sans prise en charge de Sixel
- Dans ce cas, vous pouvez essayer un autre terminal comme
foot ou mlterm
Terminaux compatibles et incompatibles
- Terminaux confirmés ou signalés comme compatibles avec Sixel
- XTerm, MLterm, foot, Wezterm, Contour, iTerm2 for Apple MacOS, Yaft ont été testés
- Konsole, yakuake, WSLtty for Microsoft Windows, MinTTY for Cygwin, compilation spéciale de VTE, sixel-tmux, ttyd ont été signalés
- Terminaux incompatibles avec Sixel
- MacOS Terminal, kitty
- Terminaux standard basés sur libvte
- gnome-terminal
- terminator
- lxterm
- Alacritty peut fonctionner si ce patch est appliqué
Bugs connus et limites
- Le mode reverse video de XTerm,
xterm -rv, n’est pas équivalent à une définition explicite des couleurs de premier plan et d’arrière-plan
- Une définition explicite peut être détectée, mais la ressource reverseVideo ne peut pas l’être, ce qui peut entraîner une couleur de fond incorrecte
- La largeur d’affichage de XTerm est actuellement limitée à 1000 px
- Cette limite sera retirée quand xterm pourra gérer des images de plus de 1000x1000
- Le dernier test a été réalisé avec XTerm(344)
- Les noms de fichiers commençant par
@ sont traités spécialement par ImageMagick
- Il faut alors préfixer le nom par un répertoire, comme
lsix ./@foo.png
- Il s’agit d’un bug d’ImageMagick, pas de lsix
- Si une chaîne vide
"" est donnée comme nom de fichier, ImageMagick se bloque
- Cela semble être un bug ou un comportement incorrect d’ImageMagick
- Le renvoi à la ligne des noms de fichiers longs fonctionne, mais reste rudimentaire
- Le renvoi à la ligne selon les espaces, tirets, underscores ou points n’est pas encore implémenté
- Si un répertoire est indiqué en ligne de commande, lsix se comporte comme si l’utilisateur avait fait
cd dans ce répertoire
- Le traitement récursif ne serait pas difficile, mais l’auteur hésite à ajouter des drapeaux en ligne de commande à un script volontairement simple
- L’exécution de
lsix foo.avi peut poser problème
Norme Sixel et limites d’implémentation
- La norme Sixel ne semble pas fournir de moyen pour interroger la taille de l’écran graphique
- D’après la documentation VT340, le programme est censé déjà connaître la résolution du périphérique de rendu
- XTerm 344 ajoute pour cela la séquence de contrôle
CSI ? Pi ; Pa ; Pv S
- Certains terminaux, comme
mlterm, ne l’implémentent pas encore
- L’extension dtterm WindowOps offre une alternative pour lire la taille de la fenêtre
- La géométrie de l’écran graphique Sixel et la taille de la fenêtre ne coïncident pas forcément, ce n’est donc pas une solution exacte
- Par exemple, xterm limite la géométrie graphique à 1000x1000 même si la fenêtre est plus grande
- Si ces deux méthodes échouent, lsix suppose un environnement VT340
- Résolution de 800x480
- Avec l’hypothèse de 6 tuiles par ligne
- La norme Sixel ne fournit pas non plus de moyen pour interroger le nombre de registres de couleur disponibles
- lsix utilise une extension de xterm
- Si le terminal ne répond pas, lsix suppose un VT340 d’origine et n’utilise que 16 registres de couleur
Pourquoi ne pas utiliser libsixel
- libsixel est un projet qui génère des commandes graphiques Sixel optimisées
- lsix utilise Bash et ImageMagick au lieu de libsixel
- Le choix vise à s’appuyer sur Bash et ImageMagick, largement disponibles, pour fonctionner facilement partout
- Cela permet aussi de garder le script simple afin que les utilisateurs puissent facilement le modifier et l’étendre
- ImageMagick peut lire davantage de formats d’entrée que
stb_image, utilisé par img2sixel de libsixel
- Exemples : xpm, svg, png 16 bits, fichiers sixel
- ImageMagick peut lire l’entrée et écrire directement une sortie Sixel
- libsixel peut être plus rapide, mais pour une simple liste de répertoire, ImageMagick est déjà assez rapide
Références
1 commentaires
Commentaires sur Hacker News
Si, comme moi, vous avez du mal à utiliser un terminal sans tmux, la branche Sixel, qui était expérimentale, a finalement été fusionnée il y a environ 10 mois
On peut maintenant compiler la branche principale de tmux avec
--enable-sixelet utiliser des outils commelsixdans tmuxSi vous voulez savoir si votre terminal ou multiplexeur de terminal préféré prend en charge Sixel, consultez le site « Are We Sixel Yet »
https://github.com/tmux/tmux/commit/dfbc6b1888c110cf0ade66f2...
https://www.arewesixelyet.com
Si vous avez envie de changer votre workflow, je trouve que l’expérience prête à l’emploi est bien meilleure que tmux
Des fonctionnalités que j’aurais auparavant ajoutées avec des plugins externes et des scripts de configuration complexes sont intégrées par défaut, et la stabilité comme les performances ont été nettement meilleures
https://zellij.dev/
Pouvez-vous expliquer pourquoi cela devient un outil indispensable dans un workflow, et pourquoi cela pourrait aussi devenir indispensable dans le mien ?
Est-ce un changement du genre faire entrer un gestionnaire de fenêtres empilées dans tmux, par rapport au mode de tuilage actuel ? Ou est-ce simplement une amélioration des graphismes dans le terminal ? Est-ce que je comprends complètement de travers ?
Si c’est juste une amélioration graphique, je ne vois pas trop pourquoi tmux doit le prendre en charge ; le plus important me semblerait être côté émulateur de terminal, comme Gnome Terminal. Il faut peut-être les deux, mais je pensais que tmux n’avait qu’à laisser passer
brew?La fonctionnalité que je préfère dans ce dépôt, c’est le répertoire
README.md.dC’est une assez bonne idée, et on pourrait probablement se passer du
.mdComme ça, un simple
cat READMEpourrait afficher les images telles quellesLa prise en charge de Sixel est détectée automatiquement avec
"\e[c"https://github.com/hackerb9/lsix/blob/3a431793a747df3f934051...
"\e[c"correspond à « send device attributes »https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-F...
L’idée est sympa, mais ça ne fonctionne pas dans PuTTY/KiTTY
Quand on lance
$ lsix, on obtient une erreur indiquant que le terminal ne signale pas la prise en charge des graphismes Sixel, et conseillant d’utiliser un terminal compatible Sixel commexterm -ti vt340, ou de demander aux auteurs du terminal d’ajouter cette prise en chargePour une image seule, on peut tester avec
convert foo.jpg -geometry 800x480 sixel:-, et si le terminal est censé la prendre en charge, le message invite à signaler le bug sur http://github.com/hackerb9/lsix/issuesLe code d’attributs du périphérique s’affiche comme
^[[?6cDommage. Ça aurait été plutôt chouette. Existe-t-il un terminal Windows open source qui prenne en charge Sixel ? Je vois surtout des solutions côté Cygwin ou WSL, et pas grand-chose pour Windows pur
Il est multiplateforme et prend en charge les graphismes Sixel
https://github.com/wez/wezterm
Dans le même genre, il y a aussi timg : https://github.com/hzeller/timg
iTerm2 pour macOS intègre une fonctionnalité similaire, avec moins de charge côté serveur
Au lieu de rendre l’image en Sixel sur le serveur avec de nombreuses bibliothèques d’images, il encode l’image complète en base64, l’envoie au client, et le client détermine le format d’image pour l’afficher localement dans le terminal
https://iterm2.com/documentation-images.html
Sous Linux, j’utilise tel quel le script
imgcatnon modifiéC’est évidemment beaucoup plus rapide qu’une conversion avec ImageMagick, mais j’ai quand même ajouté
lsixà mon répertoirebinIl faut être prudent quand on l’exécute dans un répertoire non fiable
En particulier, tout ce qui analyse des images, comme les PDF, peut être dangereux comme avec d’autres outils, et il faut être encore plus vigilant avec ImageMagick
Si j’ouvre un dossier de téléchargements non fiables dans Gnome Files, qu’il affiche les images qu’il contient et donc les analyse, est-ce un problème de sécurité dont je devrais me soucier ?
Je pensais que des choses comme le JavaScript dans les PDF pouvaient poser problème, mais je n’imaginais pas qu’un simple aperçu puisse être risqué
Le terminal utilisé doit prendre en charge les graphismes Sixel
https://github.com/dheera/python-termgraphics
Il pourrait être intéressant de modifier cette bibliothèque pour en faire une voie de repli
TERM=xterm256-colordoit être compatible… n’est-ce pas ? tousse gnome-terminal toussefzf propose depuis la version 0.44.0 une prise en charge expérimentale des images Sixel dans le volet d’aperçu
Ce n’est pas disponible sous Windows
https://github.com/junegunn/fzf/releases/tag/0.44.0
fzf --preview='fzf-preview.sh {}'fzf --preview 'convert {} -geometry 800x480 sixel:-'Cela nécessite aussi l’installation d’ImageMagick