Что нового

SciTE 3.5.5.101 для AutoIt

Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Обновил SciTE:

1.3.5 (05 Сентября, 2015)
  • Добавлена утилита A3XConverter (Toolbar\Convert to A3X) для конвертации AU3 в A3X.
  • Исправлен баг в SciTE Theme Manager, не позволяющий читать файлы .SciTETheme, если пользователь не имеет прав администратора.
  • Изменены некоторые файлы .lua для оптимизации кода.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Yashied
Сворачивание (folding) для Volatile можно как то прикрутить?
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Недопонял. Для Volatile?
 

asdf8

Скриптер
Сообщения
564
Репутация
152
CreatoR [?]
Сворачивание (folding) для Volatile можно как то прикрутить?

Будет в следующей версии SciTe-Ru, или уже сейчас можно самому собрать из исходников. В SciTe-Ru обновлен лексер autoit-файлов.
Авторы просят обновить au3.properties : ссылка
Кому-то это интересно?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
asdf8 [?]
Кому-то это интересно?
Интересно, но исключительно для этой сборки.

Кто то знает где можно взять текущие исходники и как их компилировать?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Yashied просветите по такому вопросу:
Добавляю в ресурсы текстовый файл вот так:
-add lang.default, TEXT, LANG,
компилирую, смотрю в Restorator или Resource Hacker то что добавилось, и вижу что все умлауты пропали, вместо
Guthaben nicht geändert наблюдаю Guthaben nicht geГ¤ndert
вместо Datenprüfung Fehler - DatenprГјfung Fehler итп
Почему так?
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
inververs, не смотрите на то, что показывают редакторы ресурсов. Главное, чтобы чтение ресурса давало правильный результат. Если собираетесь использовать этот ресурс в GUI, то сохраняйте исходный файл в Unicode, а не в UTF-8.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Все, разобрался, UTF-8 все нормально с ним. Изменил функцию _LoadResourceText что бы возвращала байты и через BinaryToString($bData, 4) получил строку в нужной кодировке.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
AutoIt работает только в Unicode, поэтому, логичнее и ресурсы создавать в Unicode. Таким образом вы получите сразу правильную строку.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Little Endian он же просто Unicode.
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Преимущество официальной сборки в том, что wrapper не даёт запускать скрипт с ошибками. Здесь же можно узнать об ошибке только когда AutoIt не сможет выполнить строку. Про Ctrl+F5 я знаю, но к этому нужно привыкнуть. Ещё wrapper автоматически переходит на строку с ошибкой без дополнительных кликов или нажатий F4. Это удобно.

В данной сборке заметил странность с CALLTIP: нажатие запятой сразу после кавычки не вызывает всплывающую подсказку. Например, забыли указать параметр
Код:
MsgBox(0, 0)
MsgBox(0, "")
Если теперь установить курсор перед закрывающей скобкой и нажать запятую, то в первом случае CALLTIP появится, а во втором - нет.

Ни в этой, ни в официальной сборке нет аббревиатуры для ControlTreeView (вероятно, ctv). Либо случайно пропущена, либо намеренно не сделана... Может сюда добавите или им там подскажете добавить?

В справке отсутствует директива
Код:
#pragma compile(Stripper, True)
Это недокументированная возможность или спец.директива только для данной сборки?
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
InnI сказал(а):
Преимущество официальной сборки в том, что wrapper не даёт запускать скрипт с ошибками. Здесь же можно узнать об ошибке только когда AutoIt не сможет выполнить строку. Про Ctrl+F5 я знаю, но к этому нужно привыкнуть. Ещё wrapper автоматически переходит на строку с ошибкой без дополнительных кликов или нажатий F4. Это удобно.
Кому-то нравится AutoIt3Wrapper, кому-то Compiler Wrapper. Используйте то, что вам больше подходит, но AutoIt3Wrapper я вырезал из сборки раз и навсегда. В конце-концов, что мешает проверить код (Au3Check) перед запуском?

InnI сказал(а):
В данной сборке заметил странность с CALLTIP: нажатие запятой сразу после кавычки не вызывает всплывающую подсказку. Например, забыли указать параметр
Код:
MsgBox(0, 0)
MsgBox(0, "")
Если теперь установить курсор перед закрывающей скобкой и нажать запятую, то в первом случае CALLTIP появится, а во втором - нет.
Это незначительная ошибка, все "отполировать" все равно невозможно.

InnI сказал(а):
Ни в этой, ни в официальной сборке нет аббревиатуры для ControlTreeView (вероятно, ctv). Либо случайно пропущена, либо намеренно не сделана... Может сюда добавите или им там подскажете добавить?
Добавил.

InnI сказал(а):
В справке отсутствует директива
Код:
#pragma compile(Stripper, True)
Это недокументированная возможность или спец.директива только для данной сборки?
Compiler Wrapper поддерживает 3 собственные директивы:
  • Stripper
  • Resources
  • Sign
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Yashied
Кому-то нравится AutoIt3Wrapper, кому-то Compiler Wrapper
Я не об этом. Я хотел сказать, что в официальной сборке на F5 "повешена" проверка перед запуском.

что мешает проверить код (Au3Check) перед запуском
Мне - привычка, новичкам - незнание о Ctrl+F5.
Можно ли в параметре autoit.cmd.go указать запуск AutoIt по условию выполнения Au3Check? Или нужно писать отдельный скрипт и его прописывать?
А может, по примеру AutoIt3Wrapper, предварительно запускать Compiler Wrapper, который умеет вызывать Au3Check, и только потом передавать управление AutoIt?

все "отполировать" все равно невозможно
Ну, не знаю... В официальной сборке данная проблема отсутствует... Значит, видимо, возможно...
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
InnI сказал(а):
Я хотел сказать, что в официальной сборке на F5 "повешена" проверка перед запуском.
А в моей сборке нет, поскольку это занимает определенное время. А так, скрипт запускается немедленно. Я это сделал преднамеренно и отказываться не собираюсь.

InnI сказал(а):
Ну, не знаю... В официальной сборке данная проблема отсутствует... Значит, видимо, возможно...
Я вот не пойму, я один тут не пользуюсь ни автодополнением, ни автоподсказками? Как вы вообще пишите код? Каждый раз вручную переписываете алгоритмы? Ну раз в час понадобилась всплывающая подсказка, ну нажмите Ctrl+Shift+Space. И да, эта проблема сидит в ядре, как выйдет новое ядро, так, возможно, и проблема уйдет.
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Yashied
Я это сделал преднамеренно и отказываться не собираюсь.
Я этого не знал. Извините, если обидел.
Просто я хотел сделать это для себя и решил, что вы быстрее ответите КАК это сделать, чем я полезу изучать документацию SciTE.

я один тут не пользуюсь ни автодополнением, ни автоподсказками?
Видимо, да ;D


Добавлено:
Сообщение автоматически объединено:

Сатирическая зарисовка:
Отладка. Мозг лихорадочно пытается понять, что происходит. Отладочные строки вставляются чуть ли не друг за другом.
- Так. Вот здесь. mb пробел переменная.
F5
Мгновенно запустившись, скрипт начал работу.
Минута. Глаза пытаются синхронизировать мелькание окон с выводом отладки в консоль.
Две минуты.
Три минуты.
- Так. Вот сейчас... Что это? Как это - "недостаточно параметров"?! ... А откуда MsgBox?! Должно же быть ConsoleWrite! Бли-и-ин! Опять всё с начала! Ещё несколько минут прожиты зря! Ну, ничего. Зато сэкономил сотню миллисекунд при запуске. Ничего. Главное не забывать нажимать Ctrl+F5. Да. Главное - не забывать. Так. Ладно. Спокойно... Ну, вот, исправил. Ах, да. Тут ещё надо посмотреть. mb пробел переменная. Так, вроде всё.
F5
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Для тех, кто готов пожертвовать пару сотен миллисекунд на проверку скрипта перед запуском, предлагаю следующие способы. Суть способов заключается в организации "посредника" между SciTE и AutoIt.
[box title=Способ 1: посредник cmd.exe]
В файле properties\au3.properties редактируем значения параметров autoit.cmd.go, autoit.cmd.go64 и command.go.subsystem.$(au3). Оригинальные строки можно сохранить, закомментировав их символом #
Код:
#autoit.cmd.go="$(AutoIt3Dir)\AutoIt3.exe" /ErrorStdOut "$(FilePath)" $(1) $(2) $(3) $(4)
autoit.cmd.go=cmd.exe /c chcp 1251 > nul && "$(AutoIt3Dir)\Au3Check.exe" "$(FilePath)" && echo ----- Script Output ----- && "$(AutoIt3Dir)\AutoIt3.exe" /ErrorStdOut "$(FilePath)" $(1) $(2) $(3) $(4)

#autoit.cmd.go64="$(AutoIt3Dir)\AutoIt3_x64.exe" /ErrorStdOut "$(FilePath)" $(1) $(2) $(3) $(4)
autoit.cmd.go64=cmd.exe /c chcp 1251 > nul && "$(AutoIt3Dir)\Au3Check.exe" "$(FilePath)" && echo ----- Script Output ----- && "$(AutoIt3Dir)\AutoIt3_x64.exe" /ErrorStdOut "$(FilePath)" $(1) $(2) $(3) $(4)

#command.go.subsystem.$(au3)=1
command.go.subsystem.$(au3)=0
[/box]
[box title=Способ 2: посредник script.exe]
Компилируем скрипт под x86 для возможности запуска на системах с разной архитектурой. Для вызова AutoIt3_x64.exe используем параметр /64 или -64
Код:
#NoTrayIcon

If Not $CmdLine[0] Then Exit -1
Global $Au3Check = CheckFile("Au3Check.exe")
Global $64
For $i = 1 To $CmdLine[0]
  If $CmdLine[$i] = "/64" Or $CmdLine[$i] = "-64" Then
    $64 = True
    $CmdLine[$i] = ""
  EndIf
Next
If $64 And @OSArch = "X86" Then
  ConsoleWrite("!> " & @ScriptName & " : Can't run AutoIt3_x64 because OS is x86" & @CRLF)
  Exit -1
EndIf
If $64 Then
  Global $AutoIt3 = CheckFile("AutoIt3_x64.exe")
Else
  Global $AutoIt3 = CheckFile("AutoIt3.exe")
EndIf

Global $Output, $Line, $ErrCode, $PID
$ErrCode = GetExitCode($Au3Check & ' "' & $CmdLine[1] & '"', False)
If Not $ErrCode Then
  $Line = ' "' & $CmdLine[1] & '"'
  For $i = 2 To $CmdLine[0]
    $Line &= " " & $CmdLine[$i]
  Next
  $ErrCode = GetExitCode($AutoIt3 & " /ErrorStdOut" & $Line)
  If $ErrCode Then MarkErrLine()
  Exit $ErrCode
Else
  ConsoleWrite(StdoutRead($PID))
  MarkErrLine()
  Exit $ErrCode
EndIf

Func CheckFile($FileName)
  Local $FilePath = @ScriptDir & "\" & $FileName
  If Not FileExists($FilePath) Then
    $FilePath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\" & $FileName
    If Not FileExists($FilePath) Then
      ConsoleWrite("!> " & @ScriptName & " : File not found '" & $FileName & "'" & @CRLF)
      Exit -1
    EndIf
  EndIf
  Return $FilePath
EndFunc

Func GetExitCode($Str, $Read = True)
  Local $aOP, $aEC, $ExitCode = -1
  $PID = Run($Str, "", @SW_HIDE, 8)
  If Not $PID Then Return $ExitCode
  $aOP = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", 0x400, "bool", 0, "dword", $PID)
  If $Read Then
    While Sleep(10)
      $Output = StdoutRead($PID)
      If @error Then ExitLoop
      If @extended Then ConsoleWrite($Output)
    WEnd
  EndIf
  While ProcessExists($PID)
    Sleep(10)
  WEnd
  If IsArray($aOP) Then
    $aEC = DllCall("kernel32.dll", "bool", "GetExitCodeProcess", "handle", $aOP[0], "dword*", 0)
    If Not @error Then $ExitCode = $aEC[2]
    DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $aOP[0])
  EndIf
  Return $ExitCode
EndFunc

Func MarkErrLine()
  WinActivate("[class:SciTEWindow]")
  Send("{F4}")
EndFunc
В файле properties\au3.properties в параметрах autoit.cmd.go и autoit.cmd.go64 прописываем путь к скрипту (у меня он назван Runner.exe и находится в папке AutoIt)
Код:
#autoit.cmd.go="$(AutoIt3Dir)\AutoIt3.exe" /ErrorStdOut "$(FilePath)" $(1) $(2) $(3) $(4)
autoit.cmd.go="$(AutoIt3Dir)\Runner.exe" "$(FilePath)" $(1) $(2) $(3) $(4)

#autoit.cmd.go64="$(AutoIt3Dir)\AutoIt3_x64.exe" /ErrorStdOut "$(FilePath)" $(1) $(2) $(3) $(4)
autoit.cmd.go64="$(AutoIt3Dir)\Runner.exe" /64 "$(FilePath)" $(1) $(2) $(3) $(4)
В отличие от cmd.exe, скрипт проверяет наличие файлов, не отображает сообщения Au3Check при отсутствии ошибок и автоматически нажимает F4 для перехода к строке с ошибкой.
[/box] Недостатком обоих способов является то, что при выборе в меню SciTE "Tools - Stop Executing" будет закрыт посредник, а сам скрипт продолжит работу.



У меня не сохраняются настройки SciTE. Возможно, из-за написания имени пользователя кириллицей. Пока изменил на
Код:
scite.userhome=$(SciteDefaultHome)



Немного критики в адрес Compiler Wrapper:
- в любом случае пересохраняет файл, добавляя пустую строку в конец скрипта
- перезаписывает директивы, даже если они уже прописаны
- не видит директивы, если перед ними указана #NoTrayIcon



inververs
Где можно настроить, что бы при двойном клике по русскому слову оно выделялось не захватывая кавычки и скобки?
В файле SciTEUser.properties добавляете строку
Код:
chars.accented=абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
и сохраняете в кодировке ANSI (cp 1251). Если к этим символам добавить кавычку ("), то будет захватывать вместе с кавычками.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
InnI [?]
- не видит директивы, если перед ними указана #NoTrayIcon
Не видит если идут не первыми, но это трудно назвать недостатком, не искать же их по всему скрипту.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
inververs сказал(а):
Не видит если идут не первыми, но это трудно назвать недостатком, не искать же их по всему скрипту.
По умолчанию CW ищет директивы pragma в начале скрипта. Для больших проектов, это существенно экономит время. Но вы можете отключить этот режим (CW.ini, SavePragmaFirst=0). После этого директивы pragma могут находиться в любом месте кода.


Добавлено:
Сообщение автоматически объединено:

InnI сказал(а):
перезаписывает директивы, даже если они уже прописаны
Если вы нажали Save/Compile, то, естественно, перезапишет.
 
Верх