Тюнинг 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


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



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

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 0

    Only users with full accounts can post comments. Log in, please.