1 puan yazan GN⁺ 2023-11-10 | 1 yorum | WhatsApp'ta paylaş
  • Monaspace, sabit genişlikli ızgarayı korurken kod ekranına daha zengin tipografik ifade katmak için tasarlanmış yeni bir yazı tipi sistemidir
  • Temel özellik olan Texture Healing, bitişik karakter çiftlerindeki boşluk dengesizliğini alternatif gliflerle düzelterek sabit genişlikli metindeki yoğunluk farkını azaltır
  • Bu yaklaşım, OpenType’ın contextual alternates özelliğini kod yazı tiplerine uyguluyor; ayrı bir editör eklentisi olmadan çoğu editörde kullanılabiliyor ve Visual Studio Code ayarları da sağlanıyor
  • Monaspace; 200~800 kalınlık, 0~-11° eğim ve 100~125 genişlik eksenlerini sunuyor, ayrıca dile özgü kod ligatürleri stil setleriyle açılıp kapatılabiliyor
  • GitHub Next, bu yazı tipini 2022’den beri Lettermatic ile birlikte geliştiriyor ve kod gösterimini geliştirme araçlarının kullanabileceği daha geniş bir ifade alanına dönüştürmeyi hedefliyor

Sabit genişlikli kod ekranını genişleten bir yazı tipi sistemi

  • Monaspace, kod için tasarlanmış bir yazı tipi “superfamily”sidir ve ekranda kodun gösterilme biçimini geliştirmeye odaklanır
  • Kod, teletype döneminin başlangıcından beri sabit genişlikli yazı tipleriyle gösteriliyor; Monaspace ise bu ızgarayı korurken daha fazla anlam taşımayı amaçlıyor
  • Mevcut editörler, renk tabanlı sözdizimi vurgulamanın ötesindeki bilgileri çoğu zaman hover, altı çizili öğeler ve grafik süslemeler gibi arayüz unsurlarıyla aktarıyor
  • Monaspace, kodun ve geliştirme araçlarının kullanabileceği daha ifade gücü yüksek bir paleti yazı tipi düzeyinde sunuyor

Copilot önerileri ve tipografi

  • Copilot benzeri kod önerileri, Monaspace sayesinde ayrı bir tipografik ses kazanabiliyor
  • Ghost text, önerilen kodu ayrıştırmayı ve değerlendirmeyi zorlaştırabiliyor
  • Yazı tipinin ifadesi, hangi bölümlerin önerilen kod olduğunu doğrudan gösterirse bu kod parçalarını sonradan da ayırt etmek kolaylaşıyor

Texture Healing’in hedeflediği sabit genişlikli yazı tiplerinin sınırları

  • Sabit genişlikli yazı tipleri, tüm karakterleri aynı genişlikte kutulara yerleştirdiği için metin yoğunluğu düzensiz hale gelir
  • l, i gibi dar karakterler, kutuyu doldurmak için abartılı seriflere ihtiyaç duyar ve buna rağmen gerekenden fazla boşluk kalır
  • m, w gibi geniş karakterler kutunun içine sıkıştırılır; biçimleri bozulur, çizgileri incelir ve iç boşlukları da sınırlanır
  • Bu kısıtlar, 1960’lardaki teletype döneminden beri süregelen sabit genişlikli yazı tiplerinin yapısal sorunudur

Texture Healing nasıl çalışıyor

  • Texture Healing, alanı dar olan karakterlerle yanında boşluk kalan karakterlerden oluşan çiftleri bulup glifleri değiştirir
  • Dar karakterler, boşluğunun bir kısmını komşusuna bırakan alternatif gliflere dönüşür; geniş karakterler ise kutunun kenarına kadar uzanan alternatif gliflere dönüşür
  • Bu özellik, OpenType’ın contextual alternates yeteneğiyle uygulanır
    • contextual alternates, çevresindeki karakterlere göre glif biçimi değişen Arap yazısı veya el yazısı fontlarda yaygın olarak kullanılır
    • Monaspace, bu tekniği kod için sabit genişlikli yazı tiplerine uygular
  • Ortaya çıkan metin yine de sabit genişlikli ızgaraya uyar
  • Visual Studio Code’da Texture Healing’i açma yöntemi Monaspace belgelerinde yer alıyor

Yazı tipi eksenleri ve stiller

  • Monaspace’in kalınlık ekseni 200’den 800’e kadar sunuluyor
    • 200: Extra Light
    • 300: Light
    • 400: Regular
    • 500: Medium
    • 600: Semibold
    • 700: Bold
    • 800: ExtraBold
  • Eğim ekseni 0 ile -11° arasında sunuluyor
    • 0: Normal
    • -5.5°: bazı karakterlerin oblique’den italic forma geçtiği ara nokta
    • -11°: Italic
  • Genişlik ekseni 100’den 125’e kadar sunuluyor
    • 100: Normal
    • 112.5: Semiwide
    • 125: Wide
  • Monaspace; Neon, Argon, Xenon, Radon ve Krypton gibi aile adlarını içeriyor

Kod ligatürleri ve OpenType ayarları

  • Monaspace, farklı programlama dilleri için kod ligatürleri içeriyor
  • Ligatürler stil setleri halinde düzenlenmiş; kullanıcılar istedikleri setleri ayrı ayrı açıp kapatabiliyor
  • Her stil seti, belirli bir dilin ihtiyaçları kabaca temel alınarak tasarlanmış
    • ss01: JavaScript’te sık görülen karakter dizileri için ligatürler içerir
    • ss05: F# operatörleri için ligatürler sunar
  • Ek OpenType özellikleri de mevcut
    • calt: Texture Healing’i etkinleştirir
    • liga: ///, || gibi tekrar eden karakterlerin aralığını ayarlar ve //// gibi daha uzun dizilerin içinde etkinleşmeyecek şekilde tasarlanmıştır
  • Visual Studio Code’da settings.json içindeki editor.fontLigatures alanına istenen özellikler ve stil setleri yazılarak etkinleştirilir

Geliştirme ve dağıtım

  • Monaspace, tüm geliştiriciler için kod gösterimini iyileştirme amacıyla oluşturuldu
  • GitHub Next, bu çalışmaya 2022’de başladı ve yazı tipini Lettermatic ile birlikte geliştirdi
  • Katkıda bulunanlar listesi, belgeler ve yazı tipi dosyaları Monaspace repo içinde bulunabilir
  • İndirme bağlantısı GitHub deposunda sunuluyor

1 yorum

 
GN⁺ 2023-11-10
Hacker News görüşleri
  • Texture Healing özelliği, OpenType özelliklerini çok akıllıca kullanarak sorunlu sabit genişlikli yazı tipi kombinasyonlarını ızgarayı hiç bozmadan çok daha iyi görünür hale getiriyor.
    Basit bir yaklaşımda mi, lm gibi zor harf çiftleri için ligatür yapılırdı; burada ise çevredeki harflere göre sabit genişliğin içini farklı şekilde dolduran alternatif glifler seçiliyor gibi görünüyor.

    • Commit Mono da benzer bir şey yapıyor ve buna Smart kerning diyor. Ayrıntılar için https://commitmono.com/ adresindeki “04 Intelligent” sekmesine bakılabilir.
      Pratikte kullanması zor. Harf genişliği, ardından gelen harfe göre değiştiği için yazarken metin zıplıyor. Okurken hoş, yazarken berbat.
    • Gerçekten çok akıllıca bir teknik. Daha da şaşırtıcı olan, bunun çok uzun zamandır mümkün olmasına rağmen kimsenin aklına gelmemiş olması.
      Bu tekniği bu projenin parçası olarak geliştiren Riley Cran ve https://lettermatic.com ekibinin tamamı harika iş çıkarmış.
    • Pek ikna olmuş değilim. Onay kutularını birkaç kez açıp kapatınca tutarsızlıklar görünmeye başlıyor.
      Örneğin varsayılan örnekteki time_limit içinde ikinci m, iki yanında da i olduğu için “büyüyebileceği” daha fazla alana sahip; bu yüzden ilk mden belirgin biçimde daha geniş görünüyor. Bunun iyi bir şey olup olmadığından emin değilim.
    • Burada birçok kişi texture healing’i övüyor ama bana yarım yamalak bir önlem gibi görünüyor. Topluluk olarak değişken genişlikli yazı tiplerini benimsemekte neden bu kadar isteksiziz?
      Bu texture healing de zaten kusursuz karakter hücresi ızgarasını bozuyor; bu açıdan iki tarafın dezavantajlarını da taşıyor gibi.
      Gösterişli ligatürlere de bir ölçüde benzer bakıyorum. Kaynak kodda gerçek karakterler kullanılabilir ve Unicode yaygın biçimde destekleniyor. Raku bunu yapıyor, ama gerçekten parlaması için değişken genişlikli yazı tipleri dahil daha iyi dizgi gerekiyor.
  • İlk başta “bir başka sabit genişlikli yazı tipi ailesi daha, güzel görünüyor” diye düşündüm; ama texture healingi görünce mutlaka denemek istedim.
    Farklı kullanım alanları için farklı stilde yazı tipleri kullanma fikrini gerçekten sevdim. Yalnız çoğunlukla terminal kullandığım için hangi terminallerin bunu desteklediğini bilmiyorum; komut satırı metin düzenleyicilerinin de desteklemesi gerekecek gibi. Yine de harika bir fikir olduğunu düşünüyorum.

    • Teorik olarak xterm tabanlıysa mümkün olmalı. ESC[<10-19>m, 0–9 yazı tiplerini seçen kaçış dizisi.
      Gerçekte çalışıp çalışmadığı başka mesele. Alacritty kullanıyorum; destekleyip desteklemediğini bulamadım, kendim denediğimde de sonuç alamadım.
  • Mix & Match örneklerini nasıl gördüğünüzü merak ediyorum.
    El yazısı tarafındaki Radon fiilen italik gibi görünüyor ve diğer yazı tipleriyle iyi uyum sağlıyor. Ama geri kalanların metrikleri vb. fazla benzer; “otoriter belge dizgesi” ya da “Copilot sesi” örneklerini ayırt etmek epey zor.

    • Mix & Match yüzünden bu yazı tipini denemeye karar verdim. Ben gerçek italikleri yüzünden Operator Monoyu yıllardır kullanıyordum.
      Uzun zamandır Operator Mono’ya açık bir alternatif arıyordum; Mix & Match sayesinde bunun sonunda o alternatif olabileceğini düşündüm.
    • Sayfayı aşağı kaydırmadan önce bile aklıma gelen ilk düşünce buydu. El yazısı yorumlar harika; kodu gözden geçirirken yükü azaltan başka bir ayırt edici unsur oluyor.
      Sevmeyecek olanlar da vardır, ama kişisel olarak denemek isterim.
    • Örnekler arasında gezinirken Radon varyantına gelene kadar kod örneği kutusunda neyin değiştiğini fark etmedim.
      Diğer varyantlar bilgi aktarmak için yeterince farklı değil.
    • Farklı yazı tiplerinin nasıl ayarlandığını bilmiyorum. İlk denemek istediğim şey buydu ama yöntemini bulamadım. Apaçık bir şeyi mi kaçırıyorum?
    • Bu fikri gerçekten sevdim. Halihazırda bir yerde destekleniyor mu, yoksa geleceğe yönelik bir şey mi?
  • Oldukça fazla ligatür eklenmiş, ama benim için hâlâ yetersiz. Artık != ve <= zaten temel beklenti; Fira Codeun *ptr içinde * yüksekliğini hizalaması, X:Y içinde : işaretini ortalaması ya da 0xFF içinde xi yukarı alması ne kadar güzel, sürekli gözüme çarpıyor.
    Krypton varyantının görünümünü neredeyse sevecektim, ama küçük t harfinin yatay çizgisi küçük c gibi harflerin yüksekliğine göre çok aşağıda. Bu yüzden şimdilik Fira Code kullanmaya devam edeceğim; kullanıcı geri bildirimlerinden yaklaşık bir yıl sonra nelerin değiştiğine yeniden bakmayı düşünüyorum.

    • Örnek tanıtım sayfası için, bağlantılı sitedeki örneklerde /** içindeki iki * işaretinin hizasız olması garip.
      Bu özellikle // What if tentative ideas looked handwritten? ve /** * What if docstrings looked authoritative? */ gibi örneklerde görülüyor.
  • Fikir iyi ama PragmataPro gibi dar yazı tiplerini neden daha fazla görmediğimizi merak ediyorum.
    Neredeyse 10 yıldır kullanıyorum ve bu alanda daha fazla seçenek olsa güzel olurdu; ama kimse o kadar dar gitmek istemiyor gibi. Berkeley Graphics, Berkeley Mono’nun dar bir sürümünü neredeyse 1 yıldır duyuruyor ama hâlâ bir gelişme yok.
    Burada Monaspace’te de bir genişlik kaydırıcısı var, ancak başlangıç noktası “PragmataPro’dan daha geniş” ve sonu “saçma derecede geniş”e gidiyor gibi hissettiriyor. Neden dar sürüm tarafına da inmesine izin vermediklerini merak ediyorum.

    • Tamamen katılıyorum. PragmataPro’yu her gün kullanıyorum ve diğer her şey fazla geniş geliyor.
      Varsayılan Iosevka yakın ama satır aralığı çok daha büyük. Neyse ki ayarlarda leading = 1110 yapınca neredeyse aynı olacak şekilde özelleştirilebiliyor. Bu değeri deneme yanılmayla buldum.
    • Quinze’i denedin mi? https://www.programmingfonts.org/#quinze
      En dar yazı tipini ararken cevabın Quinze olduğunu fark ettim. Iosevka veya M+’tan kabaca %20 daha dar. PragmataPro ile kolayca karşılaştıran bir kaynak bulamadım ama Iosevka, PragmataPro’nun ücretsiz bir yorumuysa Quinze de daha dar olacaktır.
      Gerçekte Quinze o kadar dar ki tarayıcıdaki tüm sabit genişlikli metinlerde zorla kullandırınca okunabilirlik iyileşmek yerine kötüleşti. Çünkü aynı yükseklikte “normal” yazı tiplerinden çok daha küçük görünüyor. Kodlama ortamında yazı tipi boyutunu büyüterek kullanıyorum; dar genişlikle iyi uyuyor.
      Dezavantajı, Quinze’in çok minimalist olması. Neredeyse sadece ASCII var, ligatür yok, özelleştirme de yok. Ben bunlardan rahatsız olmuyorum.
    • Iosevka da epey dar ve popüler. İstediğin ölçüte uyup uymayacağını bilmiyorum ama bakmaya değer.
    • M+’ı az önce öğrendim; “60” varyantı epey hoşuma gitti. Varsayılan genişlik olan 50 benim için fazla dardı ve zevkime göre 50 varyantında okunabilirlik düşüyor gibi.
      Yine de istediğin kadar dar olabilir.
      https://mplusfonts.github.io/
    • Dar yazı tipleri açılmışken, iyi bir dar serif yazı tipi önerisi olan var mı? Ücretli ya da ücretsiz fark etmez.
      Tarayıcıda Times yerine “Bell MT” kullanıyorum; emacs Org mode’da değişken genişlikli yazı tipi olarak da kullanıyorum ve iyi, ama daha büyük ve dar bir sürümü olsa güzel olurdu.
      Ayrıca iyi dar sabit genişlikli yazı tiplerinden biri de “The Sans Mono Condensed”; ilk dönem O’Reilly kitapları sayesinde ünlenmişti. Sonrasında O’Reilly başka bir sabit genişlikli yazı tipine geçti. Dezavantajı yalnızca Batı karakter kümesini içermesi, ama ben çok sevmiştim.
  • Sayfadaki Radon sembolünün Rd olması canımı sıkıyor. Radon ise Rn olmalı.
    Radium Ra, Radon Rn; gerçekten R ile başlayıp adında d geçen başka bir element var mı diye tekrar kontrol etmeme neden oldu.

    • Ben de bunu gördüm ve sonrasında düzeltilmiş.
    • Rhodium var ama sembolü Rh.
  • mono flag ayarlanmadığı için yazı tipini yüklemek üzere GTK2 gvim ile denemek zorunda kaldım.
    % ttfmono MonaspaceArgon-Regular.otf sonucu monospaced flag = 0 ve 0 = variable-width, otherwise = monospaced olarak çıkıyor.
    Ne yazık ki bu bayrak yüzünden ligatürler etkinleşmiyor gibi.
    Yine de yamalı st üzerinde çalışan vim’de ligatürleri ve texture healing’i görebildim; gerçekten hoşuma gitti. Yazarken satır sadece çok hafif oynuyor ve imleç üzerinden geçtiğinde, örneğin genişleyen m yüzünden art görüntü de kalmıyor. Kod için iyi tasarlanmış.
    Bir özellik isteyebilseydim, köşeli 0’a ters eğik çizgi eklemek veya != ligatüründe ! işaretini bırakmak gibi bazı varyantları seçebilmeyi isterdim. Ne demek istediğim burada görülebilir: https://github.com/be5invis/Iosevka/blob/main/doc/stylistic-...
    https://st.suckless.org/patches/ligatures/

    • Emin misin? macOS’ta Font Book’ta “Fixed Width” yazı tiplerinin altında görünüyor.
      Bugün yayımlanan sürümü kullanıyorum; yakın zamanda düzeltilmiş olabilir.
    • KDE Konsole’da da aynı sorun var: https://imgur.com/a/Dj1HZiu
      “Show all fonts” onay kutusunu açıkça açmak gerekiyor ki “sabit genişlikli olmayan” yazı tipleri de görünsün.
  • Modern sistemlerde artık kod yazı tipleri de sabit genişlikli yazı tiplerinin ötesine geçebilir gibi.
    Burada birkaç kez önerdim ama ben orantılı kodlama yazı tipi olan Input Sans kullanıyorum.
    https://input.djr.com

    • Neden önerdiğini merak ediyorum.
      Bu yazı tipinde yazım hatalarını bulmak daha zor olabilir gibi görünüyor.
    • Kodlama için orantılı yazı tipi kullanmak istiyorum ama bunu düzgün destekleyen bir Vim ön yüzü pek bilmiyorum.
      SSH üzerinden Vim kullanırken sabit genişlikli kullanmaya devam etmek sorun değil; ancak Neovim sayesinde birçok ön yüz ortaya çıkmış olsa da orantılı yazı tiplerini destekleyen neredeyse hiç yok gibi. Destekleyenler de kullanımı eziyet olacak kadar yavaş olma eğiliminde.
    • >= işaretini olarak değiştiren ligatürü destekliyor mu? Telefonda web önizlemesini denedim ama bu Android Firefox’un bir sınırlaması da olabilir.
      Bu arada ligatür dediğim şey şu: https://fonts.google.com/knowledge/glossary/ligature
  • Böyle yazı tiplerinde noktalı 0’ın nasıl standart gibi hâle geldiğini hep kafa karıştırıcı buluyorum. Ben onu sürekli 8 ile karıştırıyorum; bu yüzden eğik çizgili 0’ı çok daha fazla tercih ediyorum
    Böyle bir varyantı varsa bu yazı tipini mutlaka denemek isterim

    • Bazı dillerde eğik çizgili daire bir harf olduğu için eğik çizgili 0 kafa karışıklığı yaratabilir. Noktalı 0’da bu yönde karışma olasılığı çok daha düşük
      Yazı tipi tasarımcısı, noktalı 0’ın dışbükey yanlarını ve 8’in içbükey yanlarını vurgulayarak görsel olarak ayırt etmeyi sağlayabilir; ama bu yazı tipinin bunu yapıp yapmadığını bilmiyorum
    • Issue’da eğik çizgili 0 önermiştim; biri noktalı 0’ın da aynı amaca hizmet ettiğini söyleyerek yanıt verdi. Gerçekten sinir bozucu
  • Texture healing gerçekten zekice ve güzel bir fikir
    Genellikle sabit genişlikte kullanılan Çince el yazısına da uygulamayı denemek isterim. Yaygın ama çok sıkışık karakterler, özellikle 邊鐵餐廳臺藥機麵顧露樓幫讓 gibi geleneksel Çince karakterler, fazladan alan alıp genişçe yayılabildiklerinde bundan büyük fayda sağlayacaktır