4 puan yazan GN⁺ 2024-06-08 | 1 yorum | WhatsApp'ta paylaş
  • lsix, ls gibi geçerli dizindeki veya belirtilen dosya listesindeki görüntüleri terminal içinde küçük resimler olarak gösteren bir Bash betiğidir; çıktıda Sixel grafikleri kullanır
  • ImageMagick kullanarak birçok görüntü biçimini işler; komut satırında GIF veya birden çok görüntü içeren dosyalar belirtilirse kareleri açıp montaj olarak gösterir
  • Terminalin Sixel desteğini, ön plan ve arka plan rengini, renk yazmaçlarının genişletilebilir olup olmadığını ve pencere genişliğini algılayarak küçük resim kalitesini ve yerleşimini ayarlar
  • Kurulum için lsix dosyasını PATH içindeki bir konuma koyup ImageMagick’i hazır etmek yeterlidir; macOS’te brew install lsix ile ImageMagick de birlikte kurulabilir
  • XTerm’de Sixel modu varsayılan olarak kapalıdır ve bazı terminaller uyumlu değildir; bu yüzden gerçek kullanım öncesinde terminalin Sixel uyumlu olup olmadığı kontrol edilmelidir

ls gibi kullanılan terminal görüntü listeleme aracı

  • lsix, görüntüler için lse yakın bir araçtır; terminalde dosya küçük resimlerini satır içinde gösterir
  • Temel kullanım biçimi basittir
    • Yalnızca lsix yazarsanız geçerli çalışma dizinindeki görüntüleri gösterir
    • lsix [ FILES ... ] biçiminde dosya adları belirtebilirsiniz
    • Kabuk joker karakterleri kullanılabildiği için lsix *jpg * png gibi çalıştırmak mümkündür
  • Çıktıda Sixel grafikleri kullanılır

ImageMagick tabanlı biçim işleme ve gösterim yöntemi

  • ImageMagick kullandığı için çok çeşitli görüntü biçimlerini destekler
  • PDF gibi render edilmesi yavaş olabilecek biçimler açıkça istenmedikçe gösterilmez
    • Belirli bir biçimi zorla listelemek için dosya adını doğrudan belirtin veya *.pdf gibi joker karakter kullanın
  • Komut satırında GIF veya birden çok görüntü içeren bir dosya belirtilirse tüm kareler açılıp montaj olarak gösterilir
    • GIF’ler bazı karelerde yalnızca önceki kareye göre değişen pikselleri saklayabilir
  • Bitmap olmayan grafikler de çalışabilir
    • Örn: .svg, .eps, .pdf, .xcf

Terminal ortamını algılama özellikleri

  • lsix, kontrol dizileri kullanarak terminalin Sixel grafiklerini satır içinde gösterip gösteremediğini algılar
  • PNG ve SVG’nin alfa kanalları terminal arka plan rengine göre işlenir
    • lsix, terminal kaçış dizileriyle ön plan ve arka plan rengini öğrenmeye çalışır
    • Ön plan rengi metin dolgu rengi için kullanılır
  • xterm gibi renk yazmacı sayısını artırabilen terminalleri algılarsa görüntü kalitesini yükseltmek için bunu otomatik olarak genişletir
  • dtterm WindowOps destekleyen terminallerde pencere genişliğine göre bir satırdaki karo sayısını ayarlar
  • Dizinde çok sayıda görüntü olduğunda tüm montajın oluşturulmasını bekletmeyecek şekilde işlem yapar
    • Görüntü sayısı 21’den fazlaysa satır satır gösterir
  • Dosya adı çok uzunsa ImageMagick montagee geçirmeden önce metni satırlara böler
    • lsix olmadan montage kullanılırsa uzun dosya adları birbirinin üzerine binebilir
  • Unicode dosya adları, kullanılan yazı tipinde glif varsa çalışır

Kurulum ve yapılandırma yöntemi

  • Kurulum için lsix dosyasını /usr/local/bin gibi bir yola koyup çalıştırmak yeterlidir
  • lsix bir Bash kabuk betiğidir
  • Gerekli tek yazılım ImageMagick’tir
    • Örn: apt-get install imagemagick
  • macOS kullanıcıları brew install lsix kullanabilir
    • Gerekirse ImageMagick de birlikte kurulur
  • Mevcut tasarım çok basittir
    • Komut satırı bayrağı yok
    • Yapılandırma dosyası yok
    • Ayar düğmesi yok
  • Karo genişliği, yazı tipi ailesi, punto boyutu gibi değerler dosyanın üst kısmındaki değişkenler düzenlenerek değiştirilebilir
    • Kurulu yazı tiplerinin listesi convert -list font ile görülebilir

Sixel destekli terminal gereksinimi

  • Terminalin Sixel grafiklerini desteklemesi gerekir
  • Tek bir görüntüyü Sixel olarak çıktılayıp terminali test edebilirsiniz
convert foo.jpg -geometry 800x480 sixel:-
  • Geliştirme için xterm’in vt340 emülasyon modu kullanılmıştır
  • XTerm’de Sixel modu varsayılan olarak açık değildir
    • Çalıştırırken xterm -ti vt340 kullanılabilir
    • Ya da .Xresources dosyasına xterm*decTerminalID : vt340 ekleyip xrdb -merge .Xresources çalıştırılabilir
  • Fedora gibi bazı dağıtımlar xtermi Sixel desteği olmadan derleyebilir
    • Bu durumda foot veya mlterm gibi alternatif terminaller denenebilir

Uyumlu ve uyumsuz terminaller

  • Sixel uyumlu olduğu doğrulanan veya bildirilenler
    • XTerm, MLterm, foot, Wezterm, Contour, Apple MacOS için iTerm2, Yaft test edilmiştir
    • Konsole, yakuake, Microsoft Windows için WSLtty, Cygwin için MinTTY, özel derlenmiş VTE, sixel-tmux, ttyd bildirilmiştir
  • Sixel uyumlu olmayan terminaller
    • MacOS Terminal, kitty
    • Standart libvte tabanlı terminaller
      • gnome-terminal
      • terminator
      • lxterm
    • Alacritty, yama uygulanırsa çalışabilir

Bilinen hatalar ve kısıtlar

  • XTerm’in reverse video modu olan xterm -rv, ön plan ve arka plan renklerini açıkça belirtmekle aynı değildir
    • Açık belirtimi algılamanın yolu vardır; ancak reverseVideo kaynağı algılanamadığı için arka plan rengi yanlış olabilir
  • XTerm’in ekran genişliği şu anda 1000px ile sınırlıdır
    • xterm 1000x1000’den büyük görüntüleri işleyebilir hale geldiğinde bu sınır kaldırılacaktır
    • Son test XTerm(344) temel alınarak yapılmıştır
  • @ ile başlayan dosya adları ImageMagick’te özel olarak ele alınır
    • lsix ./@foo.png gibi başına dizin eklemek gerekir
    • Bu lsix değil, ImageMagick hatasıdır
  • Dosya adı olarak boş dize "" belirtilirse ImageMagick takılır
    • ImageMagick hatası veya hatalı davranış gibi görünmektedir
  • Uzun dosya adlarını satırlara bölme çalışır ama akıllı değildir
    • Boşluk, tire, alt çizgi, nokta temelinde satır bölme henüz uygulanmamıştır
  • Komut satırında dizin belirtilirse kullanıcı o dizine cd yapmış gibi işlenir
    • Özyinelemeli işleme zor değildir; ancak basit bir betiğe komut satırı bayrakları eklemekten kaçınılmaktadır
  • lsix foo.avi çalıştırmak sorunlara yol açabilir

Sixel standardı ve uygulama sınırlamaları

  • Sixel standardında grafik ekran boyutunu sorgulamanın bir yolu yok gibi görünmektedir
  • VT340 belgelerine göre programın render hedef aygıtının çözünürlüğünü önceden biliyor olması gerekir
  • XTerm 344, bu sorunu çözen CSI ? Pi ; Pa ; Pv S kontrol dizisini eklemiştir
    • mlterm gibi bazı terminaller bunu henüz uygulamamıştır
  • dtterm WindowOps uzantısıyla pencere boyutunu okuma alternatifi vardır
    • Sixel grafik ekranının geometrisi ile pencere boyutu mutlaka aynı olmadığı için bu tam bir çözüm değildir
    • Örneğin xterm, pencere daha büyük olsa bile grafik geometrisini 1000x1000 ile sınırlar
  • İki yöntem de başarısız olursa lsix VT340 ortamı varsayar
    • Çözünürlük 800x480
    • Bir satıra yalnızca 6 karo sığacağını kabul eder
  • Sixel standardı kullanılabilir renk yazmacı sayısını sorgulamanın bir yolunu da sunmaz
    • lsix xterm uzantısını kullanır
    • Terminal yanıt vermezse özgün VT340 varsayılır ve yalnızca 16 renk yazmacı kullanılır

libsixel kullanmama nedeni

  • libsixel, optimize edilmiş Sixel grafik komutları çıktılayan bir projedir
  • lsix, libsixel yerine Bash ve ImageMagick kullanır
    • Bash ve ImageMagick’in yaygın bulunması sayesinde her yerde kolayca çalışmasını hedefleyen bir tercihtir
    • Betiği basit tutarak kullanıcıların kolayca değiştirmesine ve genişletmesine olanak verir
    • ImageMagick, libsixel’in img2sixel aracının kullandığı stb_imageden daha fazla giriş biçimini okuyabilir
      • Örn: xpm, svg, 16-bit png, sixel dosyaları
    • ImageMagick girdiyi okuyup Sixel çıktısını doğrudan yazabilir
    • libsixel daha hızlı olabilir; ancak basit bir dizin listesi gösterimi için ImageMagick de yeterince hızlıdır

Kaynaklar

1 yorum

 
GN⁺ 2024-06-08
Hacker News yorumları
  • Benim gibi tmux olmadan terminal kullanmakta zorlanıyorsanız, deneysel Sixel dalı yaklaşık 10 ay önce nihayet birleştirildi
    Artık ana hat tmux’u --enable-sixel ile derleyip tmux içinde lsix gibi araçları kullanabilirsiniz
    Sevdiğiniz terminalin ya da terminal çoklayıcının Sixel’i destekleyip desteklemediğini merak ediyorsanız "Are We Sixel Yet" sitesine bakabilirsiniz
    https://github.com/tmux/tmux/commit/dfbc6b1888c110cf0ade66f2...
    https://www.arewesixelyet.com

    • Birkaç yıl önce Zellij’e geçtim ve 2022’nin bir noktasından beri Sixel desteğini sorunsuz kullanıyorum
      İş akışınızda değişiklik yapmak istiyorsanız, varsayılan hâliyle tmux’tan çok daha iyi bir deneyim olduğunu düşünüyorum
      Normalde harici eklentiler ve karmaşık yapılandırma betikleriyle ekleyeceğiniz özellikler varsayılan olarak geliyor; kararlılık ve performans da çok daha iyiydi
      https://zellij.dev/
    • tmux’un ne işe yaradığını pek anlayamıyorum
      Neden iş akışında vazgeçilmez bir araç hâline geldiğini, benim işlerim için de neden vazgeçilmez olabileceğini açıklayabilir misiniz?
    • Ama neden gerekli? Piksel grafikleri özellikle metin tabanlı düşük çözünürlüklü bir ızgaraya sıkıştırmanın anlamı ne? Doğrudan piksel grafikler kullanılamaz mı?
    • Uzun zamandır tmux kullanıyorum, ondan önce de screen kullanıyordum; ama Sixel’in neden büyük fark yarattığını pek anlamıyorum
      Mevcut döşeme düzenine kıyasla tmux’a yığın tabanlı bir pencere yöneticisi getirmek gibi bir değişim mi bu? Yoksa sadece terminal grafikleri mi iyileşiyor? Tamamen yanlış mı anladım?
      Eğer sadece grafiklerin iyileşmesiyse, tmux’un bunu neden desteklemesi gerektiğini pek anlamıyorum; Gnome Terminal gibi terminal emülatörü tarafı daha önemli gibi geliyor. İkisi de gerekebilir ama tmux’un sadece geçirmesi yeterli diye düşünmüştüm
    • tmux’u brew ile kurunca Sixel etkin oluyor mu, bilen var mı?
  • Bu depoda en sevdiğim özellik README.md.d dizini
    Oldukça iyi bir fikir; bence .md kısmı olmasa da olur

    • Asıl güçlü hamle, README dosyasının içine görüntüleri doğrudan Sixel olarak gömmek olurdu
      O zaman sadece cat README yapmak bile görüntüleri olduğu gibi gösterebilir
  • "\e[c" kullanarak Sixel desteğini otomatik algılıyor
    https://github.com/hackerb9/lsix/blob/3a431793a747df3f934051...
    "\e[c", "send device attributes" anlamına geliyor
    https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-F...

  • Fikir harika ama PuTTY/KiTTY üzerinde çalışmıyor
    $ lsix çalıştırınca terminalin Sixel grafik desteği bildirmediğini söyleyen bir hata veriyor; xterm -ti vt340 gibi Sixel destekli bir terminal kullanmayı ya da terminal geliştiricisinden destek istemeyi öneriyor
    Tek bir görüntüyü convert foo.jpg -geometry 800x480 sixel:- ile test edebileceğinizi, gerçekten destekleyen bir terminalse hatayı http://github.com/hackerb9/lsix/issues adresine bildirmenizi söylüyor
    Aygıt öznitelik kodu ^[[?6c olarak görünüyor
    Yazık. Oldukça hoş olurdu. Sixel destekleyen açık kaynak bir Windows terminali var mı? Çoğu Cygwin ya da WSL tarafında görünüyor; saf Windows için pek görünmüyor

    • Son zamanlarda wezterm kullanmaya başladım, epey hoşuma gidiyor
      Çapraz platform ve Sixel grafiklerini destekliyor
      https://github.com/wez/wezterm
    • Mintty, Sixel’i destekleyen harika bir Windows terminali
  • Benzer çizgide timg de var: https://github.com/hzeller/timg

  • MacOS için iTerm2’de benzer bir özellik yerleşik olarak var ve sunucu tarafındaki yük daha düşük
    Sunucuda görüntüyü birçok görüntü kitaplığıyla Sixel’e render etmek yerine, tüm görüntüyü base64 olarak kodlayıp istemciye gönderiyor; istemci de görüntü biçimini belirleyip terminalde yerel olarak render ediyor
    https://iterm2.com/documentation-images.html

    • konsole da aynı protokolü uygulamış
      Linux’ta değiştirilmemiş imgcat betiğini olduğu gibi kullanıyorum
      ImageMagick ile dönüştürmekten elbette çok daha hızlı; yine de lsixi de bin dizinine ekledim
  • Güvenilmeyen dizinlerde çalıştırırken dikkatli olmak gerekiyor
    Özellikle PDF gibi görüntü ayrıştıran şeyler, diğer araçlarda olduğu gibi riskli olabilir; ImageMagick kullanırken daha da dikkatli olmak gerekir

    • Güvenilmeyen görüntüleri ayrıştırmak özünde sorunlu mu?
      Güvenilmeyen indirmeler klasörünü Gnome Files ile açtığımda içindeki görüntüleri gösteriyor ve dolayısıyla ayrıştırıyorsa, bu önemsemem gereken bir güvenlik meselesi mi?
      PDF içindeki JavaScript gibi şeylerin sorun olabileceğini düşünüyordum ama basit önizlemenin bile tehlikeli olabileceğini düşünmemiştim
  • Kullandığınız terminalin Sixel grafikleri desteklemesi gerekiyor

    • Sixel’i desteklemeyen terminaller için bir grafik kitaplığı yaptım
      https://github.com/dheera/python-termgraphics
      Bu kitaplığı değiştirip alternatif yol olarak desteklemesini sağlamak ilginç olabilir
    • xterm Sixel’i destekliyor; o hâlde TERM=xterm256-color gibi değerler ayarlayan her şey uyumlu olmalı… değil mi? öksürük gnome-terminal öksürük
    • mlterm çalışıyor
  • fzf, 0.44.0’dan itibaren önizleme penceresinde deneysel Sixel görüntü desteği sunuyor
    Windows’ta kullanılamıyor
    https://github.com/junegunn/fzf/releases/tag/0.44.0
    fzf --preview='fzf-preview.sh {}'

    • Alternatif olarak fzf --preview 'convert {} -geometry 800x480 sixel:-' kullanabilirsiniz
      Bunun için de ImageMagick kurulu olması gerekiyor