Почему Medium съедал польскую Ś, и при чём тут клавиатурный хак времён холодной войны

Поляк печатал в Medium, и одна буква упорно не появлялась: Ś. Все остальные диакритики работали. Причина уходила через внутренности Windows к обходному приёму, который поляки придумали, когда им не продавали компьютеры из США.

Вкратце

В Medium буква Ś пропадала, а восемь других польских букв с диакритикой печатались нормально. Марцин Вихари размотал цепочку: в польской «программистской» раскладке Ś набирают через правый Alt+S, Windows превращает правый Alt в Ctrl+Alt, а обработчик сохранения в Medium перехватывал всё с Ctrl+S, чтобы заблокировать браузерный диалог сохранения.

Фикс в один символ: не срабатывать на Ctrl+S, если зажат ещё и Alt. Поворот в треде: браузеры до сих пор не дают разработчикам чистого способа различать такие комбинации клавиш, поэтому баг возвращается снова и снова.

Буква, которая отказывалась печататься

Польская клавиатура PowerBook с диакритиками
Польская клавиатура PowerBook с диакритиками

Исходный разбор Марцина Вихари, впервые опубликованный в Medium Engineering в феврале 2015 года, начинается с жалобы пользователя, которая звучит невозможно: в Medium не печатается польская буква Ś. Не сбой шрифта, не отсутствующий символ. Остальные восемь польских букв с диакритикой (ż, ó, ć, ę, ą, ź, ń, ł) работали. Пропадала только Ś.

Причина — нагромождение из четырёх слоёв, которое Вихари разбирает по одному. Польскому нужно девять букв сверх латиницы, и история о том, как их набирают на американской клавиатуре, начинается в холодной войне. Социалистическая Польша ограничивала ввоз компьютеров, поэтому поляки оказались на американском железе без польских клавиш и сообща пришли к «программистской раскладке»: зажми правый Alt и нажми базовую букву, так правый Alt+S даёт Ś.

Ловушка прячется в Windows. Ради совместимости с эпохой DOS Windows внутренне отображает правый Alt (AltGr) в Ctrl+Alt. Поэтому на уровне системы нажатие для Ś приходит как Ctrl+Alt+S. А Medium хотел заблокировать встроенный браузерный диалог сохранения, поэтому его редактор перехватывал Ctrl+S проверкой вида (e.metaKey || e.ctrlKey) — и никогда не смотрел, зажат ли ещё и Alt. Каждая попытка набрать Ś попадала под это условие, и её съедало.

Фикс Вихари — одно дополнительное условие: глотать нажатие только когда Ctrl нажат, а Alt — нет, то есть (e.metaKey || (e.ctrlKey && !e.altKey)). Ś снова печатается; Ctrl+S по-прежнему блокирует диалог сохранения.

Тред читает это как всё ещё открытую проблему браузеров

Читатели восприняли пост одиннадцатилетней давности как живой баг-репорт. Один свёл весь механизм к развязке:

«Вместо того чтобы слепо и жадно блокировать Ctrl+S, можно блокировать Ctrl+S только если не нажат Alt. Ctrl+Alt+S был сочетанием для польской S.» — комментатор, сведший фикс к одному правилу

Самый острый структурный довод пришёл от разработчика, утверждавшего, что настоящий дефект — выше уровня Medium:

«Браузеры не дают простого способа проверить сочетания клавиш… Нужен proposal, чтобы браузеры отдавали в событии keydown/up/press свойство с кодом комбинации. Что-то вроде „CTRL+S“, „CTRL+ALT+S“… Даже здесь показанный код чинит проблему только на Windows; alt+cmd+s всё равно блокируется.» — разработчик, указывающий на отсутствующий API браузера

Отдельный угол треда вытащил проблему, которой статья вообще не касается: польский текст и поисковая индексация.

«8 из 9 польских букв… раскладываются на базовую букву плюс комбинируемый диакритический знак, но ł остаётся целой. А значит, нельзя нормализовать польский текст для FTS токенайзером unicode61 remove_diacritics из sqlite.» — разработчик, наткнувшийся на крайний случай нормализации Unicode

И финал — от того, кто живёт с тем же багом в настоящем времени:

«А тем временем, в 2026 году я внезапно не могу набрать заглавную Ś в Edge на Mac. Как будто откатился во времени лет на 25.» — польский пользователь, снова наткнувшийся на баг в 2026 году

Последний комментарий и есть та мысль, которую жизнерадостный фикс 2015 года упустил. Веб-приложение, блокирующее Ctrl+S, — это вовсе не частный случай Windows и польского. Любой браузер, любая ОС, любая раскладка, которая собирает настоящий символ из комбинации с модификатором, находится в одном неосторожном e.ctrlKey от того, чтобы символ исчез. Удобство клавиатурных сочетаний и алфавит печатающего делят одни и те же провода, а платформа так и не дала разработчикам чистого способа отличить одно от другого.

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 22 из 34 Читать дальше
🌍Other

На марсианском камне «леопардовые пятна», какие на Земле оставляют только микробы

Керн под названием Sapphire Canyon, высверленный из камня Cheyava Falls, несёт зеленоватые узелки размером с маковое зерно в ободках из железо-фосфатных и железо-сульфидных минералов. На Земле такие ободки остаются, когда микробы поедают органический ил. На Марсе пока никто не скажет наверняка.

★ 65 · 💬 72 · cbc.ca · 4 мин