2 puan yazan GN⁺ 2024-10-04 | 1 yorum | WhatsApp'ta paylaş
  • Terminal renkleri meselesi zevkten çok standart eksikliği ve uygulama farklılıkları ile ilgilidir; aynı komut çıktısı bile terminal, tema ve uygulama kombinasyonuna göre okunması zor hâle gelebilir
  • Temel 16 ANSI rengi, 256 renk ve 24 bit hex renkler birlikte kullanılır; ancak bir renk numarasının gerçekte hangi renk olarak görüneceği terminal emülatörüne göre değişir
  • Siyah arka plan üzerinde mavi yazı, beyaz arka plan üzerinde parlak sarı, Solarized’ın gri eşlemeleri, ngrok arka plan rengi gibi kontrast çakışmaları, programın varsayımlarıyla kullanıcının teması uyuşmadığında ortaya çıkar
  • Çözümler; paleti sıfırlama, base16-shell, LS_COLORS, NO_COLOR=true, --color=always, unbuffer, Vim/Neovim’in 24 bit renk desteği gibi birden fazla katmana ayrılır
  • iTerm2, tabby, kitty, Ghostty ve Windows Terminal’in minimum contrast özelliği kusursuz bir çözüm olmasa da okunamayan çıktı oluşma riskini azaltır

ANSI renkleri ve terminaller arasındaki farklar

  • Terminallerde genellikle siyah, kırmızı, yeşil, sarı, mavi, macenta, camgöbeği, beyaz ve bunların parlak sürümlerinden oluşan 16 ANSI rengi bulunur
  • Programlar, renk belirtmek için ANSI escape code çıktılar
    • Örneğin \033[38;5;{num}m biçimiyle ön plan rengi numarası belirtilebilir
  • Sorun, ANSI renk numaralarının gerçekte hangi hex renge karşılık geldiği konusunda tutarlı bir standart olmamasıdır
    • Her terminal emülatörü renkleri kendisi seçer
    • Wikipedia’daki ANSI escape code renk tablosunda bile uygulamaya göre büyük farklar vardır
  • Bu fark nedeniyle ls komutunun dizinler için kullandığı mavi renk, siyah arka planda iyi görünmeyebilir
  • Parlak sarı ile beyaz arka plan kombinasyonu da neredeyse okunamaz; parlak yeşil gibi başka renklerde de benzer sorunlar ortaya çıkabilir

Renk paletini yeniden ayarlama yöntemleri

  • Varsayılan ANSI renklerini beğenmiyorsanız veya kontrast sorunu varsa paleti yeniden ayarlayarak çözüm üretilebilir
  • Terminal emülatöründen ayarlama

    • Modern terminal emülatörlerinin çoğu renkleri yeniden ayarlama özelliği sunar
    • Bazıları yerleşik temalar sağlar
    • Terminal emülatörü ne kadar popülerse seçilebilecek tema sayısı da o kadar fazla olabilir
  • Shell script ile ayarlama

    • ANSI escape code çıktılanarak terminal emülatörünün renk paleti değiştirilebilir
    • base16-shell’in Solarized Light script’i, farklı terminallere özgü escape code teamüllerini kullanır
    • Script, TERM ortam değişkenine göre uygun escape code stilini seçmeye çalışır
    • Shell script yöntemi, terminal emülatörü değişse bile aynı renk ayarlarını korumayı kolaylaştırır
    • Ancak tüm terminal emülatörleri bu yöntemle palet değiştirmeyi desteklemez; desteklese bile sonuçlar küçük farklılıklar gösterebilir

256 renk, 24 bit renkler ve araç bazlı temalar

  • Birçok terminal renk belirtmeyi 3 farklı yöntemle destekler
    • 16 ANSI rengi
    • Genişletilmiş 256 renk
    • #ffea03 gibi 24 bit hex renkler
  • fd, çıktısında ön plan rengi 48’i belirtmek için ^[[38;5;48m gibi escape code kullanır
    • Bu renk, genel terminal renk tablosunda bulunmayan lime tonunda görünebilir
    • Kullanılan renk tablosuyla kontrastı kötü olabilir
  • bat de benzer şekilde renk kullanır; ancak varsayılan çıktısı çeşitli terminal temalarında çalışmaya yönelik görünüyor
  • fd, bat, delta gibi bazı modern terminal araçları keyfi özel temaları destekler
    • Varsayılan tema terminal arka planıyla çakışabilir
    • Buna karşılık, yalnızca 16 ANSI rengi seçmeye göre aracın çıktısının temasını daha ayrıntılı denetlemeyi sağlar
  • bat --theme ansi kullanıldığında bat, genel terminal renk tablosunda ayarlanmış ANSI renklerini kullanır

Solarized ve base16’da ortaya çıkan çakışmalar

  • Solarized Light’ta bright renk eşlemesi uygulamaya göre farklı görünebilir
  • iTerm’in varsayılan Solarized Light teması, özgün Solarized tasarımındaki gibi 9–14 numaralı renkleri, yani “bright blue”, “bright red” vb. renkleri gri tonlarına eşler
    • ls, dizinler ve çalıştırılabilir dosyalar için bright renkleri kullanırsa bunlar gri görünebilir
  • base16 Solarized Light, bright renkleri gri yerine gerçek renkler olarak tutan bir varyant şeklinde kullanılabilir
  • Bu fark, özgün Solarized’ın Vim Solarized renk tablosunun gri kullanabilmesi için bu şekilde tasarlanmış olmasının sonucu gibi görünüyor
  • base16-shell, base16-vime ek renkler sağlamak için 16–21 numaralı renkleri ayarlar
    • ngrok arka planı 16 numaralı “black” renge ayarlamaya çalıştığında, ilgili renk parlak turuncuya yeniden eşlenmişse çok tuhaf bir arka plan oluşur
    • Program ANSI arka plan rengini belirtir ve kullanıcı bu rengi başka bir anlama gelecek şekilde yeniden eşlerse bu tür çakışmalar kolayca ortaya çıkar

Minimum contrast ile kontrast sorunlarını azaltma

  • Bazı terminaller, ön plan ve arka plan renkleri arasındaki kontrast yeterli olmadığında renkleri otomatik ayarlayan minimum contrast özelliğine sahiptir
  • iTerm2, tabby, kitty’nin text_fg_override_threshold ayarı, Ghostty ve Windows Terminal bu özelliği sunar
  • iTerm’de minimum contrast değeri 40 olarak ayarlandığında, ngrok arka plan rengi çakışması gibi okunması zor çıktılar da daha okunabilir hâle gelir
  • Renk ayarı hatalı olduğunda veya program ile tema çakıştığında minimum contrast, tesadüfi okunabilirlik sorunlarını azaltan pratik bir güvenlik ağıdır

TERM, pipe ve renkleri devre dışı bırakma

  • SSH ile bağlanılan sistem, yerel TERM ortam değişkeni değerini desteklemiyorsa renkler düzgün çalışmayabilir
  • Sistem terminfo veritabanını kullanır; TERM değeri bu veritabanında yoksa terminale uygun renk çıktısını bilmek zorlaşır
  • Yeniden üretilebilir bir ortam olmasa da bir Stack Overflow yanıtı, ssh yerine TERM=xterm ssh gibi bir biçim önerir
  • Komutlar pipe ile bağlandığında renkler devre dışı kalabilir
    • fd | less renksiz çıktı verebilir
    • Genellikle grep gibi araçlara aktarırken escape code olmadan düz metin çıkması faydalıdır
  • Renkleri korumak istiyorsanız unbuffer fd | less -r kullanabilirsiniz
    • unbuffer, komutun TTY’ye yazdığını sanması için bir tty açar
    • Pipe’a yazarken program çıktısının tamponlanması sorununu da çözer
  • Bazı komutlar, fd gibi --color=always bayrağıyla her zaman renkli çıktı verebilir

ls renklerini kapatma veya değiştirme

  • Bazı kullanıcılar ls renkli çıktısını istemez
    • Mavi renk siyah arka planda okunması zor olduğu için
    • Terminal renk tablosunu ayarlamak istemedikleri için
    • Renklerin kendisi yardımcı olmadığı için
  • Birkaç seçenek vardır
    • ls --color=never ile renkler kapatılabilir
    • LS_COLORS ortam değişkeniyle ls komutunun kullandığı renkler özelleştirilebilir
    • Bazı programlar NO_COLOR=true destekler; no-color.org üzerinde bir liste vardır
  • Örneğin LS_COLORS="fi=0:di=0:ln=0:pi=0:so=0:bd=0:cd=0:or=0:ex=0" ls şeklinde ayarlarsanız çeşitli dosya türlerinin renk stilini 0’a eşitleyebilirsiniz

Vim ve Neovim’deki değişim

  • Vim renk ayarları geçmişte terminal renk tablosu ile Vim renk tablosunu eşleştirmeyi gerektirdiğinden birçok sorun çıkarıyordu
  • Terminal içindeki Vim renk tablosu ayarının genel olarak 2 yöntemi vardır
    • Vim renk sınıflarını ANSI renk numaralarına eşlemek
    • Renk tablosunun #faea99 gibi 24 bit hex renkleri doğrudan kullanması
  • 20 yıl önce 24 bit hex renk destekleyen terminaller yaygın değildi ve Vim de terminalde 24 bit renk kullanımını desteklemiyordu
  • Vim, 2016’da 24 bit renk desteği ekledi
  • Neovim 0.10, Mayıs 2024’te yayımlandı ve 24 bit renk destekleyen terminallerde termguicolors varsayılan olarak açık
  • 2024’te 24 bit renk desteklemeyen bir terminal kullanma planınız yoksa terminal renk tablosu ile Vim renk tablosunu mutlaka senkronize etme yükü ortadan kalkar
  • Bu değişim, base16-shellin Vim entegrasyonu için 16–21 numaralı renkleri özel olarak ayarlama ihtiyacını azaltır
    • Bu bölüm kaldırılırsa ngrok’un turuncu arka planı gibi çakışmalardan kaçınılabilir

base16 kullanım deneyimi ve sınırları

  • base16-shell ile base16-vim birlikte kullanıldığında terminal ve Vim renklerini eşleştirmek kolaylaşır
  • fish yapılandırmasına birkaç satır ve .vimrc içine birkaç satır ekleyerek ayarlanabilir
  • base16 herkes için uygun bir yöntem değildir
    • Yerleşik tema sayısı sınırlıdır ve beğendiğiniz bir tema olmayabilir
    • Solarized base16 teması bright ANSI renklerini normal renklerle aynı ayarlar; bright renklerin farklı olması gereken kullanım senaryolarında bu sorun olabilir
    • base16-vime daha fazla renk sağlamak için 16–21 numaralı renkleri ayarlama yöntemi, yalnızca 24 bit renk destekleyen terminallerin kullanıldığı ortamlarda gereksiz olabilir
    • 16–21 numaralı renklerin ayarlanması, Linux framebuffer terminal gibi 256 renk desteklemeyen terminallerde sorun çıkarabilir
  • base16’ın topluluk fork’u olarak tinted-theming vardır

Renk tablosu araçları ve popüler temalar

Hâlâ kalan sorunlar

  • tmux, SSH ve Vim kombinasyonu gibi birden fazla programın buluştuğu noktalarda ek renk sorunları ortaya çıkabilir
  • İyi bir renk tablosu seçmek de başlı başına zordur
    • Renk görme bozukluğu olan kullanıcılar için uygun bir renk tablosu bulmak zor olabilir
    • Arka plan rengi imleç veya seçim alanı rengine çok yakınsa konumu bulmak zorlaşır
    • Tüm programlarda iyi çalışan renkleri bulmak zordur ve ngrok örneğinde olduğu gibi çakışmalar yaşanabilir
  • Nethack veya Midnight Commander gibi temel ANSI renklerine dayalı belirli bir “klasik” görünüm bekleyen programlar, Solarized gibi temalarda yabancı görünebilir
  • Bir çözüm, programı çalıştırmadan hemen önce ANSI paletini değiştirmektir
    • Örneğin Nethack’i çalıştırmadan önce sarı rengi daha parlak bir sarıya yeniden eşleyebilirsiniz
  • Renklerin basitçe düzgün çalışmasını isteyen kullanıcılar için bu kadar çok manuel ayar yük getirir; bu yüzden makul varsayılanlar ve minimum contrast gibi özellikler önemlidir

1 yorum

 
GN⁺ 2024-10-04
Hacker News yorumları
  • Sistem için açık renkli temayı düzgün yapmaya çalışırken bütün bu sorunları ve daha fazlasını yaşadım; özellikle iki tanesi ilginçti
    Geriye dönüp bakınca bariz geliyor ama açık temaların ekran değiştikçe koyu temalara kıyasla çok daha incelikli biçimde farklı göründüğüne şaşırmıştım. Donanım ve yazılım ayarları renk çıktısında fark yaratıyor, ama açık alan ağırlıklı değişimler koyu alanlardaki değişimlerden çok daha fazla algılanıyor
    Bir de bazen Linux ya da BSD konsolu gibi yazı tipi ve gösterişli renk desteğinin sınırlı olduğu ortamlara inmek gerekiyor; o zaman fd ya da exa/lsd/whatever rahatsız edici hale gelebiliyor, hatta kullanılamayacak kadar kötü olabiliyor; özellikle de ikincisini ls'ye eşlediyseniz daha da can sıkıcı oluyor. Uzun uğraşlardan sonra X olmadan da idare edecek terminal özellikleri kullanmak için fbterm'i ayarladım, ama fbterm'in de kendine özgü sorunları var. Vim renk şemasını ayarlarken, özellikleri kısıtlı konsollar için yedek bir tema hazırlamanız ya da Vim komutlarını bakmadan yazmak için bolca pratik yapmanız gerekiyor :D
    Düzenleme: ciddi iş için değil ama X olmadan neler yapılabildiğini gösteren stillendirilmiş bir fbterm ekranı: https://i.imgur.com/RbDRgtD.png

    • Açık temaların ekrandan ekrana daha incelikli farklı görünmesi şaşırtıcı değil. Filmle analog siyah-beyaz baskı yapıyorum; insan gözünün, baskının koyu alanlarına kıyasla açık alanlardaki ince ton değişimlerini çok daha iyi algıladığı iyi bilinir
      Bu yüzden uygun pozlama ve kontrastı tuttururken, highlight'ların “tam doğru” görünmesini ayarlamak için epey zaman harcıyorum. Dijital baskı yapmıyorum ama aynı ilke burada da geçerli gibi görünüyor
    • Normalde düzgün ayarlanmış TERM değişkenine güvenebilmeniz gerekir ve komut satırı araçları da TERM değişkeninden anlaşılabilen yeteneklere saygı göstermelidir
      Ne yazık ki çoğu JavaScript ile yazılmış “modern” komut satırı araç çerçeveleri bunu görmezden gelme eğiliminde
      https://www.gnu.org/software/gettext/manual/html_node/The-TE...
    • Kısa süre önce bir Excel grafiğinde çok sayıda veri serisini farklı renklerle göstermeye çalışıyordum; çok sayıda rengi kolayca ayırt etmek için en iyi seçim, siyah arka plan üstünde tek renk spektrumundan oluşan gökkuşağı renkleri oldu
      Veri noktalarına aynı rengin hafif bir “parlama” efekti verme seçeneği de vardı; böylece ışıldayan noktalar gibi görünebiliyorlardı. Renk doygunluğu açısından, yani tüm spektrum boyunca sinyal-gürültü oranı açısından siyah arka planın daha iyi olması mantıklı geliyor
      Yaklaşık 10 farklı rengi neredeyse sorunsuz kullanabiliyorsunuz. Ayrıca sarının kırmızı ile yeşil arasında, turuncunun da kırmızı ile sarı arasında olması gibi sıra/mesafe bilgisi taşıma avantajı da var; bu sayede grupları alt bölümlere ayırmak ve iki rengin birbirine ne kadar yakın olduğunu yorumlamak kolaylaşıyor
    • Harika yazı tipleri ve göze hoş gelen renk temaları olsa bile, bazı karakterleri okunması zor hale getiren tek bir arka plan her şeyi mahvedebilir
  • Aslında o kadar zor olduğunu düşünmüyorum

    1. adım: Çoğu terminal emülatörünün varsayılan renk paleti berbat, bu yüzden değiştirmeniz yeterli. Ben şahsen Solarized, özellikle de koyu temayı seviyorum ama açık tema da fena değil. Solarized olmasa bile, varsayılan arka plan üzerinde hangi renk olursa olsun okunabilen pek çok tema var
    2. adım: Varsayılan olarak 8 bit veya 24 bit renk escape sequence kullanan komut satırı araçlarından kaçınmak gerekir. Tartışmalı olabilir ama bana göre bu kullanıcıya düşmanca. Ben zaten okunabilirlik gereksinimlerime uyan en iyi terminal renk paletini seçmişken, geliştiricinin kendini sahte bir tasarımcı sanıp bunu ezmesi yardımcı olmuyor. Araç içinde bir tema açma seçeneği sunabilirler ama bu varsayılan değil, isteğe bağlı olmalı
      Hayatının çoğunu terminalde geçiren biri olarak, yalnızca bu iki kurala uyulsa bile neredeyse hiç yapılandırma yükü olmadan tutarlı ve okunabilir bir terminal ortamı oluşturulabilir. Asıl sorun, geliştiricilerin 8 bit ve 24 bit renk escape kodları kullanmasını fazla hoş görmemiz
    • Bu, iyi varsayılanlar meselesiyle de bağlantılı. Kullanıcının ayar yapması gerekiyorsa, önce bunun ayarlanabildiğini bilmesi ve sonra gerçekten ayarlaması gerekir. Bu büyük bir engel ve çok az kullanıcı bunu başarır
      Yıllar içinde, yeni özelliklerin kullanıcıya görünür şekilde sunulması ama iyi varsayılanların da güçlü biçimde dayatılması gerektiği sonucuna vardım. Yoksa özellikler neredeyse hiç kullanılmıyor
      8 bit ve 24 bit renk zaten isteğe bağlı kullanılan bir özellik ve ayarlanabiliyor. Düzgün çalışan bir terminal programında TERM ve COLORTERM ortam değişkenleri böyle renklerin kullanılıp kullanılmayacağını belirler
    • Özellikle Solarized Dark, terminal kullanımı için pek uygun değil. Çünkü yazarı “bright black” rengini arka planla neredeyse aynı renge ayarlamış
      Birçok uygulama, “bright black” metnin arka plan üzerinde görünür olacağını varsayar. Burada pek çok örnek var: https://github.com/altercation/solarized/issues/220
      Neredeyse tüm diğer renk paletleri “bright black”i siyah arka plan üzerinde okunabilen bir gri olarak gösterir
    • Varsayılan arka plan üzerinde her rengin okunabildiği temalar olsa bile, hem metin hem arka plan rengini birlikte belirleyen uygulamalar var
      Örneğin pamix arka planı siyaha ayarlıyor; tmux durum çubuğu ya da ngrok da benzer davranıyor. Sonra bunu çözmeye çalışırken tavşan deliğine düşüyorsunuz
    • Önce “en iyi ele alma biçimi nedir?” diye sormak gerekir ama burada iyinin ne olduğunu tanımlamak lazım. Ben şahsen kullanıcı özelleştirmesinin tek bir yerde olması ve programlara etkisinin kod satırı sayısı gibi açılardan en aza indirilmesi ilkesini tercih ediyorum
      İkisi de çözümün terminalde olması gerektiğini ima ediyor. Terminal programı en baştan makul varsayılan renklere sahip olmalı; mavi, ayırt edilebilir olacak kadar mavi olmalı ve yaygın renk görme bozuklukları da hesaba katılmalı. Örneğin saf kırmızı siyah arka plan üzerinde zor okunur; bu yüzden sadece ff0000 kullanmak yerine içine biraz başka ton karıştırmak daha iyidir
      Terminal makul varsayılanlara sahip olduğunda, komut satırı programları standart 16 rengi kullanabilir. Burada 24 bit renk kullanma girişimi daha çok “terminal tarafının normalliği sağlamasından vazgeçtim” ya da “en iyisini ben bilirim” anlamına geliyor ve sonuçta kullanıcı N tane programı tek tek ayarlamak zorunda kalıyor. Komut satırı uygulamalarının içine tema tanımlamamak bence en iyi yaklaşım
      Web siteleri ve yazı tiplerine de benzer bakıyorum. İçerik HTML olarak sunulmalı ki kullanıcı istediği şekilde görüntüleyebilsin; sayfa düzeni de dergi mizanpajı gibi sabit değil, akışkan olmalı
      Masaüstü yazılımlarda da benzer. Wayland compositörü pencere konumlarını hatırlamalı. Her X programının kendi pencere konumunu kaydedip geri yüklemesi aptalcaydı. Wayland, ortam bilgisini bilmenin bir güvenlik sorunu olduğunu söylüyor; buna katılıyorum ama o zaman bu hatırlama işi masaüstü ortamının görevi olur. Böylece her uygulamadan ilgili kod da çıkarılabilir
      “Bunu yazılım yığınının neresinde ele almalıyız?” sorusu birçok alanda tekrar ediyor. Nereye koyacağınızı seçerken önce hedefin ne olduğunu cevaplamalısınız; benim cevabım her zaman sadelik ve bakım kolaylığına doğru eğiliyor
    • Varsayılan olarak 8 bit veya 24 bit renk escape sequence kullanan komut satırı araçlarından kaçınmanın pratikte ne kadar zor olduğunu merak ediyorum
      Julia’nın yazısı da bu fikre değiniyor ama somut sıkıntılara kadar inmiyor. Bununla bağlantılı olarak, terminal renk paletinin yalnızca varsayılan 16 renki mi ele aldığı, yoksa RGB ve gri tonlama alanlarına da dokunup dokunmadığı da merak konusu. Sonuçta 8 bit ve 16 bit renkler de okunabilirlik gereksinimlerine göre ayarlanabilir
  • Renk seçen biriyseniz, yeni APCA algoritmasıyla (Advanced Perception of Colour) renkleri kontrol etmek iyi olabilir
    APCA, ileride WCAG 3.0’da mevcut x:y kontrast yönteminin yerini alacak ama bunun için muhtemelen birkaç yıl daha var. Yazı tipi boyutu, kalınlık, ön plan/arka plan, hatta ortam ışığı ve çevre ile amaçlanan kullanımın bile hesaba katıldığı söyleniyor
    Terminal emülatörü cihazın ışık sensörünü kullanarak çevresel etkenlere göre kontrastı optimize edebilse oldukça hoş olurdu

    • Şu an kullandığım terminal renk paletini de bizzat böyle ayarladım. Çünkü tüm ANSI renkleri için kişisel kontrast gereksinimlerimi karşılayan hazır bir tema bulamadım
  • Rengi tamamen kapatmak isteyen tam anlamıyla çılgın insanlar da var[0]. Kendim de denemek istiyorum ama güzel renkleri de seviyorum
    [0] https://no-color.org/

    • Benim tek Vim ayarım :syntax off. Çünkü terminal renk setleri bilgisayar programcıları, elektrik mühendisleri ve renkte önemli olan şeyin rengin kendisi değil parlaklık olduğunu bilmeyen insanlar tarafından tasarlanmış
    • Tek renkli terminale alışınca çoğu rengin dikkat dağıtıcı ve ilgiyi üzerine çeken bir şey gibi gelmeye başladığını fark ediyorsunuz
      Terminalde renk istemeyen kişilerle, tarayıcıda güçlü reklam engelleyiciler kullanan veya okuma modunu sık kullanan kişiler arasında bir korelasyon olup olmadığını merak ediyorum
    • Renk sekanslarının taşınabilir olmadığı ve sorun çıkardığı biliniyor. Örneğin renkli pytest raporu yüzünden Jupyter oturumunun çöktüğü durumlar olabiliyor
      Çıktıyı pipe ile aktarırken renk, hiçbir fayda sağlamadan sadece yük oluyor. Esas mesele daha çok seçim hakkı
    • Ben de o taraftayım. Özellikle kod yazarken neredeyse tüm renklendirmenin dikkat dağıtıcı ve ters etki yaratan bir şey olduğunu düşünüyorum
      Linux ve Windows arasında gidip gelince bu daha da kötüleşiyor. Birçok aracın varsayılan renk kullanımı neredeyse kullanılamaz düzeyde ya da gerçekten kullanılamaz hale getiriyor
      Bazı araçlar --color=never seçeneği sunuyor ve epey araç NO_COLOR'a saygı gösteriyor. Ne yazık ki hepsi değil; bunu yaptığını söyleyen araçlar bile bu modun yalnızca pipeline veya programlama arayüzleri için kullanılacağını varsayabiliyor. Bu yüzden türlü talihsiz davranışlar ortaya çıkıyor
    • Ben de o yöne gidiyorum. zenbones'a bakarken sonunda https://github.com/savq/melange-nvim üzerinde karar kıldım
      Anlamlı bir renk sıcaklığı fikrine sahip tutarlı bir paleti var ve çok fazla mavi tona bakan gözleri daha az yormak için sıcak tarafa kayıyor. Bir alacritty paleti de birlikte geliyor
  • Uzun zamandır terminalde açık tema kullanmak istiyordum ama koyu terminal arka planına göre optimize edilmiş kullanıcı tanımlı ANSI dışı renkler kullanan çok fazla program olduğu için hep vazgeçiyordum
    Bazı programlarda renkler ayarlanabiliyor ama tüm programları tek tek yapılandırmak fazla zahmetli geliyordu. Bu yüzden şu anda koyu terminal arka planı kullanıyorum ama tüm renklerin benim ölçütlerime göre yeterli kontrast oranına sahip olduğu ve APCA/WCAG 3 kontrast kontrolünü geçtiği bir ANSI temasını elle seçip kullanıyorum. Memnunum :)

    • Yüksek dereceli görme aberasyonları olan kişiler için koyu mod zaten bir seçenek değil. Tersine, kataraktı olan bazı kişiler için de açık mod öyle olabilir
      OSC 11 kontrol sekansı kullanılırsa programlar arka plan rengini öğrenebilir ama buna dikkat eden program neredeyse yok. Genelde birisi sarı uyarı mesajlarının havalı göründüğünü düşündüğünde iş orada bitiyor
      Bu da başka bir soruna yol açıyor. xterm uyumlu olmadığı halde varsayılan olarak TERM=xterm256-color ayarlayan popüler terminaller var
      Düzenleme: az önce xtermcontrol'u keşfettim; betiklerde arka plan denetimini soyutlayabiliyor ve tüm büyük paket yöneticilerinde mevcut
    • Bir süre bu yapılandırma cehenneminden kaçmak için 256 renk desteklemeyen 16 renkli terminal gibi davrandım. Kötü renktense renksizliğin daha iyi olduğunu düşündüğüm için https://no-color.org/ da denedim
      Bugünlerde pes ettim ve çoğu uygulamayı ANSI renk kullanacak şekilde elle ayarlıyorum. Örneğin fzf gibi araçlarda komut satırı anahtarı var. Sadece Vim ve Emacs'ı ANSI dışı uygulamalar olarak bırakıp geri kalanını terminalde kullandığım palete göre ayarlıyorum. İstersem vim-dim gibi bir şeyle bir adım daha ileri gidebilirim
    • trinity/tde3'ün konsole'u gibi birçok terminalde varsayılan renkler doğrudan ayarlanabildiği için bu yardımcı oluyor
    • macOS'taki iTerm ve kullandığım programlarda, örneğin neovim'de, sorun yaşamadım; varsayılan haliyle de iyi görünüyordu
  • Emacs'ta pek fark edilmeyen bir frame-background-mode[0] var; aslında sadece light veya dark değerlerinden biri
    Emacs'ın neden bazı öğeler için garip renkler seçtiğini merak ettiğinizde, çoğu zaman sorun frame-background-mode'un yanlış olması oluyor
    [0]https://doc.endlessparentheses.com/Var/frame-background-mode...

  • Neredeyse 10 yıldır biraz değiştirdiğim FlatUI paletini kullanıyorum ve gerçekten sorun çıkardığı durum neredeyse hiç olmadı
    png dosyası: https://drive.google.com/file/d/1mkMESeGf7MNdKa-rPDx7Yf9BDit...
    imgur bağlantısı: https://imgur.com/a/flatui-7mqVZAY
    temel aldığı kaynak: https://flatuicolors.com/palette/defo

    • Atom editöründen çıktığını hatırladığım One Dark temasına benziyor
      Ben de kendi temamı neredeyse 10 yıldır kullanıyorum. iTerm, vim, Emacs, vscode vb. ortamlarda iyi çalışıyor
  • Apple Terminal’i uzun süre kullandım; eskiden “Terminal Fructose” diye güzel bir renk paleti koleksiyonu vardı, ben de işe göre farklı arka plan renkleri kullanırdım. Apple da bir noktada bunu tema olarak yerleşik hale getirdi
    Ama Apple, Terminal desteğini uzun zamandır ihmal ediyor; 256 rengin üstünü desteklemiyor ve daha modern özelliklerden de yoksun. Neovim+LazyVim yapılandırmasıyla da pek uyumlu değil
    Daha iyi bir terminal bulmak için iTerm2, Kitty, Alacritty ve Wezterm arasında gidip geldim; hepsi daha modern olsa da birden fazla arka plan rengi/teması olan pencereleri hızlıca açmaya yarayan temel “New Window with Profile ...” seçeneği yok gibiydi. En azından biraz uğraşmadan yoktu
    Şimdi Wezterm’de karar kıldım; başlıca nedeni Windows’ta da çalışması ve wezterm.lua ayarını paylaşabilmem. Bu arada Windows Terminal da aslında oldukça iyi. Yine de python3’ü REPL olarak kullanıp hesap yapmak ya da onaltılık/ikilik testleri yapmak gibi hızlı işler için hâlâ Apple Terminal’i açıyorum

    • iTerm’de tam olarak bu özellik var
    • İlginç. Ben “new tab with profile” desteği yüzünden Apple Terminal’i çok hızlı bırakıp iTerm2’ye geçmiştim
    • Wezterm’i kullanmaya devam etmemin iki nedeni var. Ayarları farklı platformlar arasında kolayca paylaşabiliyorum ve yapılandırma dili Lua
      iTerm2’den özlediğim birkaç özellik var ama çoğu fareyle ilgili. Onun dışında birkaç akşam içinde istediğim gibi ayarladım ve cmd-n’in yeni pencereyi mevcut dizinde değil varsayılan dizinde açmasını sağladıktan sonra memnun şekilde kullanıyorum
    • WezTerm’e “New Window with Profile...” eklemek istiyorsanız, farklı bir shell başlatan launch_menu [1] ya da komut paletine öğe ekleyen augment-command-palette [2] tarafına bir şeyler hack’leyerek ekleyebilirsiniz gibi geliyor
      [1] https://wezfurlong.org/wezterm/config/lua/config/launch_menu...
      [2] https://wezfurlong.org/wezterm/config/lua/window-events/augm...
      Evet, biraz uğraşmak gerekiyor. Ama çok spesifik bir özelliği tam istediğiniz şekilde programlayabilmek, WezTerm deneyiminin zirvesi
    • KDE terminali Konsole bunu destekliyor. Menüden yapabilirsiniz ya da yeni sekme simgesine uzun basabilirsiniz. MacOS’ta da kullanılabildiğini sanıyorum
  • Sadece terminalde değil, neon tabelalarda ya da LED tabelalarda da mavi renk gece gözü en çok yoruyor
    Uzaktan bakınca hep bulanık görünüyor ve odaklanmıyor. Büyük şirketlerin mavi ışıkla dev tabelalar astığını görünce, insanların bunu okuyamadığını fark etmeden bu kadar para harcamaları şaşırtıcı geliyor

  • Dizüstü bilgisayarımda aydınlık/karanlık modu gün ışığı döngüsüne göre otomatik değişecek şekilde ayarladım; açık arka plan üzerine koyu yazı moduna geçince bozulan renk çıktısı veren uygulama sayısı şaşırtıcı derecede fazla
    Komut satırı aracı yaparken ille de renk kullanmanız gerekiyorsa ya yalnızca ANSI 16 rengi kullanın ya da son kullanıcının renk paletini değiştirebilmesini sağlayın