עזבתי את Ghostty כי הוא לא מדבר עברית
חצי שנה ישבתי על Ghostty. מהיר, יפה, קונפיג של שורתיים — בדיוק מה שרציתי. עד שהיום cat של קובץ עברי חזר אליי הפוך, אות-אות, משמאל לימין, כאילו הטרמינל החליט שעברית היא בעצם אנגלית קצת מוזרה.
זו לא בדיוק החלטה של Ghostty — זה פשוט פיצ’ר שלא קיים שם. הטרמינל מצייר גליפים בסדר שבו הם מגיעים בזיכרון (logical order) ולא מפעיל את אלגוריתם ה-Unicode Bidirectional. בשפה שמסומנת RTL זה בדיוק הזוי כמו שזה נשמע: שלום הופך ל-םולש.
מה ש-Ghostty לא יכול לעשות לי
חיפשתי הגדרה. אין. בדקתי את ה-issues — #1442 פתוח, “minimal RTL support for single lines”, מתויג accepted. יש discussion עם פורק עובד שמשלב FriBidi ל-BiDi ו-HarfBuzz extended ל-shaping של ערבית. אבל ב-main אין כלום, וה-PRs שיתקבלו צריכים benchmarks, Unicode APIs במקום זיהוי תווים מותאם, ו-zero overhead ל-LTR. בקיצור — לא בקרוב.
עבודה על מוצר שכל הממשק שלו בעברית, ואני רואה את הטקסט הפוך בכל לוג, בכל grep, בכל psql — לא נסבל.
WezTerm פשוט עובד
-- ~/.wezterm.lua
return {
bidi_enabled = true,
bidi_direction = 'AutoLeftToRight',
}
זהו. שתי שורות. קובץ עברית.txt קורא את עצמו נכון, מספרים בתוך משפט עברי נשארים LTR, פיסוק במקום הנכון. ה-BiDi של WezTerm לא מושלם (יש edge cases במצבים מעורבים מורכבים), אבל הוא קיים, והוא מספיק טוב ליום-יום.
הגילוי הקטן על פונטים
חשבתי שסיימתי. הפעלתי wezterm ls-fonts --text "שלום" כדי לוודא איזה פונט נטען, וגיליתי שהעברית עברה ל-Courier New. למה? כי JetBrains Mono לא מכיל גליפים עבריים, ו-WezTerm נופל ל-fallback של מערכת.
התקנתי Noto Sans Hebrew — קריא, יפה — אבל הוא proportional. לא monospace. בטרמינל זה אומר שהאותיות העבריות לא יושבות על אותו רוחב תא כמו האנגליות, וכל יישור עמודה (ls -la, top, טבלאות) נשבר ברגע שיש בו עברית.
מצאתי את Miriam Mono CLM — פונט עברי mono אמיתי, חופשי, יושב נקי על הגריד. השורות מתיישרות. סוף סוף.
הבונוסים ש-Ghostty לא נתן
WezTerm קונפיג ב-Lua, לא ב-INI. זה אומר שאני יכול לכתוב לוגיקה — לדוגמה, שם הטאב מתעדכן אוטומטית מ-basename של ה-CWD, אז במקום zsh, zsh, zsh אני רואה את שמות הפרויקטים. כמה שורות:
wezterm.on('format-tab-title', function(tab)
local cwd = tab.active_pane.current_working_dir
local name = cwd and cwd.file_path:match '([^/]+)/?$'
or tab.active_pane.title
return ' ' .. (tab.tab_index + 1) .. ': ' .. name .. ' '
end)
יש מערכת פלאגינים native (clone של git repo דרך wezterm.plugin.require). הוספתי bar.wezterm כסטטוס בר עם CWD/hostname/clock. יש quick-select מובנה — ⌘⇧Space מסמן כל URL/path על המסך באותיות, אני מקיש ופותח. workspaces כמו tmux sessions, ללא tmux.
מה איבדתי
זמן הפעלה. Ghostty נפתח מיידית; WezTerm לוקח חצי שנייה מורגשת. גם הקונפיג מורכב יותר — Lua פותח אפשרויות אבל גם מזמין שעות של tinkering שלא תכננתי.
שווה את זה? לעבודה יומיומית על מוצר עברי, בלי ספק. הפעם הראשונה שראיתי psql מציג שורה מעורבת עברית/אנגלית נכון הרגישה כמו שמיכה חמה.
ה-bug ש-Ghostty יסגור יום אחד הוא bug יפה. עד אז — ביי.