OberonCore
https://forum.oberoncore.ru/

Oberon-2 IDE на основе Notepad++
https://forum.oberoncore.ru/viewtopic.php?f=30&t=2027
Страница 1 из 7

Автор:  Александр Ильин [ Воскресенье, 08 Ноябрь, 2009 19:02 ]
Заголовок сообщения:  Oberon-2 IDE на основе Notepad++

Небольшой анонс для тех, кто не следит за новостями на http://oberonrevival.sourceforge.net/

Выложен и доступен для скачивания пакет NO2 версии 0.1.

Собрано наспех, так что длинных справочных файлов с описанием не приложено, но всё работает как часы, и проверено временем.

Это моя личная сборка на основе редактора Notepad++ (версии 4.8.0) для работы с исходниками на XDS Oberon-2. В сборку влючены и настроены необходимые плагины, при запуске вы их увидите: Function List показывает список процедур в текущем файле, Explorer предоставляет список файлов и стандартное контекстное меню Проводника, в том числе пункты от TortoiseSVN (для тех, у кого он есть), NppExec позволяет работать с командной строкой, в том числе вылавливать и подсвечивать сообщения об ошибках компилятора XDS, а по двойному клику - открывать соответствующее место в нужном файле. Есть фолдинг и подсветка синтаксита в виде userDefineLang.xml (реагирует на расширение файла *.ob2). Там не без недостатков, но в целом работает. Ключевые слова все, какие вспомнил, распознаются и подсвечиваются, фолдинг работает для всех составных операторов, процедур и RECORD'ов.

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

В комплекте предустановлен плагин Obide последней версии - 2.1.1, анонсированный ранее. Описание основных функций и клавиатурных сокращений см. в plugins/doc/Obide.txt.

Сборка является портативной, т.е. все настройки хранит в собственном каталоге, к реестру и "Application Data" не привязывается, может работать с флешки и т.п. Без опасения можете скачать, попробовать и удалить. Notepad++, вроде бы, неплохо работает под Wine, но сам я не пробовал.

Предложения по смене названия "NO2" приветствуются, поскольку оно вызывает ассоциации с NativeOberon. Я отталкивался от Notepad++ + Oberon-2.

Прочие замечания, предложения и благодарности принимаются здесь, либо в списке рассылки oberonrevival-xds-dev@lists.sourceforge.net (оформить подписку).

Автор:  Sergo [ Воскресенье, 08 Ноябрь, 2009 22:17 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

О, огромное спасибо! Давно облизывался на эту вещь:)
Кстати, заметил, что по Ctrl+Spacebar не у всех модулей вываливается список экспортируемых ими идентификаторов. В чем может быть причина?

Автор:  Info21 [ Воскресенье, 08 Ноябрь, 2009 23:01 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Супер. А на линуксе это работает?

Автор:  Александр Ильин [ Понедельник, 09 Ноябрь, 2009 04:08 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Info21 писал(а):
Супер. А на линуксе это работает?
Под Wine должно, вроде бы. Надо чтобы кто-то попробовал и отписался.

Автор:  Александр Ильин [ Понедельник, 09 Ноябрь, 2009 04:49 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Sergo писал(а):
Кстати, заметил, что по Ctrl+Spacebar не у всех модулей вываливается список экспортируемых ими идентификаторов. В чем может быть причина?
Причин на сегодня может быть несколько:
0) указанный модуль отсутствует в списке IMPORT текущего модуля;
1) *.mod, *.def и прочее не поддерживается, только *.ob2;
2) файл не найден (надо бы подсказочку отобразить в этом случае, сделаем);

По второму пункту добавлю, что импортированные модули ищутся в текущем каталоге текущего модуля, затем в следующих каталогах в указанном порядке: ..\A3, ..\Lib, ..\..\A3, ..\..\Lib, ..\..\Src. Это пока что не вынесено в настройки, а просто намертво зашито в плагин. Пока я был единственным пользователем, я реализовал поддержку нужной мне структуры проекта. Теперь ожидаю предложений, чтобы понять, как лучше сделать. То ли достаточно ли будет глобального Obide.ini, то ли нужен такой файл в каталоге каждого проекта, то ли обязательно нужно искать и разбирать xc.red.

3) ошибки или неизвестные конструкции в исходном тексте модуля;

В третьем случае обычно можно видеть неполный список идентификаторов. Тогда можно прислать мне исходник и описание, в каком месте не видно какого идентификатора (текст лучше сократить до минимального воспроизведящего ошибку). Например, только недавно я добавил поддержку объявлений вида 'TYPE Ptr* = POINTER ["Modula"] TO ...', 'VAR x ["C"]*: ...' и т.п.

4) список идентификаторов не отображается также для преобразований типов и вызовов функций (" var (Type).| ") - это пока не поддерживается, и реализовать для общего случая, как мне предствляется, довольно сложно.

Автор:  Geniepro [ Понедельник, 09 Ноябрь, 2009 08:25 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

А вроде бы у XDS есть своя IDE, или я с Зонноном путаю?..

Автор:  Димыч [ Понедельник, 09 Ноябрь, 2009 09:09 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Geniepro писал(а):
А вроде бы у XDS есть своя IDE, или я с Зонноном путаю?..

Своя среда есть, но она не очень удобная.

Автор:  Info21 [ Понедельник, 09 Ноябрь, 2009 09:56 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Александр Ильин писал(а):
Info21 писал(а):
Супер. А на линуксе это работает?
Под Wine должно, вроде бы. Надо чтобы кто-то попробовал и отписался.
Это потому что Notepad++ не линуксовая программа? Тогда понятно...

Автор:  Димыч [ Понедельник, 09 Ноябрь, 2009 10:00 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Info21 писал(а):
Александр Ильин писал(а):
Info21 писал(а):
Супер. А на линуксе это работает?
Под Wine должно, вроде бы. Надо чтобы кто-то попробовал и отписался.
Это потому что Notepad++ не линуксовая программа? Тогда понятно...

Александр сделал очень важную вещь - портировал на Oberon-2 привязку к Scintilla.
Она весьма и весьма нетривиальна (даже с учетом того, что исходник делается автоматом).
Имея ее, можно теперь встраиваться во многие редакторы, из которых Scintilla "торчит" наружу. В линуксе таких – вагон и маленькая тележка.
Не скажу, что это совсем уж просто, но теперь подъемно.

Автор:  Александр Ильин [ Понедельник, 09 Ноябрь, 2009 10:12 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Geniepro писал(а):
А вроде бы у XDS есть своя IDE, или я с Зонноном путаю?..
Про Зоннон не знаю, а у XDS - есть. Но там кроме подсветки синтаксиса и интеграции компилятора ничего нет (да и то, когда я смотрел, привязка эта не работала при наличии пробелов в путях). Плагины предусмотрены только для "языковых драйверов" - в комплекте идут Oberon, Modula и Java - но плагин умеет только синтаксис подсвечивать. Текстовый редактор также сильно ограничен в возможностях.

Автор:  Евгений Темиргалеев [ Понедельник, 09 Ноябрь, 2009 12:02 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Александр, Вы пошли по пути правки исходников для XDS на Notepad++ с написанием соотв-х плагинов.

Вы не рассматривали вариант чтобы использовать для редактирования ББ? К нему ведь можно прикрутить что угодно - и "плагины" и вызов компилятора XDS...

Автор:  Александр Ильин [ Понедельник, 09 Ноябрь, 2009 13:56 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Евгений Темиргалеев писал(а):
Вы не рассматривали вариант чтобы использовать для редактирования ББ? К нему ведь можно прикрутить что угодно - и "плагины" и вызов компилятора XDS...
Я пошёл по пути наименьшего сопротивления. Чтобы в ББ прикрутить подсветку синтаксиса, надо залезть куда-то внутрь подсистемы Text, вывести наружу "проводки", потом снаружи к ним что-то "припаять" (плагин), а потом проверять как оно работает и почему. В Notepad++ достаточно ввести список ключевых слов в поле ввода, выбрать цвет текста, фона и сохранить настройки. Я смотрел в подсистему Text, когда разбирался с проблемами отображения юникодных символов. Честно скажу, большого желания двигаться в этом направлении не появилось.

В Notepad++ пришлось порыться, но относительно недолго и только на поверхности, поскольку все необходимые привязки уже вынесены в интерфейсы (опубликованы функции, коды команд). Scintilla - вообще песня: отличная документация, простая и единообразная работа с командами. Подключил - и работает. В ББ была бы ещё головная боль с поддержкой, которую я, как разработчик ответственный, не могу сбрасывать со счетов. Во-первых, пришлось бы скорее всего клонировать подсистему Text, во-вторых, думать про 1.5 vs. 1.6. Бинарные исходники сильно затрудняют автоматизированный анализ изменений (готовыми инструментами типа WinMerge) и автоматическое ветвление/слияние с помощью существующих систем контроля версий. Конечно, можно было бы написать инструмент для сравнения файлов (например, по схеме экспорт->сравнение->импорт), но это, опять же, долгие дни работы.

Возможности GUI в ББ тоже оставляют желать. Либо изучать WinApi, либо изобретать текстовые интерфейсы. Оба пути долгие и трудные. Например, только недавно я придумал, как можно было бы реализовать контекстный список команд. В Scintilla всё это уже есть, просто отправляешь одно сообщение - и список отображается привычным образом. Другой пример - у меня есть реализация тулбара, которая отображает список открытых окон и работает как панель закладок (tab), но до приличного вида довести её так и не удалось из-за незнания WinApi. Замучился искать, в чём проблема, и бросил. Самому пользоваться ещё ладно, но другим рекомендовать - не дозрела.

Есть и другие странности. Например, любит ББ очищать буфер UNDO после сохранения документа. Отключается это только хирургически путём залезания вовнутрь, настройки такой нет, а после отключения в интерфейсе появляются странности: после выполнения цепочки Save+Undo команда "Сохранить" не доступна, хотя документ в окне отличается от документа на диске.

Я старался написать свой плагин так, чтобы его легко можно было портировать в другое окружение. То есть, привязки к внутренностям Notepad++ достаточно хорошо локализованы. Если кто-то заинтересован - пожалуйста, давайте согласовывать интерфейсы. Я скажу, что мне нужно, и что будет на выходе, а вы со своей стороны обеспечите использование и отображение.

Наверное, резюме такое, что в Notepad++ порог вхождения не только оказался существенно ниже, он оказался похож на лестницу. Сначала понятно, как настроить подсветку, потом понятно, как увидеть список функций, затем ясно, как написать плагин, далее видно, как сделать с текстом всё что угодно. Шаг за шагом настроил как нужно. А как правильно дополнить ББ или подсистему Text, и с чего вообще начинать - мне, например, не понятно.

Собственно, по этой же причине я не сделал свой плагин для какого-нибудь gVim или Emacs: высокий порог вхождения, непривычный интерфейс.

Автор:  Sergo [ Понедельник, 09 Ноябрь, 2009 19:56 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Александр Ильин писал(а):
Sergo писал(а):
Кстати, заметил, что по Ctrl+Spacebar не у всех модулей вываливается список экспортируемых ими идентификаторов. В чем может быть причина?
Причин на сегодня может быть несколько:
[...]
2) файл не найден (надо бы подсказочку отобразить в этом случае, сделаем);

Теперь понятно. Пункт 2 - у меня другая структура каталогов.

Александр Ильин писал(а):
По второму пункту добавлю, что импортированные модули ищутся в текущем каталоге текущего модуля, затем в следующих каталогах в указанном порядке: ..\A3, ..\Lib, ..\..\A3, ..\..\Lib, ..\..\Src. Это пока что не вынесено в настройки, а просто намертво зашито в плагин. Пока я был единственным пользователем, я реализовал поддержку нужной мне структуры проекта. Теперь ожидаю предложений, чтобы понять, как лучше сделать. То ли достаточно ли будет глобального Obide.ini, то ли нужен такой файл в каталоге каждого проекта, то ли обязательно нужно искать и разбирать xc.red.

Можно предложить еще один вариант. Все пути для поиска файлов просто забивать в файл проекта - *.prj. Примерно так:

-lookup = *.ob2 = $!/src; $!/Каталог1; $!/Каталог1/Каталог2; $!/Каталог3; и.т.д.

Ну а редактор должен искать эту строку в файле текущего проекта и читать оттуда список каталогов.

Автор:  QWERTYProgrammer [ Понедельник, 09 Ноябрь, 2009 22:49 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Notepad++, a source code editor and MS Windows Notepad replacement, has the mission to offer a greener environment. By optimizing its routines, it results in reducing CPU power consumption then reducing the world carbon dioxide emissions.

Что-то зеленые в последнее время заметно активизировались :mrgreen:

Автор:  Valery Solovey [ Понедельник, 09 Ноябрь, 2009 22:54 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Александр Ильин писал(а):
Предложения по смене названия "NO2" приветствуются

Вот несколько вариантов. Они настолько стандартны, что объяснять их не нужно и настолько универсальны, что подойдут почти ко в сему (в этом же и их недостаток):
OinN
NforO
N&O

Я не совсем понял, что называется NO2 (-ом?). Это плагин? Если да, то можно вспомнить, что плагин - это подчинённый элемент основной программы. А поскольку данный конкретный плагин прокладывает мостик между основной программой и Обероном, то его можно назвать ONB (Oberon - Notepad Bridge).

Если это название сборки, то, например, ONI (Oberon and Notepad++ Integration). Или NOC (Notepad Oberon Combining).

Автор:  Valery Solovey [ Понедельник, 09 Ноябрь, 2009 23:17 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Хм, а таб-то у ейтой программы равен ( x - 1 ) mod 8. При x mod 8 # 0. То есть, на один пробел недостаёт до обычного своего положения. Это настройки такие или так было задумано изначально?

Автор:  Valery Solovey [ Понедельник, 09 Ноябрь, 2009 23:20 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Хотя нет. Он тупо равен трём. То есть, дело в настройках. : ) Осталось только найти их...

Автор:  Trurl [ Вторник, 10 Ноябрь, 2009 00:03 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Александр Ильин писал(а):
Предложения по смене названия "NO2" приветствуются

N2O поприятнее будет. ;)

Автор:  Александр Ильин [ Четверг, 12 Ноябрь, 2009 23:19 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Trurl писал(а):
N2O поприятнее будет. ;)
Зато в NO2 горит C. ; )

Автор:  Александр Ильин [ Суббота, 14 Ноябрь, 2009 21:14 ]
Заголовок сообщения:  Re: Oberon-2 IDE на основе Notepad++

Вот за что люблю Оберон, так это за то, что за три дня можно написать полноценный плагин подсветки синтаксиса, который ещё и мелкие ошибки будет подсказывать навроде незакрытой строковой константы.
Правда, константы типа REAL сложноваты. Я бы более жёсткий синтаксис задал. Сейчас такой:
Цитата:
digit{digit} "." [digit{digit}] [ ("E"|"D") ["+"|"-"] digit{digit} ]
Примеры:
1.
1.E5
1.E+5
1.0
1.0E5
1.0E+5

А я бы сделал такой:
Цитата:
digit{digit} "." digit{digit} [ ("E"|"D") ("+"|"-") digit{digit} ]
Например:
1.0 (цифра после точки обязательна)
1.0E+5 (знак "+" или "-" обязателен)

Страница 1 из 7 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/