Тюнинг mooedit, работа над ошибками

от автора

В первой части добавлялась проверка синтаксиса и форматирование исходников на Perl в mooedit. Если с первым никаких проблем не возникло, то при форматировании пришлось отказаться от вывода ошибок в область уведомлений. Но с тех пор появилась новая версия в ветке unstable-1.1.9x. Ничего особо нестабильного я там не заметил, разве что заготовки для долгожданного code folding. Но во внутреннем API появилось как минимум одно приятное изменение.


Раньше нельзя было выбрать куда выводить результат работы утилит: в окно редактора (отформатированный исходник) или в область уведомлений (сообщения об ошибках). Теперь можно получить объект для вывода, код для скриптов на Lua и Python абсолютно одинаковый:

 obj = window.get_output()  obj.clear()  obj.set_filter_by_id("default")  obj.write_with_filter("что-то, что нужно вывести")  window.present_output()

Для начала немного меняем скрипт ~/bin/perlsyntax, добавляем в него возврат кода завершения:

#!/usr/bin/perl use strict; die "Usage: $0 file\n" unless $ARGV[0]; my $out = `/usr/bin/perl -c $ARGV[0] 2>&1`; my $rc = ($out =~ s|^(.*) at (($ARGV[0]) line (\d+))(.*)$|$3:$4 $1$5|gm); print $out; exit $rc; # 0 - ошибок нет

И модифицируем скрипт для форматирования исходников:

filename = doc.get_filename() codefile = os.tmpname() rc = os.execute(string.format("/home/klopp/bin/perlsyntax \"%s\" > \"%s\" 2>&1",filename,codefile))  if rc == 0 then    tidyfile = os.tmpname()   os.execute(string.format("/usr/bin/perltidy -nsak=\"if elsif unless for while\" -pt=0 -i=4 -bl -vt=2 -vtc=2 -boc -st \"%s\" > \"%s\"",filename,tidyfile))   out = io.open(tidyfile,"r")   doc.select_all()   doc.replace_selected_text(out:read("*a"))   doc.save()   os.remove(tidyfile) else   out = io.open(codefile,"r")   err = string.format("Run syntax check!\n\n%s",out:read("*a"))   o = window.get_output()   o.clear()   o.set_filter_by_id("default")   o.write_with_filter(err)   window.present_output() end  os.remove(codefile)

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

Настройки утилиты — такие:

Дополнительно создаём утилиту для запуска скрипта прямо из редактора. Можно, конечно, как и раньше — просто запускать /usr/bin/perl "$DOC_PATH". Но при ошибках мы не получим кликабельного вывода в области уведомлений. Поэтому будем сначала проверять исходник, если всё хорошо — запускать скрипт, а при ошибках выводить модифицированные сообщения. Для этого создадим ~/bin/perlrun с таким содержимым:

#!/bin/sh  rc=`/home/klopp/bin/perlsyntax $1` if [ "$?" -eq 0 ] ; then   /usr/bin/perl $1 else   echo $rc fi

И пропишем его запуск в утилите с такими настройками:

Ждём следующий версий редактора, может что ещё интересное появится 🙂

ссылка на оригинал статьи http://habrahabr.ru/post/206152/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *