Раньше нельзя было выбрать куда выводить результат работы утилит: в окно редактора (отформатированный исходник) или в область уведомлений (сообщения об ошибках). Теперь можно получить объект для вывода, код для скриптов на 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/
Добавить комментарий