Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Autorun 
Author Message
Loopback



PostPosted: Sun May 31, 2020 20:53    Post subject: Reply with quote

Новая версия. Даже не знаю - бета это или альфа... Самые глобальные изменения за последние семь лет Very Happy Пока называю 2.2.x, но вероятнее всего, это будет 2.5 или 3.0.

Список изменений:

Унифицированы интерфейсы команд - внутренних и экспортируемых из плагинов (внутреннее изменение, оптимизация)
Парсер переписан с нуля, с учетом сохранения совместимости
Соответственно, переписаны условия If..Else..Endif, добавлена возможность однострочного If .. Then
Добавлены циклы For и While
Code:
    For var = 1 To 5 [Step x]
    ...
    Next

    While var > 0
    ...
    Wend

Ключевые слова для управления выполнением (break, continue, return)
Добавлены пользовательские функции
Code:
    Func FuncName([ByRef] var1, var2, var3 = 1)
    ...
    EndFunc

Переменные в функциях локальны
Добавлено присваивание переменной
Code:
    var = expression

Поддержка разделения на строки с символом "_" в конце
Code:
    var = expression_1 + _
          expression_2 - _
          expression_N

Поддержка загрузки подключаемых файлов (includes)
Code:
    Pragma Include "path_to_include" (алгоритм аналогичен LoadLibrary, но работают только переменные окружения)

В подключаемых файлах можно использовать Pragma IncludeOnce
В выражениях можно использовать переменные без %%


В целом, совместимость со старыми скриптами сохраняется. Если команда/функция находится в начале строки (без присваивания), то Autorun их различает по наличию "(" после имени. Если вдруг понадобится запустить "старую" команду, где первый символ после имени должен быть скобкой, ее можно просто взять в кавычки.
Code:
MsgBox 123 Title - OK
MsgBox("123", "Title") - OK

А вот в присваивании в правой части писать команды "старым" методом нельзя.
Code:
ex = FileExist "c:\Total\NoClose.exe" - работать не будет
ex = FileExist("c:\Total\NoClose.exe") - ОК


Синтаксис %"expression" используется только в параметрах команд старого типа.

На моей рабочей конфигурации всё заработало без модификаций. Тем не менее, есть некоторые вынужденные (или желательные с точки зрения оптимизации) изменения, которые могут повлиять на работоспособность имеющихся конфигураций:

- Убрана команда AutorunBlockUnload(YES), которая оставалась с древних времен для совместимости, оставлена только Pragma AutorunBlockUnload.
- Убран старый синтаксис FileExists в условиях, можно легко переписать FileExists "file" -> FileExists("file") (имя должно быть в кавычках). Реально, тут было слишком много лишнего кривого кода ради одной функции.
- Убрана директива AutorunAllowWriteEnv, я ее и раньше считал невразумительным костылем, а в новом коде она вообще нормально не ложится.
- Еще не убрана, но есть желание убрать директиву AutorunLoadInSubrocess, все же сомневаюсь, что кому-то может понадобиться загружать Autorun повторно в процессе, например, поиска. А сейчас, с учетом подключаемых файлов, поиск этой директивы может быть уже не так безболезнен как раньше.

В целом, как оказалось, оба подхода вполне могут мирно сосуществовать, у каждого есть свои плюсы и минусы. Некоторые сложные команды, например ControlSetMouseAction или AddContol, без использования переключателей были бы весьма громоздкими и неудобными в задании параметров. В то же время для строчных команд лучше подходит функциональный синтаксис.

По получившемуся результату мне не нравится единственный момент - передача переключателей в функции через специальный первый параметр ("~/S /N ..."), для обычных команд еще терпимо, но вот для строчных как-то это совсем не очень. Наверно, придется немного переделать.

Справка еще не обновлялась, поэтому достаточно подробно расписал пока здесь, возможно, что-то еще будет меняться. У тех, кто знаком с Autoit, проблем с синтаксисом не будет Smile

Flasher wrote:
Так и?

Правил-правил, в итоге скопировал старый вариант Smile Обновил, последний раз, если что осталось - потом.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group