# Каждый программист должен написать свой редактор
hugeping(ping,1) — All
2023-09-10 11:32:09


Решил написать небольшую заметку про свой новый проект. Интересно, что как и остальные, он стал эволюцией моих прошлых экспериментов. Занимаясь INSTEAD я полюбил Lua. Играя с Plan9 я сделал парсерный re:instead (в том числе и для того, чтобы можно было писать парсерные игры прямо в Plan9). Развил re:instead в rein, который стал уже скорее "платформой" приложений.

Не смотря на то, что rein создавался с мыслью о "духе ретро", я не стал выбрасывать из него функции, которые бы позволяли писать "полноценные" приложения. Например, поддержку шрифтов ttf и возможности менять размеры окна на лету. Я знал, что рано или поздно я попробую сделать это -- написать свой собственный текстовый редактор. :)

Я пользовался разными редакторами. Среди них, конечно, особое место занимают vim и emacs. Но когда я познакомился с acme я понял, что по большому счёту совсем не важно в чём ты пишешь код. Простой инструмент может быть гибким, эффективным и вдохновляющим.

У кого-то может возникнуть вопрос. А почему я не использую vscode? Потому что моя профессия приносит мне удовольствие и я разборчив в своих предпочтениях. Что касается vscode:

- это приложение на основе браузера;
- vscode пришёл из недр корпорации.

Как я обхожусь без "фишек" современных редакторов? Наверное, мне они не так уж и нужны. Даже наоборот, вылезающие подсказки во время набора раздражают. А после acme я осознал, что и "раскраска" текста -- какая-то ненужная нелепость. Играет роль и то, что в моей области деятельности не нужно запоминать бесчисленное число методов и классов. Я могу писать код просто "из головы".

Я начал проводить всё больше времени в acme, написал для него e-mail клиент, но всё-таки нельзя сказать, что он стал моим единственным редактором. Он является естественным в своей родной среде обитания - Plan9, но для работы в Linux/Bsd* необходимо собрать plan9ports. Я не чувствовал, что инструмент "принадлежит" мне в полной мере.

Так что мысль о собственном _простом_ редакторе стала приходить мне всё чаще. Наверное ещё во время работы над re:instead (который был написал под вдохновением от редактора Lite) я увидел, что это возможно.

Потом, в rein я написал простой "традиционный" редактор edit и пользовался им при разработке под rein. Ощущение инструмента в котором ты знаешь каждый "болтик" было непередаваемым!

В edit (редактор rein) в начале было много багов. Файл в edit был представлен в виде массива строк. Это удобно для навигации и отображния, но совсем неудобно для редактирования. Пока я его дописывал и фиксил баги я подумал, а что если файл представлять не массивом строк, а просто -- одной строкой? И тут же снова вспомнил acme, где изменения высоты скроллера явно намекает на то, что в качестве позиции используется смещение, а не номер строки. Стало интересно попробовать. И в этот раз я не смог погасить свой порыв. Так я и начал писать свой мини-acme.

Многие фишки acme раскрываются в полной мере в Plan9. Например, файловая система, через которую можно управлять редактором. Да, в Linux тоже можно монтировать её через fuse, но есть нюансы, которые делают этот метод не рабочим. Поэтому я был настроен делать именно "мини"-acme редактор, в котором мог бы делать свою повседневную работу. В качестве механизма расширения - конечно Lua!

Сейчас редактор доведён до полу-готового состояния и смержен в master ветку проекта rein. Редактор делается под мои предпочтения, поэтому он не будет демонстрироваться "широкой" публике, но я всё-таки решил написать этот текст на случай, если им заинтересуется кто-нибудь ещё.

Итак, особенности редактора red.

# RED -- Rein Editor

## Клавиши

В отличие от acme в red работают многие привычные комбинации клавиш:

- ctrl-c/x/v - копирование, удаление, вставка;
- ctrl-z - undo;
- ctrl-k - удаление до конца строки;
- стрелки курсора - перемещение по тексту во всех направления;
- page down/up - перемещение по тексту по странично;
- home/end - начало и конец строки;
- ctrl-w - умное выделение;
- ctrl-s - сохранение буфера (окна).
- shift-движение - выделение клавиатурой.

Как в acme (или почти как в acme) работают:

- escape - выделение последнего блока, удаление;
- ctrl-f - автодополнение путей (правда, если варинтов несколько - выдаётся первый);
- ctrl-a - начало/конец строки.

## Мышка

- аккорды acme - должны работать похоже;
- правая кнопка мыши - простой поиск как в acme;
- alt+правая кнопка мыши - простой поиск назад;
- shift + правая кнопка мыши - эмуляция средней кнопки мыши.

В отличие от acme курсор _мыши_ не прыгает на выделенный текст поиска (так как управление курсором из приложение возможно не во всех средах). Чтобы продолжить поиск нужно повторно кликнуть в пустую область где нет текста (например, справа от строки). Или кликнуть на слово для поиска этого слова.

- правая кнопка мыши на :число - прыжок на строчку.
- средняя кнопка мыши - выполнение действия: меню, вызов программ, открытие каталогов и файлов.

В acme открытие файлов и передача в plumber делается по пкм, однако это меня всегда немного раздражало. Потому что иногда клик приводит к поиску, а иногда - к действию. Захотел поискать https://... в коде, а открылся браузер. Поэтому в red все активные действия висят на средней кнопки мыши. А открытие каталогов, файлов - это тоже активные действия. Возможно, я сделал ошибку, но пока решение кажется удобным.

- умное выделение

Не такое как в acme, но всё-таки удобное. Двойной клик справа от строки - выделить всю строку с переводом строки. Двойной справа от последнего символа строки - строка но без перевода строки. Клики около скобок - выделение до пары. Клики на словах - выделение слов. Кроме мышки можно пользоваться умным выделением нажимая ctrl-w.

## Окна

Я отказался от деления столбцов на стек окон. Вместо этого в одном столбце может быть открыто несколько файлов. Причин две: это проще устроено и этим чаще проще пользоваться. Когда вы открываете ещё один файл в столбце, он становится активным, а предыдущий файл становится на позицию 2 в списке файлов в меню. Вы можете выбрать любой из ранее открытых файлов средней кнопкой мыши. При этом активный файл (который отображён в окне) станет на место выбранного файла. Этим свойством удобно пользоваться для закрытия всех файлов кроме одного. Просто сделайте нужный файл последним в списке, а потом нажимайте подряд Close пока не останется только он. Вы можете перетащить открытый файл в другой столбец если потащите пкм за квадратик меню в область другого столбца.

Когда вы открываете файл, то ищется уже открытый файл по всем столбцам и если он есть -- показывается. Если вам нужно открыть несколько одинаковых файлов, вам придется поменять имя открытому файлу в меню (напрмер, добавить "+" в начале) и открыть этот же файл ещё раз.

Если имя файла начинается с "+", то такой файл не сохраняется на диск. Поэтому информационные окна называются: +Errors, +Output, +Help и т.д. Вы можете любое окно сделать информационным просто добавив + в начало имени активного файла (первый файл в списке файлов в меню).

Скроллеры в отличие от acme работают традиционно - левая кнопка мыши "таскает" скроллер.

## Вызов программ

Поддержки win (запуск шелла) на данный момент нет. Это связано с тем, что полноценную поддержку процессов нужно делать через fork. Это привяжет red к Unix. К тому же, red - это lite-acme. :) Расширения red можно делать на Lua, но для запуска полноценного shell этого недостаточно.

### Возможности по запуску программ

- >cmd - запуск cmd с передачей в качестве параметра временного файла с данными;
- <cmd - запуск cmd с чтением stdout;
- !cmd - запуск cmd

Кроме того для Linux всё-таки доступна:

- |cmd - работает примерно как в acme. На вход через пайп передаётся текст или выделение и ждём выхода.

Всё это реализовано за счёт io.popen временных файлов и coroutine (переключение после чтения пачки строк). Поэтому - ненадёжно. Если вы запустите программу которая висит и ничего не выдаёт, red зависнет. Поэтому реализацию нельзя считать полноценной замену acme. Тем не менее, я пользуюсь этим механизмом для проверки орфографии.

Если запускается программа с параметрами, выделите всю строчку и нажмите среднюю кнопку мыши.

### Встроенные команды

Основной механизм расширений редактора всё-таки не через запуск внешних команд, а за счёт написания процедур на Lua. Процедуры находятся в файле data/lib/red/proc.lua и на данный момент включают следующие команды:

- sub - поиск или поиск/замена построчно;
- gsub - поиск или поиск/замена глобально;
- select - синоним gsub без замены;
- find - синоним sub без замены;

Внимание! Все регулярки - регулярки на Lua!

Примеры:

select ^.*$ - выбрать всё
sub /^/ / - построчно добавлять в начало строки 4 пробела.

Во втором примере на каждые 2 клика вы получите одну итерацию: поиск-замена. Но если хотите произвести манипуляции не интерактивно - выделите текст, с которым работаете. Например:

gsub ^.*$ - выделили всё (тот же select)
sub /^/ / - отработали по выделению.

Доступна форма записи поиска с / - если нужно работать с пробелами:

select / / - выбрать 2 пробела.

Другие встроенные команды:

- Getline - добавляет справа от себя текущий номер строки. Удобно для составления "закладок" в файле;
- fmt [ширина] - аналог утилиты fmt;
- grep выражение - рекурсивный поиск по содержимому файлов каталога. Каталог - dirname открытого в данный момент файла;
- Run [программа] - запуск программы rein (интеграция для разработки под rein) или текущего файла.

## Dump

При нажатии средней кнопки мыши на Dump - в текущем каталоге создаётся конфигурация сессии (файл red.dump). В сессии сохраняются все данные открытых файлов. Даже если вы сотрёте сами файлы, при восстановлении сессии они будут показаны в окнах. Если red находит в текущем каталоге red.dump он всегда его загружает. Возможно, в будущем появится опция для загрузки Dump.

## Параметры командной строки

Запуск red:

$ rein red [-fs <размер шрифта>] [файлы]

Чтобы немного ускорить запуск можно воспользоваться опциями:

$ rein -platform-nosound -platform-nojoystick ...

Для удобства я делаю себе скрипт вида:

-- red
#!/bin/sh
/home/peter/Devel/rein/rein -platform-nosound -platform-nojoystick red -fs 19 "$@"

И запускаю редактор из любого места.

## Открытие файлов по средней кнопке мыши

В файле data/lib/red/uri.lua вы можете прописать вызов внешних программ. Например, запускать просмотрщик pdf если вы нажали на строчку, которая заканчивается на .pdf.

## Настройки для типов файлов

В файле data/lib/red/presets.lua вы можете настроить поведение редактора в зависимости от типа файла (расширения). Пока доступны только размер табуляции и режим табуляции (пробелы или \t). Скорее всего появятся и другие настройки.

## Цвета

В начале red.lua в таблице conf.

# Что дальше?

Редактор ещё сыроват, но я начал его использовать и постоянно вношу доработки. Приоритет разработки - личное использование. Ведь вряд-ли вы захотите променять vscode на _это_! Не правда ли? :) Но меня это не беспокоит. Ведь теперь я точно знаю -- каждый программист должен написать собственный редактор!

У Линуса есть https://github.com/torvalds/uemacs у Роба Пайка -- acme, у Столмана emacs. А у меня теперь есть red и мне больше не нужно выбирать!

P.S. Один мой друг удивился тому, что у меня есть желание программировать после работы и тратить время на такие вот хобби проекты. Не знаю в чём дело, но с годами желание программировать у меня никогда не исчезало. И я считал что это нормальное состояние для программиста. Программирование -- это в первую очередь форма творчества, а творчество всегда лечит. Ведь творчество это свобода. Эксперимент, игра -- но никак не рутина. В хобби проекте ты можешь почувствовать это в полной мере, ведь тут ты не ограничен целесообразностью. А на работе... На работе теперь можно будет редактировать код в red :)

# Re: Каждый программист должен написать свой редактор
vvs(ping,12) — hugeping
2023-09-10 12:46:14


Удалено. Случайно зацепил не ту клавишу.

# Re: Каждый программист должен написать свой редактор
vvs(ping,12) — hugeping
2023-09-10 12:47:01


hugeping> Всё это реализовано за счёт io.popen временных файлов и coroutine (переключение после чтения пачки строк). Поэтому - ненадёжно. Если вы запустите программу которая висит и ничего не выдаёт, red зависнет. Поэтому реализацию нельзя считать полноценной замену acme. Тем не менее, я пользуюсь этим механизмом для проверки орфографии.

https://luvit.io ? Дисклеймер: найдено в интернете, я не специалист по Lua и т.п.

P.S. Я долгое время относился к Lua пренебрежительно за его "игрушечность". Однако в какой-то момент мне зачем-то понадобилось ознакомиться с ним глубже и на меня произвели впечатление элегантность и минимализм языка, напомнило Лисп. И всё же большие и сложные проекты я бы на нём делать поостерёгся.

P.S. Для меня редактор - это ещё и интерфейс со средой исполнения, например CAS или ITP. Но для многих достаточно и меньшего. Emacs - это крайний пример, к тому же его может оказаться и недостаточно если интерфейс нетекстовый по природе.

# Re: Каждый программист должен написать свой редактор
hugeping(ping,1) — vvs
2023-09-10 15:34:36


vvs> https://luvit.io ? Дисклеймер: найдено в интернете, я не специалист по Lua и т.п.

Если сделать специализированный код, то - можно, конечно. Я просто старался остаться в рамках API rein. Ну и вообще, хотел сохранить простоту.

vvs> И всё же большие и сложные проекты я бы на нём делать поостерёгся.

red меньше 2000 строк в общей сложности. Lua конечно хорош как встраиваемый язык.

# Re: Каждый программист должен написать свой редактор
vvs(ping,12) — hugeping
2023-09-10 16:40:20


hugeping> Если сделать специализированный код, то - можно, конечно. Я просто старался остаться в рамках API rein. Ну и вообще, хотел сохранить простоту.

Ты, когда говоришь о простоте, всегда, на самом деле, подразумеваешь только самое необходимое :) Берём вызовы ядра Линукса и План 9: разница лишь в том, что считать самым необходимым. Один человек ещё как-то сказал, что его самой большой ошибкой было то, что для реализации интерфейса пользователя он написал текстовый редактор на Яве - такой проект может занять всю жизнь :) Интересно, Столлман, когда писал Emacs, подозревал, что в нём появится ещё и Сокобан и калькулятор в придачу? Понятие необходимости со временем тоже эволюционирует, однако :)

# Re: Каждый программист должен написать свой редактор
vvs(ping,12) — vvs
2023-09-10 17:41:14


vvs> Ты, когда говоришь о простоте, всегда, на самом деле, подразумеваешь только самое необходимое

Кстати, я тоже замечал, что если у меня под рукой есть привычный инструмент, то я всё пытаюсь делать им. Ну, действительно, зачем плодить лишние сущности и изучать всё новые способы делать одно и то же, если у меня уже и так всё для этого было? А в расходы запишем необходимость в постоянном усложнении "простого" инструмента. Вот так и появились на свет Vim и Emacs (и luvit с emilua, Smalltalk и кто его знает что ещё :)

# Победа будет Za нами!
kct-ac12(ping,50) — hugeping
2023-09-11 11:30:21


Слава России!

# Re: Каждый программист должен написать свой редактор
vvs(ping,12) — hugeping
2023-09-11 12:32:49


hugeping> У кого-то может возникнуть вопрос. А почему я не использую vscode? Потому что моя профессия приносит мне удовольствие и я разборчив в своих предпочтениях. Что касается vscode:

hugeping> - это приложение на основе браузера;
hugeping> - vscode пришёл из недр корпорации.

VSCode надо рассматривать именно как интерфейс, а не редактор. Тогда наличие браузера становится преимуществом.

hugeping> Как я обхожусь без "фишек" современных редакторов? Наверное, мне они не так уж и нужны. Даже наоборот, вылезающие подсказки во время набора раздражают. А после acme я осознал, что и "раскраска" текста -- какая-то ненужная нелепость. Играет роль и то, что в моей области деятельности не нужно запоминать бесчисленное число методов и классов. Я могу писать код просто "из головы".

Когда у твоего проекта будет миллион строк кода, то инкрементальный поиск во время набора покажется совсем не лишним.

Мои претензии к VSCode - текстовый редактор, который даже не работает в текстовом режиме, а текстовый процессор программисту не нужен, к тому же здесь он всем уступает.

hugeping> Я не чувствовал, что инструмент "принадлежит" мне в полной мере.

Тогда жду, что следующим проектом станет свой язык программирования :) Нет, ну серьёзно, у Пайка были свои ОС (Plan 9 и Inferno), свой редактор Acme и свои языки - Limbo и Go. Правда он это делал не один, да и, к тому же, не бесплатно.

Только не воспринимай эти слова, как насмешку. Хотя тут и есть доля иронии, но ко всем твоим проектам я отношусь с уважением. Далеко не каждый на это способен и, на мой взгляд, это важный инструмент для саморазвития.

# Re: Каждый программист должен написать свой редактор
Andrew Lobanov(tavern,1) — vvs
2023-09-11 12:47:45


hugeping>> У кого-то может возникнуть вопрос. А почему я не использую vscode? Потому что моя профессия приносит мне удовольствие и я разборчив в своих предпочтениях. Что касается vscode:
hugeping>> - это приложение на основе браузера;
hugeping>> - vscode пришёл из недр корпорации.
vvs> VSCode надо рассматривать именно как интерфейс, а не редактор. Тогда наличие браузера становится преимуществом.

Я могу понять acme как интерфейс. И даже emacs как интерфейс, хотя тут уже всё менее чётко. Но интерфейсом к чему является VSCode. На работе использую его каждый день и от твоего сообщения появилось стойкое ощущение, что я что-то фундаментального о нём не знаю :)

+++ Лично я вижу в этом перст судьбы – шли по лесу и встретили программиста.

# Re: Каждый программист должен написать свой редактор
vvs(ping,12) — Andrew Lobanov
2023-09-11 13:19:44


VSCode может служить интерфейсом к самым разным веб приложениям. Например, он является клиентом GutHub Codespaces и Copilot. Я знаю и другие проекты, где он используется для интерактивных документов, где вместе присутствуют код, данные и документация, как в Jupyter. Если кто видел Wolfram Mathematica, то там такой же подход, только на основе интерактивного блокнота: https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BD%D0%BE%D1%82

Использование чисто текстовой среды, как в Emacs, затрудняет создание таких интерфейсов, особенно при использовании сети и интернет протоколов. Хотя и в Emacs можно пытаться такое реализовать, но он тут явно уступает по своим возможностям. Большинство людей не станет использовать Lynx вместо Firefox, да и не везде он будет работать правильно (в банке).

P.S. Edited: 2023-09-11 13:20:01

# Re: Каждый программист должен написать свой редактор
hugeping(ping,1) — vvs
2023-09-11 18:47:36


vvs> Тогда жду, что следующим проектом станет свой язык программирования :) Нет, ну серьёзно, у Пайка были свои ОС (Plan 9 и Inferno), свой редактор Acme и свои языки - Limbo и Go. Правда он это делал не один, да и, к тому же, не бесплатно.

Я не потянул бы такое. Хотя мне уже тут советовали посмотреть Оберон. :)
Но пока я решил чисто утилитарную проблему - испытал сегодня на работе - пока всё отлично!

# Re: Победа будет Za нами!
hugeping(ping,1) — kct-ac12
2023-09-11 18:47:56


kct-ac12> Слава России!

Да, бро! Только вперёд!

# Re: Каждый программист должен написать свой редактор
vvs(ping,12) — hugeping
2023-09-12 14:12:38


vvs>> Тогда жду, что следующим проектом станет свой язык программирования :) Нет, ну серьёзно, у Пайка были свои ОС (Plan 9 и Inferno), свой редактор Acme и свои языки - Limbo и Go. Правда он это делал не один, да и, к тому же, не бесплатно.

hugeping> Я не потянул бы такое. Хотя мне уже тут советовали посмотреть Оберон. :)

Смотря что иметь в виду. Изобрести оригинальный универсальный язык - это искусство. Придумать же практичный прикладной язык для личного пользования - не сложнее, чем написать свой текстовый редактор. Ну пользуются же люди URQ :) Вот и подтверждение практичности такого подхода: https://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

Разработать же транслятор - вообще дело техники и желания почитать соответствующую литературу. Короче, главное - не дрейфить :)

# Re: Каждый программист должен написать свой редактор
vvs(ping,12) — vvs
2023-09-12 17:59:38


Кстати, напомнило. Когда Hewlett-Packard запустили линейку первых программируемых калькуляторов со встроенной CAS, то для них был специально придуман язык RPL (Reverse Polish Lisp). Собственно почти все дальнейшие их калькуляторы, совместимые с этими и являлись реализацией RPL с кучей ПО.

# Re: Каждый программист должен написать свой редактор
hugeping(ping,1) — hugeping
2023-09-23 10:00:41


Довольно сильно продвинулся с red!

Основные отличия будут видны, если он используется не в Windows среде:

- Теперь есть win почти как в acme, в котором можно выполнять команды и есть даже ввод-вывод через fifo;
- Запуск процессов теперь осуществляется через потоки red, что должно исключить "зависания".

Ядро rein в плане потоков было немного переработано (для поддержки ThreadDetach), но в целом - движок не пришлось менять. Пока очень доволен. Вижу как red медленно (но верно) превращается в мой личный инструмент.

P.S. Ещё бы логотип какой-то придумать... Сейчас это просто красный квадрат с рамкой, который генерируется прямо внутри кода red. Хотя, может и не плохо.

# Re: Каждый программист должен написать свой редактор
vvs(ping,12) — hugeping
2023-09-25 20:06:07


Почему-то до меня только сейчас это дошло, как до жирафа: не знаю, в курсе ты или нет, но уже есть один редактор с поддержкой Lua первого класса - Neovim. Может тебе это будет интересно для сравнения.

# Re: Каждый программист должен написать свой редактор
Andrew Lobanov(tavern,1) — vvs
2023-09-26 05:22:39


vvs> Почему-то до меня только сейчас это дошло, как до жирафа: не знаю, в курсе ты или нет, но уже есть один редактор с поддержкой Lua первого класса - Neovim. Может тебе это будет интересно для сравнения.

Есть ещё lite, например.

+++ Йа мобилко.

# Re: Каждый программист должен написать свой редактор
vvs(ping,12) — Andrew Lobanov
2023-09-26 14:39:53


Я уже привык оценивать текстовый редактор по тому, как он интегрируется с интересующими меня приложениями, т.е. в качестве стандартного интерфейса пользователя. Вообще, для меня лучше всего, когда редактор уже является частью стандартного интерфейса, а не самостоятельным приложением, поскольку собственно редактированием текстов я не занимаюсь (ну не писатель). Это сравнимо с разницей между графическим интерфейсом и терминалом (и я пользуюсь эмулятором терминала, встроенным в GUI, а не устройством).

По опыту здесь чаще всего доминируют VSCode, Emacs и, в меньшей степени, Vim/Neovim. Я тут говорю именно о "редакторах", а не IDE типа Eclipse или IntelliJ IDEA, хотя граница там достаточно размыта. Использовать же какой-то специализированный редактор отдельно, только для редактирования текста, в таком случае уже избыточно, КМК. Кстати, ведь и Acme задумывался именно для такого применения.

Но это вопрос личных потребностей и вкусов, которые, впрочем, имеют тенденцию меняться со временем.

# Re: Каждый программист должен написать свой редактор
Andrew Lobanov(tavern,1) — vvs
2023-09-26 18:17:28


vvs> Я уже привык оценивать текстовый редактор по тому, как он интегрируется с интересующими меня приложениями, т.е. в качестве стандартного интерфейса пользователя. Вообще, для меня лучше всего, когда редактор уже является частью стандартного интерфейса, а не самостоятельным приложением, поскольку собственно редактированием текстов я не занимаюсь (ну не писатель). Это сравнимо с разницей между графическим интерфейсом и терминалом (и я пользуюсь эмулятором терминала, встроенным в GUI, а не устройством).

Я уже давно рассматриваю редактор не столько как редактор. Emacs ибо. Хотя напрямую как интерфейс к ОС его рассматривать не совсем правильно, но вот как вычислительную среду с интерфейсом доступа к ОС уже корректнее.

vvs> По опыту здесь чаще всего доминируют VSCode, Emacs и, в меньшей степени, Vim/Neovim. Я тут говорю именно о "редакторах", а не IDE типа Eclipse или IntelliJ IDEA, хотя граница там достаточно размыта. Использовать же какой-то специализированный редактор отдельно, только для редактирования текста, в таком случае уже избыточно, КМК. Кстати, ведь и Acme задумывался именно для такого применения.

Как раз acme офигенный пользовательский интерфейс. По крайней мере в родной для него ОС. Но и в GNU/Linux весьма себе вкусная вещь. А вот vi/vim/neovim мной только как редакторы воспринимаются. Хорошие, но редакторы. Не прижилось у меня более широкое их использование.

vvs> Но это вопрос личных потребностей и вкусов, которые, впрочем, имеют тенденцию меняться со временем.

Да я даже не знаю. Мне почти всё нравится, что пробовал. Даже vscode на работе успешно использую. Правда рядом всегда открыто несколько клиентов Emacs, а в терминальных сессиях до серверов использую vim.

+++ Йа мобилко.

# Re: Каждый программист должен написать свой редактор
vvs(ping,12) — Andrew Lobanov
2023-09-26 19:15:33


AL> Я уже давно рассматриваю редактор не столько как редактор. Emacs ибо. Хотя напрямую как интерфейс к ОС его рассматривать не совсем правильно, но вот как вычислительную среду с интерфейсом доступа к ОС уже корректнее.

Смотря какая ОС. В GNU Scheme в качестве интерфейса по умолчанию есть Edwin - тот же Emacs. Сассман - который (со)автор Scheme - использует его как интерфейс в своих курсах/книгах, таких как "Структура и интерпретация компьютерных программ" и в своей CAS Scmutils (Scheme Mechanics). У него, кстати, есть книги и по математике и по физике с той же CAS. Она сама вот тут лежит: https://groups.csail.mit.edu/mac/users/gjs/6946/installation.html

AL> Как раз acme офигенный пользовательский интерфейс. По крайней мере в родной для него ОС. Но и в GNU/Linux весьма себе вкусная вещь. А вот vi/vim/neovim мной только как редакторы воспринимаются. Хорошие, но редакторы. Не прижилось у меня более широкое их использование.

У меня все редакторы используются так, как задумано авторами приложений. Я только пользователь.