2 puan yazan GN⁺ 2024-01-31 | 1 yorum | WhatsApp'ta paylaş
  • Terminalde Emacs’te Solarized gibi temaları düzgün görmek için 24 bit renk desteğinin kendisinden çok; terminalin, terminfo’nun, tmux’ın ve mosh’un aynı renk özelliğini uçtan uca anlayıp anlamadığı önemlidir
  • RGB renkleri yaygın olarak ESC[38;2;<r>;<g>;<b>m biçiminde kullanılır; ancak standarda daha yakın iki nokta üst üste sözdizimi ile gerçek uygulamalarda yaygınlaşan noktalı virgül sözdiziminin birlikte kalması uyumluluğu karmaşıklaştırır
  • xterm-256color ve xterm-direct sırasıyla 256 renk paleti ve 16.777.216 renk desteği duyurur; ancak terminfo’nun palet merkezli modeli doğrudan RGB renklerini temiz biçimde ifade edemez
  • Gerçek ortamlarda ncurses-term içindeki -direct girdileri, tmux-direct, mosh 1.4 serisi, vscode-direct gibi alternatif TERM değerleri gerekebilir; bazı katmanlar hâlâ yalnızca noktalı virgül biçimini kabul eder
  • Modern terminal özelliklerini kararlı şekilde kullanmak için TERM ve terminfo tek başına yeterli değildir; terminal adı ve sürümüne göre özellikleri daha hızlı güncelleyen ayrı bir ifade biçimi gerekir

Terminal Emacs’te 24 bit renge neden ihtiyaç var

  • Grafik ortamdaki Emacs otomatik olarak 24 bit renk destekler ve Solarized gibi temaları ve yazı tiplerini doğru gösterir
  • Aynı temayı terminalde kullanınca renk ifadesi sınırlanabilir ve ekran daha az hoş görünebilir
  • Popüler terminaller uzun zamandır 24 bit renk destekliyor; ancak programların bunu kullanabilmesi için özellik algılama ve ayarların birlikte doğru olması gerekir
  • Amaç iki şeydir
    • Mevcut terminal ortamında truecolor desteğini açmanın yolunu bulmak
    • Emacs renk sorununun 1970–1990’lar terminal standartlarıyla nasıl bağlantılı olduğunu görmek

ANSI kaçış kodları ve renk genişletmelerinin tarihi

  • İlk donanım terminalleri farklı denetim kodu sistemleri kullanıyordu; taşınabilir yazılım üretmek için ANSI standardizasyonu gerekiyordu
  • ANSI escape codes 1970’lerden beri varlığını sürdürür; renklerde temel öğe SGR(Select Graphics Rendition)’dır
    • Kalınlık veya parlaklık
    • İtalik
    • Yanıp sönme
    • Ön plan ve arka plan rengi
    • Diğer karakter görüntüleme öznitelikleri
  • İlk renkler, RGB küpünün 8 köşesine karşılık gelen 3 bit renklerdi
    • Siyah, beyaz, toplamsal ana renkler ve çıkarmalı ana renkler dahildi
  • Daha sonra parlak renk veya kalınlık biti eklenerek 16 renge genişletildi
    • “bright black” koyu griye karşılık gelir
  • 1999’da Todd Larason, xterm’e 256 renk desteği yaması ekledi
    • 6x6x6 RGB renk küpü örneklemesi
    • 24 kademeli gri tonlama rampası
    • Nadir olsa da hâlâ desteklenen 88 renkli bir varyant da vardır

24 bit renk sözdiziminin oluşma yolu

  • 8 bit renk ve 24 bit renk, uyumlu terminallerde şu biçimlerde ayarlanır
    • ESC[38;5;<n>m: Paletteki n renk numarasını ön plan rengi olarak ayarlar
    • ESC[38;2;<r>;<g>;<b>m: r, g, b RGB değerlerini ön plan rengi olarak ayarlar
  • 5 ve 2 sayıları ISO 8613-6, yani ITU T.416’daki genişletilmiş renk modlarıyla bağlantılıdır
    • 2: RGB uzayında doğrudan renk
    • 5: indeksli renk
  • Standardizasyon akışı şöyledir
    • 1970’ler: ANSI, terminal kaçış dizilerini standartlaştırdı; bu süreç ANSI X3.64 ve ECMA-48’e uzandı
    • 1979: ECMA-48 2. baskı, SGR 30~37 ve 40~47’yi 3 bit ön plan ve arka plan renklerine ayırdı
    • 1984: ECMA-48 3. baskı, varsayılan ön plan ve arka plan rengi kavramlarını tanıttı ve 39, 49’u atadı
    • 1991: ECMA-48 5. baskı, 38 ve 48’i “gelecekteki standardizasyon için” bıraktı ve ISO 8613-6’ya işaret etti
    • 1993: ISO 8613-6, 38 ve 48’i genişletilmiş ön plan/arka plan rengi modları olarak tanımladı
  • Alt parametre ayırıcı olarak iki nokta üst üste kullanımı standarda daha yakındır; ancak gerçek uygulamalar noktalı virgülü yaygın biçimde benimsedi
    • ESC[38;5;3m, SGR 38’i bilmeyen bir terminalde 38, 5, 3 şeklinde ayrı parametreler gibi yorumlanabilir
    • Thomas Dickey’nin xterm FAQ’su, o dönemde ITU T.416 kopyasının pahalı olduğunu ve RGB değerlerini diğer SGR parametreleri gibi noktalı virgülle ayırmanın yanlış olduğunu açıklar
  • İlgili zaman çizelgesi şöyledir
    • 1999: Thomas Dickey, Todd Larason’ın 256 renk yamasını xterm’e birleştirdi ve belirsiz noktalı virgül sözdizimi dahil oldu
    • 2006: Konsole, xterm ile aynı noktalı virgül sözdizimiyle 256 renk ve 24 bit truecolor desteği sundu
    • 2012: xterm, standarda daha yakın iki nokta üst üste sözdizimini de kabul edecek şekilde değiştirildi
    • 2016: Windows 10 yerleşik konsolu ANSI kaçış kodlarını ve 24 bit rengi destekledi, ancak noktalı virgül sözdizimini kullandı
    • 2019: Windows Terminal da ANSI kaçış kodlarını destekler, ancak noktalı virgül sözdizimini kullanır
    • 2022: Microsoft, ekosistemin eski VGA tarzı konsol alt sisteminden ANSI terminal öykünmesine geçişini duyurdu
    • 2022: Konsole, standart uyumlu iki nokta üst üste sözdizimini destekledi

terminfo’nun renk özelliklerini ifade etme biçimi

  • terminfo, terminal özellikleri veritabanı ve uygun kaçış dizileri üretme işlevi sağlar
  • TERM ortam değişkeni, programların kullanacağı terminfo kaydını gösterir ve ssh bağlantılarında da otomatik olarak aktarılır
  • toe kurulu terminfo kayıtlarının listesini gösterir; infocmp belirli bir kaydın özelliklerini kontrol etmek için kullanılır
  • Renkle ilgili önemli üç özellik vardır
    • colors: Terminalin desteklediği renk sayısı
    • setaf: Ön plan rengini ayarlama
    • setab: Arka plan rengini ayarlama
  • xterm-256color içindeki setaf, renk numarasına göre farklı diziler üretir
    • 0~7: ANSI 30~37 SGR parametrelerini kullanır
    • 8~15: Standart dışı 90~97 parlak renklerini kullanır
    • Daha yukarısı: 38;5;<n> biçiminde 256 renk paleti kullanır
  • xterm-direct, colors değerini 16.777.216 olarak duyuran 24 bit RGB için bir terminfo girdisidir
    • ccc’yi kapatır; renk indekslerine yeni RGB değerleri atanamayacağını belirtir
    • initc, oc, rs1 gibi çalışma zamanında renk değiştirmeyle ilgili girdiler de yoktur
    • setaf ve setab, iki nokta üst üste tabanlı 38:2::... biçimini kullanır

terminfo’nun doğrudan renk modelinin sınırları

  • terminfo ve ncurses’in programlama modeli temelde palet girdileri merkezlidir
    • N adet palet girdisi vardır
    • Her girdinin varsayılan bir RGB değeri vardır
    • Model, terminalin bu değeri değiştirebildiğini varsayar
  • -direct terminaller, 24 bit rengi temsil etmek için 16.777.216 palet girdisi varmış gibi ifade edilir
    • Her girdi 8:8:8 RGB küpüne karşılık gelir
    • Değerler değiştirilemez
  • Uyumluluk için xterm-direct yaklaşımı en koyu mavi renklerden 7’sini varsayılan ANSI 8 renkle uyumluluk için kullanır
    • Siyah hariç tutulur
    • Bu, mevcut programların setaf anlamı hakkında varsayımda bulunup neredeyse görünmeyen koyu mavi yazdırmasını önlemeye yönelik bir düzenektir
  • Bu nedenle -direct yöntemi ile -256color yöntemi birbirleriyle uyumlu değildir
    • Program, 256 rengin indeksli renk, 16.777.216 rengin ise doğrudan renk olduğunu bilmelidir
    • En koyu 7 mavi renkten kaçınma istisnası da vardır
  • termwiz ile ilgili sorunda program xterm-256color paletini bekliyordu; ancak gerçekte okunması zor koyu mavi tonları yazdırdı
    • Söz konusu issue, yazım anında açıktı; ancak @quark-zju düzeltmeyi dahil etti ve termwiz artık makul şekilde çalışıyor
  • Esas mesele terminalin kendisinden çok terminfo kısıtlarına yakındır
    • 24 bit renk destekleyen terminallerin xterm 256 renk paletini ve RGB değerlerinin dinamik değiştirilmesini de desteklediği görülüyor
    • terminfo, modern terminal emülatörü ekosistemini doğru ve hızlı şekilde ifade etmek için yetersizdir

TERM ayarı ve noktalı virgül uyumluluğu

  • Birçok program terminfo kullandığından TERM değeri doğru ayarlanmalıdır
  • İki nokta üst üste tabanlı SGR sözdiziminde birleşmek istense de birçok ortam hâlâ yalnızca noktalı virgül sözdizimini destekler
    • Windows’un yerleşik konsolu Conhost
    • Mintty ve Cygwin ortamındaki bazı davranışlar
    • Mosh
    • PuTTY
    • Ubuntu 22.04 LTS ile gelen Konsole sürümü
  • terminfo girdileri yapı taşlarından oluşur
    • xterm+direct: Standarda daha yakın iki nokta üst üste sözdizimi
    • xterm+indirect: Yalnızca noktalı virgül destekleyen eski terminaller için
  • xterm+indirect arandığında vscode-direct en uygun seçenek gibi göründü
    • Microsoft terminallerini hedeflediği için Windows Terminal ve Windows Console’a yeterince yakın olduğu düşünüldü
    • Tüm özellikler denetlenmedi, ancak çalışıyor
  • Birçok sunucuda -direct terminfo girdileri kurulu olmayabilir
    • Çoğu sistemde varsayılan terminfo veritabanı ncurses-base paketindedir
    • Genişletilmiş terminal girdileri için ncurses-term paketi gerekir
  • Yazı yazılırken ncurses’e winconsole terminfo girdisi eklenmişti; ancak 24 bit renk desteklemiyor ve henüz hiçbir ncurses sürümünde yayımlanmadı

Emacs truecolor’ı nasıl algılar

  • Emacs, TTY’de truecolor desteğini algılama biçimini belgelendirir
  • M-x eval-expression içinde (display-color-cells) çalıştırıldığında Emacs’in 16.777.216 rengi tanıyıp tanımadığı kontrol edilebilir
  • Emacs belgeleri -direct modunun terminfo sınırlarını da ele alır
    • RGB özelliği olan terminaller #000001 ile #000007 arasını doğrudan RGB değil, indeksli renk gibi ele alabilir
    • Bu, direct color bilmeyen uygulamalarla geriye dönük uyumluluğu korumak içindir
    • Sorun olursa setb24, setf24 içeren özel terminal tanımı kullanılabilir
  • Emacs önce setf24 ve setb24 dizelerini arar; yoksa yedek özellik olarak RGB kullanır
  • Kontrol edilen sistemdeki terminfo girdilerinde setf24 bulunmuyordu

İç içe terminallerde tüm katmanlar uyumlu olmalı

  • Tipik bir çalışma akışı birden fazla terminal katmanını iç içe geçirir
    • Yerel masaüstünde grafik terminal emülatörü açmak
    • Uzak makineye veya VM’e mosh ile bağlanmak
    • tmux başlatmak
    • Emacs iç terminali, Asciinema, GNU Screen vb. ek olarak kullanmak
  • Her katman kendi ANSI kaçış dizisi durum makinesini uygular
  • 24 bit rengin çalışması için tüm katmanların içerideki TERM değerinin terminfo’sundan üretilen kaçış dizilerini anlaması ve bunları dışarıdaki terminfo’ya uygun şekilde doğru aktarması gerekir
  • Bu nedenle ilgili yazılımların yeterince güncel olması gerekir
    • Mevcut Ubuntu LTS, mosh 1.3 sunduğundan mosh-dev PPA’sını etkinleştirmek gerekti
  • Her katmandaki TERM de doğru olmalıdır
    • tmux içinde tmux-direct kullanılır
    • mosh için standart terminfo olmadığından yeterince yakın bir değer seçilmelidir

Ortama göre ayarlar

  • Grafik terminal emülatörü

    • Çoğu terminal uygun varsayılan TERM değerini ayarlar veya kullanıcının bunu geçersiz kılmasına izin verir
    • Konsole’da TERM değerini seçmek için bir seçenek vardır
  • ssh

    • ssh, TERM değerini yeni kabuğa aktarır
    • Uzak ana bilgisayarda aynı terminfo kaydı varsa ayar nispeten basittir
  • tmux

    • tmux çalıştırıldığında TERM, screen olarak ayarlanabilir
    • ~/.tmux.conf içinde varsayılan terminal değiştirilerek çözülür
    set -g default-terminal "tmux-direct"
    
    • Dıştaki TERM 24 bit renk desteklediğinde koşullu olarak tmux-direct ayarlamak, aksi halde screen veya tmux-256color değerini korumak da düşünülebilir
  • mosh

    • Güncel mosh 24 bit renk destekler; ancak kendi başına yalnızca 8 renk veya 256 renk duyurur
    • Bu nedenle kullanıcının TERM değerini uygun şekilde ayarlaması gerekir
    • mosh xterm uyumluluğunu hedefler, ancak SGR 38 ve 48’de yalnızca noktalı virgül sözdizimini destekler
    • TERM=xterm-direct çalışmaz
    • vscode-direct, xterm-direct’e en yakın alternatif olarak kullanıldı
    • mosh’un çalışıp çalışmadığını bildiren kullanışlı bir değişken olmadığından .bashrc içinden çağrılmak üzere detect-mosh.rs betiği yazıldı
    • Kabuk sürecinin mosh-server’ın çocuğu olup olmadığını kontrol eden bir yöntemdir
    • Oturum açma yolunda Rust derlemenin düşük performanslı ana bilgisayarlar için uygun olup olmadığı kesinleştirilmedi

Nihai sonuç ve kalan sorunlar

  • Ayarlardan sonra tmux ve mosh içindeki Emacs’te de tema 24 bit renk ile gösterilir
  • Kalan sorunlar üç başlıkta özetlenebilir
    • Terminaller sözdizimi ve özelliklerde tamamen uzlaşmış değil
    • terminfo, özellik sorgulamanın standart yoludur
    • terminfo sınırlıdır ve zaman zaman hatalıdır; yeni sürüm yayımları da sık değildir

terminfo sonrasında yön

  • Modern terminal özelliklerini yeterince kullanmak isteyen yazılımların terminfo dışına çıkması gerekir
  • Olası yönler şöyledir
    • Yaygın desteklenen TERM değişkeni kullanılmaya devam eder
    • İşletim sistemi veya dağıtımın eski terminfo’suna bağımlı kalmadan programların terminal özelliklerini bağımsız olarak bilebilmesi sağlanır
    • Sık güncellenen bir kütüphaneye son yaklaşık 10 yılın terminal emülatörü bilgileri ad ve sürüm temelinde eklenir
    • Artık kullanımı zor olan donanım terminali desteği dahil edilmez
    • İşletim sisteminin sağladığı terminfo dosyası ve terminfo dosya biçimi desteklenmeye devam eder; ancak hangi bilginin güncel olduğunu değerlendirebilen bir protokol bulunur
    • İsteğe bağlı TERMVERSION ile 2022 Konsole ve 2023 Konsole gibi sürüme göre özellik farkları ayırt edilir
    • 24 bit renk, 256 renk paleti animasyonu, URL bağlantıları, Kitty grafik protokolü gibi modern özellikler belirsizliğe yer bırakmadan ifade edilir
  • Eski programlar için geriye dönük uyumluluk yolu da mümkündür
    • .bashrc içinde çalışan bir program TERM ve TERMVERSION kullanarak $HOME/.terminfo/ altında ikili terminfo dosyası üretir
    • RGB, setf24, setb24 gibi açık 24 bit renk özellikleri üretir
    • RGB bilmeyen programların 256 renk paleti varsaydığı kabul edilerek colors#0x100, initc, oc korunur

1 yorum

 
GN⁺ 2024-01-31
Hacker News yorumları
  • terminfo içinde gezinmek, derin yeraltı mezarlarında titrek bir meşaleyle hiyeroglifleri aydınlatmaya benziyor.
    Tek bir terminal uygulamasının içine ne kadar çok karmaşıklık sığdığını düşününce tuhaf geliyor; iTerm ve Kitty gibi terminallerin geliştiricilerine daha da minnettar oluyorum.
    iTerm+zsh’de sekme rengini ayarlayan fonksiyonları bir araya getirdim: https://gist.github.com/aclarknexient/84ebe33c1879f921685304...
    Eskiden telnet ile HTTP ya da SMTP’ye bağlanma yöntemleriyle karşılaştırınca, metnin kendisi basit olsa da o metni gösteren taraf türlü türlü özelliği destekleyen karmaşık bir uygulama.

    • Kendi yaptığım terminali kullanırken başlarda terminfo’yu umursamamaya ve rxvt gibi davranmaya karar vermiştim; doğacak sorunları da göze aldım.
      Şimdilik o terminalin kullanıcısı fiilen yalnızca ben olduğum için mümkün bir tercih; ama modern terminaller ortak alt kümeyi epey desteklediğinden, uygulamaların yabancı TERM değerlerini tanımayıp şaşırmasından daha az acı verici.
      Elbette yeni sistemlere sık sık SSH ile girmiyorsanız bu daha az önemli bir mesele.
    • Sekme renginin gerçekten uygulandığı bir ekran görüntüsü paylaşabilirseniz iyi olur.
    • Mac’te en çok özlediğim yazılım iTerm.
      En hızlı terminal emülatörü değil, ama görünüş olarak açık ara en iyisi.
  • Çeşitli terminal uygulamalarında 16 renk paletini ayarlamak, uygulama tarafındaki terminal kodunu tam doğru hale getirmekten daha kolaydı.
    ~/.Xdefaults içinde rxvt-unicode renklerini ayarlıyorum; Emacs tema .el dosyasında ise grafik gösterim olup olmamasına göre renk adlarını farklı belirleyip bunları çeşitli face’lere uyguluyorum.
    Bonus olarak renkli ls çıktısı da daha iyi görünüyor. Varsayılan 16 renk paleti çoğu zaman fazla doygun ve kontrastı kötü oluyor.

    • Asıl mesele doğrudan (if (display-graphic-p) zaten.
      Emacs gerçek grafik çıktıyı destekliyor; X11/Cocoa/Win32’de Esc gerçekten Esc gibi çalışıyor, Ctrl+Shift veya Cmd kısayolları, aynı anda birden fazla font kullanımı, görüntü gösterme, imleç şeklini değiştirme vb. mümkün.
      Sanki 20 yıl sonrasına, 1989’a götüren bir zaman makinesi gibi.
    • Eski TTL ekranlarda daha fazlası mümkün olmadığı için renkler bu kadar doygundu.
      Kırmızı hat ya güçlü kırmızıydı ya da kapalıydı; intensity hattı eklenince de %100 kırmızı oluyordu.
    • DIRCOLORS içine sekans koyarsanız ls de gerçekten 24 bit renk destekliyor.
    • Ben de Terminology’nin 16 renk paletini INI dosyasında tercih ettiğim temaya göre ayarlayıp konsolda ve terminal uygulamasında (vim) aynı stili kullanıyorum.
    • Ben de neredeyse aynı şekilde kullanıyorum.
      Varsayılan renkler koyu arka plana göre fazla koyu olduğundan, tüm renklerin parlaklığını artırdım.
  • Yazar export COLORTERM=truecolor’ı bilseydi muhtemelen çok daha az uğraşırdı.
    Bağlantı verilen Emacs belgelerindeki truecolor algılama dipnotunda da geçiyor, Konsole ekran görüntüsünde de görünüyor; ama birkaç kat terminal multiplexer içinde kaybolmuş olabilir.
    Bu değeri ayarlayınca uygulama truecolor istendiğini hemen anlıyor; zor kısmı atlayabiliyor ve terminfo veritabanına da gerek kalmıyor.

    • Doğru. Bu hikâyeye COLORTERM ve RGB terminfo özelliği gibi deneme-yanılmaları da eklemek gerekirdi.
      Yine de her program COLORTERM’e saygı duymadığı için, .bashrc içinde linux | screen* olduğunda COLORTERM’i unset edip diğerlerinde COLORTERM=truecolor export ettiğim bir dönem olmuştu.
      Günümüzde Screen 24 bit rengi destekliyor; muhtemelen Ubuntu 18 zamanlarından kalma bir ayardı.
    • Ya da tercih ettiğiniz GUI Emacs’i tramp veya sshfs ile birlikte kullanabilirsiniz.
    • Doğru. terminfo yoluna girince sizi yalnızca delilik bekliyor.
      Bir yandan bunun nedeni ncurses bakımcısının epey muhafazakâr olması, yeni terminal geliştiricilerinin ise hızlı hareket etmek istemesi.
    • terminfo veritabanına ihtiyaç kalmaması Emacs 28 ile başladı.
      Daha eski Emacs sürümlerinde hâlâ terminfo veritabanı gerekiyor.
    • COLORTERM de epey tuhaf.
      Çoğu zaman tanımlamaya gerek yok; ama bir screen oturumunda COLORTERM=truecolor ayarlıysa ekran bir anda çok garip hale geliyor, ortam değişkenini silince tekrar normale dönüyor.
  • Emacs ile etkileşim kurarken mutlaka terminal kullanmanız gerekmez
    MacOS, Windows, X.org ve Wayland için grafiksel ön uçlar kullanabilirsiniz
    Grafiksel Emacs’ta araç çubuğunu kapatırsanız terminalde çalışan Emacs’a o kadar benzer ki, Emacs’ı bilmeyen biri bir iş arkadaşının bilgisayarında gördüğü grafiksel Emacs penceresini kolayca terminal penceresi sanabilir
    Emacs kullanıcı anketinde %80’i grafiksel ön uç kullandığını söyledi

    • Buna karşı bir görüş olarak, tam teşekküllü bir GUI’nin hantallığı olmadan terminal kullanmak istiyorsanız yalnızca xterm-mouse-mode ile bile faydanın %80’ini elde edebilirsiniz
      mouse, xterm-mouse-mode, mouse-wheel-mode, kaydırma ayarları vb. eklenince oldukça kullanılabilir oluyor; auto-save-default ise Tanrı’nın takdiriyle nil olarak bırakılıyor
    • Emacs’ı bir terminal emülatörünün içinde çalıştırmıyorum. Emacs terminal emülatörünün kendisi
      Tüm terminal programlarını grafiksel Emacs’ın shell-mode tamponunda çalıştırıyorum; tam ekran denetimi gerektiren nadir programlar içinse yalnızca term-mode kullanıyorum
      En çok özelliğe sahip ya da en hızlı seçenek değil, ama diğer tamponlar gibi içinde gezinebiliyor ve düzenlemekte olduğum içerikle sorunsuz biçimde birlikte kullanabiliyorum
      Uzak bir bilgisayarda grafiksel Emacs açamıyorsam tramp ile uzak dosyaları düzenliyor ya da headless bir Emacs sunucusu başlatıp grafiksel emacsclient ile bağlanıyorum
    • İyi nokta
      İnsanların Emacs’ı terminalde çalıştırdığımı düşünebileceğini hiç hesaba katmamıştım
      Grafiksel Emacs çok daha iyi, ama terminalde de yaklaşık %90’ının aynı şekilde çalışıp görünmesi hâlâ harika
    • X tabanlı Emacs kullanıyorum ve protokol verimli
      Hissedilen hafiflik terminal kadar; VNC gibi gelmiyor
      Yazı tipleri, aynı anda farklı yazı tipleri kullanma, menüler, fare, renkler, birden çok frame/pencere gibi avantajları var
      Grafiksel kısmı yerelde çalıştırıp tramp ile uzak sistemlere erişirseniz, pratikte yalnızca busybox bulunan uzak Linux tabanlı yönlendiricilerin yapılandırma dosyalarını bile her türlü konfor özelliğiyle düzenleyebilirsiniz
    • Sonunda hep terminal tabanlı Emacs’a dönmemin iki nedeni var
      90’lardan beri X11’i aralıklı olarak kullanıyorum, ama yazı tipleri konusunda hâlâ arayıp tesadüfen çalışan bir komut bulup sonra ona dokunmama seviyesindeyim
      Kurumsal ortamlarda kullanmak zorunda kaldığınız X11 yapılandırmalarına kıyasla çoğu terminal programının görüntüleme performansı hâlâ belirgin biçimde daha hızlı
  • Günümüzde güncel Emacs’ı kurup 24 bit xterm destekleyen bir terminal açtıktan sonra emacs -nw çalıştırmanız yeterli
    Tema uyguladıktan sonra iyi görünüyorsa iş bitmiştir; görünmüyorsa .bashrc, .zshrc, .fishrc vb. dosyalara export COLORTERM=truecolor ekleyip kabuğu yeniden yükleyin ya da yalnızca o satırı çalıştırıp emacs -nw’yi yeniden başlatın
    Bu yazı terminfo’nun derinlerine inmek gerekiyormuş gibi gösteriyor, ama genellikle buna gerek yok. 10 yıl önce olsaydı belki, artık değil
    MacOS’ta iTerm ve Linux’ta Alacritty, Kitty, Gnome Terminal ile hızlıca yeniden kontrol ettim; günümüzde 24 bit xterm desteği yaygın

  • Bugün Windows 10 Komut İstemi’nde de standart ANSI kaçış dizilerinin çalıştığını öğrendim
    24 bit renk de sorunsuz çalışıyor
    echo ^[[48;2;255;0;0mHello^[[0m çalıştırırsanız Hello kırmızı RGB(255,0,0) arka planla yazdırılır ve ^[[0m rengi eski hâline döndürür
    ^[, CTRL-[ ile girilmeli; ^ ve [ ayrı ayrı yazılmamalı

    • Komut satırına doğrudan yazdırılamayan karakterler koymak istemiyorsanız, kaçış kodu kabul eden bir komutla birlikte \x1b kaçış kodunu veya \e takma adını kullanabilirsiniz
      Örneğin echo -e '\e[48;2;255;0;0mHello\e[0m' şeklinde yapılabilir
      Ancak betiklerde echo -e standart dışıdır ve normal echo da sınır durumlarında farklı davrandığından her zaman printf '\e[48;2;255;0;0mHello\e[0m\n' kullanmak daha iyidir
    • C:\CONFIG.SYS dosyasına DEVICE=C:\DOS\ANSI.SYS eklemeyi unutmamak gerekir
  • vim/neovim ile karşılaştırıldığında Emacs’ın en iyi yanı, yalnızca bir pencere içindeki terminal emülatörü değil, birinci sınıf GUI desteğine sahip olmasıdır
    gVim’in ve sayısız idare eder neovim ön ucunun olduğunu biliyorum, ama Emacs’ın varsayılan çalışma biçimi gerçekten GUI ve bu hoşuma gidiyor
    Terminal de fena değil, ancak çok fazla tarihsel artık ve kısıt var; bazı yanları da günümüz için anlamsız
    Emacs’ı uzak sunucuda çalıştırmak sorun oluyorsa TRAMP ve emacsclient var

    • Her şeyi terminalde çalıştırmanın iyi yanı, terminalde görünen her şeyi kopyalayabilmenizdir
      GUI uygulamalarının ekranda gösterdiği metni kopyalamanıza izin vermeyip elle yeniden yazmak zorunda bırakması sinir bozucu
    • Doğru değil. Neovim’in çok sayıda native ön ucu var ve zaten baştan böyle bir yapıyı mümkün kılacak şekilde tasarlandı
      https://github.com/neovim/neovim/wiki/Related-projects#gui
    • Tamamen katılıyorum
      Modal düzenlemeyi ve vim’i gerçekten seviyorum, ama terminal editörlerinin sunduğu yarım yamalak çözümü katlanılması zor buldum
      Elimizde zengin bir grafik platform varken neden kullanmayalım?
    • Büyük ölçüde iş akışına bağlı
      Örneğin vim’i neredeyse yalnızca dosya düzenlemek için kullanıyorum; git, linter, formatter, debugger, dosya ağacı işlemleri gibi dış araçlar için kabuğa geri dönüyorum
      Bu yüzden ana uygulamam zaten terminal emülatörü ve bu iş akışında özel bir GUI’nin olmaması pek önem taşımıyor
  • Benim Emacs’ımın daha çok şöyle görünmesini isterdim: https://imgur.com/a/h0jA1ro
    Ciddi söylemiyorum, şaka. Cool Retro Term’i yalnızca sunum yaparken kullanıyorum.
    Görünüşe göre benim Emacs’ımda 24 bit renkler varsayılan olarak çalışıyor: https://imgur.com/a/BM5OTxp
    Yalnız söz dizimi vurgulama biraz göze batıyor.

    • https://muppetlabs.com/~mikeh/crt_emacs.png
      Cool Retro Term harika; ben de sunumlarda kullanmayı denemek isterim.
    • Cool Retro Term’i gerçekten seviyorum ama projenin neredeyse terk edilmiş olması ve MacOS’ta çeşitli sorunları bulunması üzücü.
      Kişisel olarak diğer retro terminaller bu kadar iyi görünmüyor.
    • Windows Terminal’da hafifçe özelleştirdiğim CRT efektini gerçekten kullanıyorum.
  • Standardı bu kadar pahalı bir ücretin arkasına kilitlemiş olmaları gerçekten utanç verici.
    İnsanlar satın almamak için bu kadar dolambaçlı yollara başvurmak zorunda kalıyor ve böyle sonuçlar bile doğabiliyor.
    Standart ise erişilebilir olmalı. Yalnızca kitap olarak yayımlandığı dönemde baskı maliyeti almak mantıklı olabilirdi; ama dandik bir PDF’nin 200 dolar olması inanılır gibi değil.

  • xterm’in 24 bit renk yamasını yazmıştım, ama ncurses’i xterm-direct ile nasıl çalıştıracağımı ancak bugün öğrendim.
    Zaten Lisp ile yazdığım kendi terminal kütüphanemi kullanıyordum, fakat ncurses için alternatif bir yol bulundurmak hâlâ faydalı.
    Stack Overflow’daki soruyu yanıtlayan Mr. Dickey’ye ve bunu gündeme getiren Chad’e teşekkürler.