Hatred's Log Place

DON'T PANIC!

Nov 17, 2009 - 5 minute read - linux programming

Текстовый редактор Medit

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

Требования

Как-то я озадачился выбором текстового редактора, который бы было одинаково комфортно использовать как для редактирования кода и разработки, так и для быстрого открытия и редактирования обычных текстов. При этом что бы он был простым для простых вещей, и расширяемым для сложных. Таком образом выработался набор требований:

  1. т.к. нужно редактировать код, нужна подсветка синтаксиса, должна быть возможность создавать свои схемы подсветки
  2. автоотступ, как при вводе кода, так и при обычном текстовом редактировании
  3. отображение номеров строк, мне привычно - отдельной колонкой
  4. многооконный интерфейс образованный вкладками
  5. отступ блока кода и обратный отступ
  6. фолдинг - сокрытие блока кода
  7. поддержка кодировки текста
  8. поддержка поля вывода для внешних команд
  9. собственно вызов внешних команд
  10. боковые панели для быстрой навигации по дереву каталогов и открытия файлов (удобно работать в проекте)
  11. расширяемость - простые средства добавления нового функционала, без написания кода.

Знакомимся - MEdit

Повторю то, что кратко сказал в первом посте про данный редактор:

MEdit(( http://mooedit.sf.net)) замечательный редактор, написанный на Gtk, пока, за малым исключением, удовлетворяет все мои запросы. Корнями уходит графическому интерфейсу GGAP(( http://ggap.sourceforge.net/)) для GAP(( http://www.gap-system.org/)).

Теперь же давайте рассмотрим его соответствие моим требованиям к хорошему текстовому редактору:

  1. подстветка синтаксиса: есть, описание в xml файлах, можно делать свои схемы
  2. автоотступ: есть
  3. отображение номеров строк: есть
  4. многооконный интерфейс образованный вкладками: есть
  5. отступ блока кода и обратный отступ: есть, в конфигурации по-умолчанию клавишами Tab и Shift+Tab соответственно
  6. фолдинг: нет, но как оказалось, в тех редакторах, что он есть, мною не использовался.
  7. поддержка кодировки текста: есть, но иногда после переключения нужно делать File -> Reopen With Codepage…
  8. поддержка поля вывода для внешних команд: есть + поддержка фильтров, но это подробнее позже
  9. собственно вызов внешних команд: есть, через механизм Инструментов (или Тулов, от английского Tools)
  10. боковые панели для быстрой навигации по дереву каталогов и открытия файлов: есть
  11. расширяемость: есть, через механизм плагинов (C или Python), через механизм Инструментов, которых реализован ооооочень удобно.

Про функции редактирования особенно и рассказывать не нужно, расскажу про возможность добавлять функционал посредством инструментов, о которых вы узнали из одной из прошлых статей.

Инструменты

Могут быть доступны через меню Инструменты или через контекстное меню мыши. Настраиваются через Изменить -> Параметры далее нужно переходить в раздел Инструменты, там находим две вкладки, для создания инструмента в контекстном меню и в главном меню.

Сами инструменты могут быть описанием программы на встроенном Python, LUA или быть командой оболочки (в большинстве случаев - BASH).

Общие параметры для всех языков, это:

  • Включен - определяет включен инструмент или нет
  • Файлы - задает, в случае открытия какого файла будет доступен данный инструмент (например в зависимости от того файл какого языка мы редактируем). Тут могут быть заданы маски файлов, выражение типа: langs: c++, c, pascal или регулярное выражение типа: regex:<br/>.[ch]$. Пустое значение подразумевает что доступно при редактировании всех документов. На основе этого я сделал свой тул для валидации кода php.
  • Параметры - определяют при каких условиях инструмент будет отрабатывать, представляет собой разделенный запятыми список:
    • need-doc - документ должен быть открыт
    • need-file - инструмент не будет работать для новых, ещё не сохраненных на диск файлов
    • need-save - документ будет сохранен перед выполнением команды
    • need-save-all - все открытые документы будут сохранены перед выполнением команды

Для встроенных языков параметры этим и ограничиваются, все остальное осуществляется программно (типа куда производить вывод сообщений).

Для Типа команды “Команда оболочки” доступны так же следующие параметры:

  • Ввод - что будет посылаться на стандартный ввод команды, скрипт должен уметь принимать стандартный ввод
  • Вывод - куда будет посылаться вывод команд:
    • Ничего - никуда, редактор будет недоступен пока команда не завершится
    • Ничего, асинхронно - никуда, можно сразу продолжать работу с редактором
    • Панель вывода - собственно текст будет выведен в панель вывода, к этому выводу можно определить фильтр, о чем скажу ниже
    • Последние пункты соответственно вставят результаты или в текущую позицию в документе или в новый документ.
  • Фильтр - как будет восприниматься текст в панели вывода. Например, если это сообщения компилятора, можно выделить строки содержащие сообщения об ошибках компиляции, подсветить их красным и сделать возможность перехода на строку с ошибкой по клику мыши. Определено несколько стандартных фильтров:
    • Default - ничего не подствечивает, если строка вывода начинается с имя_файла:номер_строки то по клику по такой строке будет произведена попытка открыть файл и перейти на указанную строку.
    • Остальные специфичны для конкретных применений. Посмотреть их описания можно в /usr/share/moo/filters.xml

Описания языка LUA и Python можно посмотреть в справочном руководстве к редактору, в формате HTML, если он у вас установлен по тем же путям, то можно открыть по этой ссылке: /usr/share/doc/medit/help/sect-user-tools.html

Для SHELL скриптов, как самых простых в реализации, рассмотрим переменные окружения к которым можно обращаться:

  • $DOC - имя документа без пути к нему
  • $DOC_DIR - полный путь к документу
  • $DOC_BASE - имя документа без расширения (последнего элемента отделенного точкой)
  • $DOC_EXT - расширение документа
  • $LINE - номер строки в которой стоит курсор
  • $DATA_DIR - директория в которой хранятся настройки medit, бывает удобно, что бы некоторые сценарии сохраняли или читали от туда свои настройки.

Как реализовывать конкретный функционал, уже удел вашей фантазии.

Да! На каждый созданный документ, можно после в Изменить -> Настройка горячих клавиш, можно настроить свою клавишу. Оду и ту же клавишу можно назначать на разные инструменты, если они выбираются для разных файлов. Если будет отображаться одновременно два инструмента с одинаковой горячей клавишей, будет выполнен тот, который идет раньше.

Остальное

Тут кратко рассмотрю основные интересности о medit:

  • описание синтаксиса можно сохранять в пользовательскую директорию: ~/.local/share/medit/language-specs
  • свои фильтры можно добавлять в файл ~/.local/share/medit/filters.xml причем нужно писать только сам фильтр, например: ```xml <match what=“stderr” pattern=".Parse error:. in (?P<file>[^:]+) on line (?P<line>
    d+)" style=“output-error” / <match what=“stdout” pattern=".Parse error:. in (?P<file>[^:]+) on line (?P<line>
    d+)" style=“output-error” /
e>

Tags: archlinux linux medit programming soft

Я - препод Medit: работаем с FreeBasic

comments powered by Disqus