deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

Ratatui bakımcısından, kenarlıkları hücrelere yer açmadan hücre kenarlarına çizen terminal demosu

Ratatui'nin bakımcısı, kenarlıkları metin yerine bir hücre niteliği olarak çizen bir terminal prototipi prototipledi; Ghostty ve Rio için çalışan yamalar mevcut ve böylece TUI'lar kutu çizme karakterlerine satır sütun harcamaktan kurtuluyor.

Ratatui bakımcısından, kenarlıkları hücrelere yer açmadan hücre kenarlarına çizen terminal demosu

Terminal kenarlıklarına yeni bir bakış

Ratatui terminal UI çatısının bakımcısı, karakter hücrelerinin kenarlarına ince çizgiler çizen bir terminal protokolü önerisi yayımladı; bu sayede uygulamalar, ekrandan bir satır ya da sütun feda etmeden kenarlık, alt çizgi ve dış hatlar çizebiliyor. Hacker News ana sayfasına kadar yükselen joshka.net'teki yazıya göre protokol, Ghostty terminaline yama olarak zaten çalışıyor; daha erken bir sürümü Rio'da uygulanmış ve Ratatui ile demo uygulamalar yapılmış. Yazar, terminal ve TUI geliştiricilerinden geri bildirim istiyor.

Kutu çizme karakterlerinin bedeli

Günümüz terminalleri kenarlıkları Unicode kutu çizme bloğuyla çizer; bu blok çizgiler, köşeler ve birleşimler için 128 karakter sunar. Yazar, bunun yine de yeterli olmadığını savunuyor; çünkü bu karakterler metin: her çizgi, bir hücrenin tamamını kaplayan bir glif.

Sonuç da alan kaybı. Yazarın 16 inçlik dizüstünde terminal yaklaşık 200 sütun x 50 satır ölçüsünde ve birkaç düzey iç içe panel içeren bir düzen, yazıya göre bu 50 satırın altı ile sekizini yalnızca çizgilere harcayabiliyor.

Kenarlıkların metin olmasından başka sınırlamalar da doğuyor. İçeriği olan iki hücrenin arasına çizgi koymanın bir yolu yok; bu yüzden bir metin alanını altını çizmek ya da bir düğmenin dış hattını çizmek dolgu gerektiriyor. Yuvarlatılmış köşe glifleri tek bir arka plan rengi taşıdığından, panelin arka planı çevresinden farklıysa yanlış renkte küçük bir kare kalıyor. Ve bir kutunun içindeki metin seçimini kopyalamak kutuyu da kopyalıyor; bunu bir TUI'dan sohbet uygulamasına yapıştırmış herkes yaşamıştır.

Hücre niteliği olarak kenarlıklar

Önerilen protokol, hücre kenarlığını arka plan rengine benzer şekilde bir hücre niteliği olarak ele alıyor. Her hücre on iki çizgi parçası taşıyabiliyor: dört kenarının her birinin iki yarısı, artı hücrenin merkezinden uzanan dört kol. Her parçanın kendi rengi, genişliği, konumu ve stili var ve terminal bunları hücre ızgarasının üzerine çiziyor.

Kenarlıklar hücrelerin kendisinde saklandığı için metinle birlikte kaydırılıyor, siliniyor, ekleniyor ve yeniden akıtılıyor. Yazı, silme ve kaydırma davranışına ilişkin soruların yanıtlarının renkler için kullanılanlarla aynı olduğu halde bulunduğunu not ediyor. Kenarlar yarımlara bölünmüş durumda; böylece kenarlıklar çeyrek blok karakterleriyle hizalanıyor ve ızgaradan yarım hücre içeride çizilen şekillerin dış hatlarını çizmek mümkün oluyor.

Çizgiler düz, çift, kesik ya da noktalı olabiliyor; köşeler ve merkezler, yapılandırılabilir yarıçap ve anti-aliased yaylarla kare ya da yuvarlak olabiliyor. Yuvarlatılmış bir köşe ayrıca bir dış renk belirtebiliyor ki yayın ötesindeki alan, farklı bir arka plana karşı doğru renkte görüntülensin.

Komşu iki hücre paylaştıkları kenara çizgi koyduğunda çizgiler birleşiyor; kazananı önce öncelik, sonra genişlik, sonra konum belirliyor. Yazar, sağdaki ya da alttaki çizginin daima kazandığı erken bir kuralın, odağı verilmiş bir panel dış hattının bir bölümünü kaybettikten sonra terk edilmesi gerektiğini söylüyor.

DCS tabanlı bir aktarım biçimi

Protokol, ad alanlı tek bir DCS escape dizisinde taşınıyor: ESC P 1 + b cell-border ; OP ; FIELDS... ESC \. Yaygın yol, mevcut arka plan rengi gibi imleç durumunda tutulan bir kalem kullanıyor: kalemi ayarlayın, metni yazdırın, yazdırılan hücreler kenarlıkları edinsin. Dikdörtgen komutları kaleme dokunmadan mevcut hücrelerdeki kenarlıkları ayarlayıp temizleyebiliyor ve bir yetenek sorgusu uygulamaların desteği algılamasını sağlıyor.

Algılama, sorguyu standart bir DA1 isteği izleyecek şekilde göndererek çalışıyor. cell-border yanıtı gelmeden DA1 yanıtı gelirse uygulama, kutu çizme karakterlerine geri düşüyor ve gereken alanı yedekliyor. DCS dizisini anlamayan terminaller, herhangi bir bilinmeyen DCS'te olduğu gibi onu görmezden geliyor.

Asgari uygulama; kalem, dikdörtgen komutları ve düz çizgiler. Çizgi stilleri, yuvarlak birleşimler, öncelik ve dış renkler yetenek yanıtında duyurulan uzantı alanları; bilinmeyen alanlar sonradan eklenebilsin diye yok sayılıyor. Belirtim kendisini sürüm 1 olarak etiketliyor; yazar bunun kararlı bir şey değil, v0.1 ya da taslak olarak okunması gerektiğini söylüyor. Yazı ayrıca DECterm'deki DEC ruled lines gibi önceki çalışmalara atıf yapıyor ve baştan, yazının ve kodun yapay zekâdan önemli ölçüde yardım alınarak yazıldığını belirtiyor.

Önerilen kullanımlar arasında tarafı başına bir satır ve sütun kaybetmeyen panlar ve paneller; içeriklerin üzerine binerken yine katman olarak okunan menüler ve açılır pencereler; metnine sıkı sıkıya bitişik çizgi isteyen metin alanları, düğmeler ve onay kutuları gibi widget'lar; ve braille noktaları arasında hücre kenarlarına oturabilen, bütün bir satır harcamayan grafik ızgara çizgileri var.

Neden önemli

Terminal arayüzleri uzun süredir, görünür her şeyin bir karakter olmak zorunda olduğu bir modelle sınırlı kaldı. Kenarlıkları hücre niteliği yapmak, TUI uygulamalarına panel başına bir satır ve bir sütun ödemeden yoğun, iç içe düzenler render etme, dışarı kopyalandığında daha temiz metin üretme ve kutu çizme setinin hiç ifade edemediği arayüz öğeleri çizme imkânı verirdi. Öneri açıkça geri bildirim arayan bir taslak; kaderi, Ghostty ve Rio prototiplerinin ötesindeki terminal uygulayıcılarının benimseyip benimsememesine bağlı. Yaygınlaşırsa, yılların terminalin çizim modeline daha görünür yükseltmelerinden biri olur; terminallerin her zaman genişlediği aynı escape dizisi yolundan gelirken.

  • #terminal
  • #tui
  • #ratatui
  • #ghostty
  • #protocol