Ghostty éçºãã° 001
åæã¯ Mitchell Hashimoto ã«ãã ã«å ¬éãããŸããã ãã®ããã°ã賌èªãã
Ghostty ð» ã®èšå¿µãã¹ãæåã®éçºãã°ã ïŒ Ghosttyã¯åã2021幎ãããµã€ããããžã§ã¯ããšããŠéçºããŠããã¿ãŒããã«ãšãã¥ã¬ãŒã¿ã ãå æ¥Ghosttyã®ååšãå ¬è¡šãããšããããã®ãããåé¿ããã£ãïŒ
ãŸã äžè¬å ¬éããæºåã¯ã§ããŠããªãïŒã§ãããããå®å šã«FOSSãšããŠå ¬éããããšã¯çŽæããïŒããã ãèšé²ãšããŠæ®ãæå³ããã£ãŠãã¿ãŒããã«ã®è©³çްãéçºã®é²æãå ±æããããã®éçºãã°ãå§ããããšã«ããããšã³ãžãã¢ãªã³ã°çã«é¢çœããã¿ã¯ãããããããšæã£ãŠãããããã®ãã°ã楜ããã§ããããããäœãã²ãšã€ã§ãåŠã³ãããã°å¬ããïŒãããã¯ãéã«åã«äœãæããŠãããããã£ãšå¬ããïŒã
ãã®éçºãã°ã¯ãã©ãããããã«ãžã¥ã¢ã«ã«ãã»ãŒäŒè©±ãããããªããŒã³ã§æžããŠããã€ããã ãäžå®ææŽæ°ã«ãªããå 容ã¯ã¿ãŒããã«ã«é¢ããããšãªãäœã§ãââæ©èœãå¥åŠãªãã°ãèªåã®ç¡ç¥ã£ã·ããŸã§ãäœã§ãããã§ããã
æè¡ã¹ã¿ãã¯
èšå¿µãã¹ãæåã®ãã°ãšããããšã§ããŸãã¯Ghosttyãæ¯ããæè¡ã¹ã¿ãã¯ã«ã€ããŠè©±ãããGhosttyã¯ã¯ãã¹ãã©ãããã©ãŒã ïŒçŸæç¹ã§ã¯macOSãšLinuxã«å¯Ÿå¿ããŠããããåŸã§WindowsãµããŒãã远å ã§ããããã«äœãããŠããïŒã§ãGPUã¢ã¯ã»ã©ã¬ãŒã·ã§ã³å¯Ÿå¿ã®ã¿ãŒããã«ãšãã¥ã¬ãŒã¿ã ã
- Zigã§èšè¿°
- Libxevã€ãã³ãã«ãŒãïŒGhosttyã®ããã«éçºããåãåºããããã®ïŒ
- Linuxã§ã¯OpenGLãmacOSã§ã¯Metal
- Linuxã§ã®ãã©ã³ãæç»ã¯FontconfigãFreetypeãHarfbuzz
- macOSã§ã®ãã©ã³ãæç»ã¯CoreTextãšHarfbuzz
- ããã³ããšã³ãã¯macOSãSwiftUIãLinuxãGTKãGLFWãªãã·ã§ã³ããã
- ãã®ä»ã»ãŒãã¹ãŠã¯Zigã§ãã«ã¹ã¯ã©ããã§æžãããŠãã
ãããããããªãéžãã ã®ããã«ã€ããŠã¯ä»åã¯èªããªããèå³ã®ãã人åãã«ãããã®ãŸãŸã®ã¹ã¿ãã¯ã䞊ã¹ãã ãã ã奜ãã«åãåã£ãŠã»ããã
ã·ã§ã«çµ±åã®èªåæ³šå ¥ïŒ#191ïŒ
ã§ã¯ãæåã®æ©èœã®è©±ããããïŒ
æè¿ã®ã¿ãŒããã«ãšãã¥ã¬ãŒã¿ã¯ãé©åã«èšå®ããã°ã·ã§ã«ãšé£æºããŠãããããã®ãããšå¬ããæ©èœãå®çŸã§ããã£ãŠç¥ã£ãŠãïŒ å°ãªããšãåã®åšãã®éçºè 仲éã«èããéããã»ãšãã©ã®äººããã®ããšãç¥ããªãããæå¹ã«ãããŠããªããããããã察å¿ããŠããã¿ãŒããã«ã䜿ã£ãŠããªããã ãð¢
ã¿ãŒããã«ãšã®ã·ã§ã«çµ±åã¯ã§ããããšãæ¬åœã«å€ãïŒKittyãåç §ïŒãäžã§ããã¯ãŒã¯ãããŒãèŠããå¿ èŠããªãQOLããã£ãšäžããŠãããåºæ¬çãªæ©èœãããã€ãããïŒ
- ãªãµã€ãºæã®è€éãªããã³ããã®åæç»ãããã«ãããæè¿ã®åã£ãããã³ããã§ãã¿ãŒããã«ã®ãªãµã€ãºæã®è¡šç€ºåŽ©ããå€§å¹ ã«æžãã
- äœæ¥ãã£ã¬ã¯ããªã®å ±åãããã«ãããæ°ããéãã¿ãããã€ã³ãªã©ããçŽåã«ãã©ãŒã«ã¹ããŠããã¿ãŒããã«ã®äœæ¥ãã£ã¬ã¯ããªãåŒãç¶ããããã«ãªãã
- ã¢ã¯ãã£ããªããã»ã¹ã®æ€åºããŠãŒã¶ãŒãã¢ã€ãã«ç¶æ ã®ã·ã§ã«ããã³ããã«ããããšãã¿ãŒããã«ãšãã¥ã¬ãŒã¿ãææ¡ããŠããã°ã確èªãæ±ããã«å®å šã«ã¿ãŒããã«ãéããããã«äœ¿ããã
åã¯ãã¢ã倧奜ããªã®ã§ãã²ãšã€äŸãèŠãŠã¿ããââè€éãªããã³ããã®åæç»ã ãäžã®åç»ã¯Ghosttyã§ã¯ãªããmacOSã§äººæ°ã®å¥ã®ã¿ãŒããã«ãšãã¥ã¬ãŒã¿ã§ã®ãã®ã ãã·ã§ã«çµ±åãªãã§åã®fishããã³ããããªãµã€ãºããæ§åã瀺ããŠããã
ããã³ããããã¡ããã¡ãã«ãªãã®ã«æ³šç®ããŠã»ãããã¿ãŒããã«ãšãã¥ã¬ãŒã¿èªäœã¯äœãæªããªããããã¹ãããªãããŒããŠããã ããªã®ã ããã·ã§ã«ãïŒä»ã®ãšããïŒããã³ãããè€æ°è¡ã«æãè¿ãããããšãç¥ããªãïŒããç¥ãããšãã§ããªãïŒãããäžçªäžã®æ°ããè¡ã«åæç»ãããŠããã¡ãã£ãšéè€ããŠããŸãã®ã ã
次ã¯ãã·ã§ã«çµ±åãèšå®ããGhosttyã ã
å šç¶éãïŒ ã·ã§ã«ãã¿ãŒããã«ã«å¯ŸããŠããªãµã€ãºæã«ããã³ãããåæç»ã§ããããšãäŒããããããã«ãªãããªãµã€ãºæã«Ghosttyã¯ã¿ãŒããã«ã®è¡ãã¯ãªã¢ããïŒãã©ã€ããèŠãããšæãââããã¯åŸã§æ¹åãããïŒãããã§ããã¹ãã®ãªãããŒãèµ·ãããäœèšãªæ¹è¡ãçºçããªãã®ã§ããªãµã€ãºããŠã綺éºã«åæç»ãããã
ããããã©ããã£ãŠèšå®ããã®ïŒ ãããåããã«ã¯ãã·ã§ã«ããšã®å°çšèšå®ïŒzshãªãzshçšã®ã³ãŒããfishãªãfishçšã®ã³ãŒããbashãªããŽãã¿ãããªã³ãŒãããšãã£ãå ·åïŒãå¿ èŠã«ãªãã#191以åã¯ããŠãŒã¶ãŒãæåã§èšå®ããæ¹æ³ãããã¥ã¡ã³ãã«æžããŠããã ãã ã£ãã
ã§ãä»ã¯ãGhosttyããããðªèªåçã«ðªãã£ãŠãããïŒä»ã®ãšããfishãšzshã«å¯Ÿå¿ïŒããã¡ããç¡å¹ã«ãã§ãããä»çµã¿ã¯ã·ã³ãã«ã§ãã·ã§ã«ã®ãã¹ããbasenameãåã£ãŠããfishããªãfishããzshããªãzshãšå€æããé©åãªç°å¢å€æ°ãã»ããããããšã§ãçµã¿èŸŒã¿ã®èšå®ãã¡ã€ã«ãã·ã§ã«èµ·åæã«èªã¿èŸŒãŸããèªåçã«å šéšã»ããã¢ããããããšãããã®ã ã
ãã®èšäºãæžããŠããæç¹ã§ã¯Ghosttyã¯ãŸã å ¬éãããŠããªãã®ã§ãä»ã·ã§ã«çµ±åãæãå å®ããŠããã¿ãŒããã«ã¯Kittyã ãKittyãã·ã§ã«çµ±åãèªåã§è¡ã£ãŠããããããããæ©èœãä»ãã詊ããããªããKittyã䜿ã£ãŠã¿ãŠã»ãããä»ã®ã¿ãŒããã«ãšãã¥ã¬ãŒã¿ã§ããããããæ©èœã®äžéšã«å¯Ÿå¿ããŠãããã®ã¯ããïŒ
ãã©ã³ãã®èªåã€ã¿ãªãã¯åïŒ#179ïŒ
ããã¯ã²ãšã€ã®ãã°ä¿®æ£ãšãã²ãšã€ã®æ©èœè¿œå ã ã
ãŸãã¯åºæ¬ãããã¬ã®ã¥ã©ãŒãããŒã«ããã€ã¿ãªãã¯ãããŒã«ãã€ã¿ãªãã¯ã¯ãããããå¥ã®ãã©ã³ããã§ã€ã¹ã ãMyAwesomeFont.ttfãšãããã©ã³ãããã£ããšããŠââããã¯ã²ãšã€ã®ãã§ã€ã¹ïŒãã¶ãã¬ã®ã¥ã©ãŒïŒã«éããªããããªããã£ãããã説æã ãã©ãã ãããã¯ãããããã®ã ãšæã£ãŠã»ããã
ãŠãŒã¶ãŒãMyAwesomeFontã䜿ããããšèšã£ããšããGhosttyã¯ãã®ãã©ã³ããèŠã€ããã ãã§ãªãããã®ãã©ã³ãã«çŽã¥ããã¹ãŠã®ãã§ã€ã¹ãèŠã€ããªããã°ãªããªããããã°ã©ãã³ã°çšãã©ã³ãã®å€ãã¯ãã€ã¿ãªãã¯ãããŒã«ãã®ãã§ã€ã¹ãæã£ãŠããªããã ãïŒã¡ãªã¿ã«ããã©ã³ããšããã«çŽã¥ããã¹ãŠã®ãã§ã€ã¹ãæ¢ãåŠçã¯ãäžè¬ã«ãã©ã³ãæ¢çŽ¢ïŒfont discoveryïŒãšåŒã°ããåé¡ã ãããã¯ãã£ãšåºãåé¡ã§ãããââãŠãŒã¶ãŒããã©ã³ããæå®ããªãã£ãããããã©ã«ãã§äœã䜿ãã¹ããããšãããïŒ
ãŸãã¯ããã°ãã
ããã²ãšã€å€§äºãªåæããã©ã³ãã¯ããã¹ãŠã®ã°ãªãïŒæç»å¯èœãª1æåïŒãåããŠããããã§ã¯ãªããããšãã°ãäžè¬çãªçå¹ ã®ããã°ã©ãã³ã°çšãã©ã³ãã«ã¯ãããããæŒ¢åã¯å ¥ã£ãŠããªãïŒããšãã° grass = è ãšè¡šç€ºãããŠããã°ããããæŒ¢åã ïŒã
èšå®ãããã©ã³ãã«ååšããªãæåãæç»ããããšãããšããGhosttyã¯ãã®æåãæã£ãŠããå¥ã®ãã©ã³ããæ¢ãã«è¡ããããã¯éåžžããã åè§ïŒâ¡ïŒã衚瀺ããããã²ãšã€ã®ãã©ã³ããã¡ã€ã«ã«ãã®äžã®ãã¹ãŠã®ã°ãªããè©°ã蟌ãããšã匷èŠããããã¯ãã·ãªæåã ããã®ã°ãªããèšå®ãã©ã³ãã®èŠãç®ã«éŠŽæãããã«æç»ãããããã«ã¯è²ã ãšè€éãªåé¡ãããã®ã ããä»åã¯ãã®è©±ã§ã¯ãªãââããããåé¡ããããšããããšã ãèŠããŠãããŠã»ãããå人çã«ã¯ããã®è§£æ±ºçãèããã®ã¯ããçš®ã®èªå·è¡çºã®ããã«æããã
ãã°ã¯ãããããã®ã ã£ãã以åã¯ãæå®ãããã¹ã¿ã€ã«ã§ãã®æåããã©ã³ãã«ååšããªãã£ãå ŽåãGhosttyã¯ãã®ã¹ã¿ã€ã«ã§ãã®æåãæã£ãŠãããã©ã³ããçã£ç«¯ããæ¢ããŠããããã®çµæâŠâŠãã®ãããæ±ãæç»ã«ãªã£ãŠãããçå¹ ãã©ã³ãã«ååšããªãæåããã£ããšããGhosttyãéçå¹ ãã©ã³ããèŠã€ããŠããŠããããªè¡šç€ºã«ãªã£ãŠããŸã£ãŠããã®ã ïŒ

ãããããã°ä¿®æ£ã®å 容ã¯ããã ãããæå®ãããã¹ã¿ã€ã«ã§æåãååšããããã®ã¹ã¿ã€ã«ããregularã以å€ãªãããŸãregularã§æ¢ããŠã¿ããçµæãšããŠã¹ã¿ã€ã«ã¯ç¡èŠãããããæ£ããæç»ãããããã«ãªãããããã
ã¡ãªã¿ã«Ghosttyã¯ãããšããšçå¹ ãã©ã³ãããåªå çã«æ¢ãããã«ãªã£ãŠããã絶察ã«éçå¹ ïŒããããŒã·ã§ãã«ïŒãã©ã³ãã䜿ããªãããã«ããã®ãåççã«æãããããããªãããæŒ¢åã®ãããªæåã¯ããããŒã·ã§ãã«ãã©ã³ãããæã£ãŠããŠã倧äœåé¡ãªã衚瀺ãããã®ã§ããã®å¶éã¯å¿ èŠãªããšèããŠããã
ããã«äžæ©é²ãã§ãã€ã¿ãªãã¯ãããã°ã©ã ã§äœã
ç¹ã«ã€ã¿ãªãã¯ã«ã€ããŠã¯ããã£ãšããŸããããããã©ã³ãã«ã€ã¿ãªãã¯äœãçšæãããŠããªãå Žåãã¬ã®ã¥ã©ãŒãåŸããïŒskewïŒããšã§ãã§ã€ã¯ã€ã¿ãªãã¯ãäœãããšãã§ããã®ã ãã·ã³ã°ã«ãªãªãžã³ã®ãã¢ãªãŒããŒãåããªããè·äººçã«ãã¶ã€ã³ãããæ¬ç©ã®ã€ã¿ãªãã¯ã»ã©ç¶ºéºã«ã¯ãªããªããâŠâŠãŸããååéçšããã
ãšããããã§ãGhosttyã¯ä»ããããŠãããã€ã¿ãªãã¯ã®æåãèŠæ±ãããã®ã«äœ¿ã£ãŠãããã©ã³ããã€ã¿ãªãã¯ããµããŒãããŠããªãå Žåãã¬ã®ã¥ã©ãŒã®ã°ãªããåŸããŠã©ã¹ã¿ã©ã€ãºãããã§ã€ã¯ã€ã¿ãªãã¯ãäœãåºãã®ã ïŒ

äžã®ãã©ã³ãã¯æ¬æ¥ã€ã¿ãªãã¯ããµããŒãããŠããªããã€ã¿ãªãã¯ã¯ãã§ã€ã¯ã ãã§ãããªããªãæªããªãã§ããïŒ å°ãªããšãããŸã£ããã€ã¿ãªãã¯ã«ãªããªãããã¯æç¶ãã·ã ã
å
éšã®ä»çµã¿ãæ°ã«ãªã人åãã«èª¬æãããšãFreeTypeãCoreTextã®ãããªãã©ã³ãã©ã¹ã¿ã©ã€ãºã©ã€ãã©ãªã§ã¯ãåŒã³åºãåŽã倿è¡åãæž¡ãããšãã§ãããCoreTextã®å Žåã¯ãCTFontCreateCopyWithAttributesã§ãã©ã³ããåæåããéã«å€æè¡åãæå®ã§ããã
Ghosttyã§ã¯ããšãããã15床ã®åŸããããŒãã³ãŒãããŠããïŒäžèšåç §ïŒãèŠãŠã®éããã°ãªãã奜ããªããã«åŸããããããã«ã¹ã¿ãã€ãºããããšãå¯èœã ã
pub const italic_skew: macos.graphics.AffineTransform = .{
.a = 1,
.b = 0,
.c = 0.267949, // approx. tan(15)
.d = 1,
.tx = 0,
.ty = 0,
};ãããã«
ããã§èšå¿µãã¹ã第1åã®Ghosttyéçºãã°ã¯ãããŸããäœãã²ãšã€ã§ãåŠã³ããã£ãããé¢çœããšæã£ãŠãããããå¬ãããååãšããããšã§ãä»ã«ãæžãããããšã¯å±±ã»ã©ãã£ãã®ã ããããã¯ä»åŸã®ãã°ã«åã£ãŠããããšã«ããïŒãšã¯ãããä»åŸã¯ãªãã¹ãæ°ããéçºå 容ã«çµã£ãŠæžãã€ããã ïŒã
ææ°æ å ±ã远ããã人ã¯ãTwitterãMastodonã§ãã©ããŒããŠã»ããïŒãªã³ã¯ã¯ããã¿ãŒã«ããïŒããã®ããã°ã«ã¯RSSãã£ãŒããããã
Boo. ð»
èšäºãã©ã³ãã ã«èªã
ã³ã¡ã³ã
ãã°ã€ã³ããŠã³ã¡ã³ããã