«Ладно, напишу свой текстовый редактор»: эксперименты с canvas, contenteditable и textarea

Fine, I'll build my own text editor

«Ладно, напишу свой текстовый редактор»: эксперименты с canvas, contenteditable и textarea

Автор, разочарованный современным софтом, решает создать собственный текстовый редактор. Он пробует три подхода: рендеринг на <canvas>, использование contenteditable и обычный <textarea>. Каждый вариант имеет свои плюсы и минусы: canvas полностью недоступен для скринридеров, contenteditable страдает от проблем с производительностью на больших файлах, а textarea оказывается самым быстрым, но требует дополнительных ухищрений для подсветки синтаксиса. В итоге автор признаёт, что до полноценного редактора ещё далеко, но доволен результатом и планирует вернуться к проекту.

Выглядит как 90% текстового редактора с 1% функций.
  1. tzs

    Где-то в 1980–81 году, будучи студентом, я подрабатывал системным программистом/администратором на физическом факультете Калтеха. До меня эту должность занимал Роб Пайк, когда был аспирантом по физике высоких энергий, но он ушёл работать в Bell Labs. Однажды другой студент, Карл Хойер, и я оба предались обычному программистскому времяпрепровождению — жаловались на тогдашние экранные редакторы и говорили, что могли бы написать что-то лучше. Как-то это переросло в соревнование, и мы оба провели всю ночь напролёт, гоняясь друг за другом, чтобы написать свои редакторы. Было в основном тихо, только стук клавиш, прерываемый occasional объявлениями о какой-нибудь новой функции, которая теперь работает, в надежде сбить другого с толку. Утром пришёл другой студент-системщик/администратор, Норман Уилсон, и увидел, чем мы с Карлом занимались. Норман упомянул об этом в письме Робу Пайку. Его ответ был примерно таким: > Каждый пишет экранный редактор. Это легко, и это заставляет их чувствовать себя важными. Скажи им, чтобы занялись чем-нибудь полезным. Прошло всего пару лет, и Роб Пайк написал экранный редактор. Интересно, почувствовал ли он себя важным? :-)

  2. akersten

    Да, кто бы мог подумать, что элемент <textarea>, созданный специально для этого случая и встроенный в браузеры уже три десятилетия, окажется самым производительным и поведенчески последовательным способом реализации редактируемого текста. Мне немного грустно, что автор остановился на этом, не убирая ненужную сложность... мы на самом деле ещё не строим текстовый редактор, мы строим веб-сайт с навороченным полем ввода. Если мы хотим построить настоящий текстовый редактор, мы должны отказаться и от раздутого веб-браузера.

  3. pmkary

    Текстовые редакторы — как механические часы или перьевые ручки. В их механизмах столько красоты. Для меня нет почти никаких других модулей, за которыми было бы так приятно наблюдать в процессе создания. Каждый раз, когда я нахожу новый (хороший, как этот), со всей этой работой с канвасом, рендерингом и вычислениями позиции I-beam... это как рождественский подарок.

  4. krzyzanowskim

    Веб — вероятно, самая ограниченная платформа на сегодняшний день для создания собственного текстового редактора, с точки зрения вёрстки текста, взаимодействия и всех тех мелочей, которые могут иметь значение. В нём по-прежнему отсутствует надлежащий API для взаимодействия с системой ввода ОС за пределами встроенных текстовых возможностей браузера. Вот почему подход с <canvas> так мучителен, а всё остальное "ограничено" деталями реализации HTML и браузера.

  5. dang

    Недавнее и по теме: Таких, как Sublime Text, больше не делают — https://news.ycombinator.com/item?id=49209354 — Авг 2026 (13 комментариев)

  6. stillpointlab

    Я буквально только что заставил Fable написать мне текстовый редактор. Ну, буду честен, я заставил его обернуть библиотеку KDE KTextEditor, которая покрывает примерно 90% потребностей текстового редактора. Я раньше пользовался Kate, которую LLM предложил как наиболее близкую к Sublime Text на Fedora. Но даже Kate, которая была отличной, имела слишком много лишнего. Поэтому я попросил Fable взять часть текстового редактора (KTextEditor) и обернуть её с помощью Rust с LSP-сервером. Это заняло около двух дней, но у меня есть крошечный, супербыстрый редактор. Я использую Sway для управления вкладками, fuzzel заменяет нечёткий поиск файлов, broot — обзор файлов. Я уже добавил поддержку предпросмотра Markdown. Возможно, доберусь до базовой интеграции с git. Затем я заставил его превратить этот маленький редактор в интерфейс для заметок, который я привязал к комбинации клавиш Mod-m, чтобы вести заметки в ~/Notes. Мы живём в удивительное время. Надеюсь, все пользуются этим, пока есть возможность.

  7. nottorp

    Там действительно есть счётчик FPS. Неужели эксперимент серьёзно рендерится в непрерывном цикле?

  8. Jean-Philipe

    Не по теме, но мне очень нравится дизайн этого сайта. Он свежий, забавный, но при этом легко читается. Страница с политикой ИИ тоже замечательная.

Ещё за этот день

2026-09-02