...

понедельник, 16 декабря 2013 г.

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

В первой части добавлялась проверка синтаксиса и форматирование исходников на 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 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


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



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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.


Комментариев нет:

Отправить комментарий