В первой части добавлялась проверка синтаксиса и форматирование исходников на Perl в mooedit. Если с первым никаких проблем не возникло, то при форматировании пришлось отказаться от вывода ошибок в область уведомлений. Но с тех пор появилась новая версия в ветке unstable-1.1.9x. Ничего особо нестабильного в версии 1.1.97-devel не заметил, разве что заготовки для долгожданного 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 filen" 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!nn%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
И пропишем его запуск в утилите с такими настройками:
Ждём следующий версий редактора, может что ещё интересное появится :)
Автор: kloppspb