Monaspace
(monaspace.githubnext.com)- 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,igibi dar karakterler, kutuyu doldurmak için abartılı seriflere ihtiyaç duyar ve buna rağmen gerekenden fazla boşluk kalırm,wgibi 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çerirss05: F# operatörleri için ligatürler sunar
- Ek OpenType özellikleri de mevcut
calt: Texture Healing’i etkinleştirirliga:///,||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.jsoniçindekieditor.fontLigaturesalanı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
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,lmgibi 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.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.
Bu tekniği bu projenin parçası olarak geliştiren Riley Cran ve https://lettermatic.com ekibinin tamamı harika iş çıkarmış.
Örneğin varsayılan örnekteki
time_limitiçinde ikincim, iki yanında daiolduğu için “büyüyebileceği” daha fazla alana sahip; bu yüzden ilkmden belirgin biçimde daha geniş görünüyor. Bunun iyi bir şey olup olmadığından emin değilim.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.
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.
Uzun zamandır Operator Mono’ya açık bir alternatif arıyordum; Mix & Match sayesinde bunun sonunda o alternatif olabileceğini düşündüm.
Sevmeyecek olanlar da vardır, ama kişisel olarak denemek isterim.
Diğer varyantlar bilgi aktarmak için yeterince farklı değil.
Oldukça fazla ligatür eklenmiş, ama benim için hâlâ yetersiz. Artık
!=ve<=zaten temel beklenti; Fira Codeun*ptriçinde*yüksekliğini hizalaması,X:Yiçinde:işaretini ortalaması ya da0xFFiçindexi 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
tharfinin yatay çizgisi küçükcgibi 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./**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.
Varsayılan Iosevka yakın ama satır aralığı çok daha büyük. Neyse ki ayarlarda
leading = 1110yapınca neredeyse aynı olacak şekilde özelleştirilebiliyor. Bu değeri deneme yanılmayla buldum.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.
Yine de istediğin kadar dar olabilir.
https://mplusfonts.github.io/
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, RadonRn; gerçektenRile başlayıp adındadgeçen başka bir element var mı diye tekrar kontrol etmeme neden oldu.Rh.mono flag ayarlanmadığı için yazı tipini yüklemek üzere GTK2 gvim ile denemek zorunda kaldım.
% ttfmono MonaspaceArgon-Regular.otfsonucumonospaced flag = 0ve0 = variable-width, otherwise = monospacedolarak çı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şleyenmyü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/
Bugün yayımlanan sürümü kullanıyorum; yakın zamanda düzeltilmiş olabilir.
“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
Bu yazı tipinde yazım hatalarını bulmak daha zor olabilir gibi görünüyor.
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
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ı bilmiyorumTexture 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