Autorun

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher писал(а):Вот бы ещё для безмышиного вызова такое.
В смысле? Экзешник отдельный?
Flasher писал(а):P.S.: Шапку потом будешь править?
На неделе поправлю, некогда еще было.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):В смысле? Экзешник отдельный?
Ну, как вариант, если чисто клавишный для плагина отпадает. Типа TcMenuPopup посл. редакции с опциями размещения по центу и под перекрестием разделителя с верхними углами файловых панелей.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher
Ладно, как-нибудь можно будет подумать. У каждого подхода свои проблемы в реализации, неизвестно что проще.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback
Хорошо. Если будет утилита, то публикацию, как понимаю, стоит ожидать в отдельном топике.

Вижу косяк. После вызова меню не работает навигация стрелками и его скрытие по Esc.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher писал(а):Вижу косяк.
Пожалуй, не совсем и косяк, учитывая что меню сейчас вызывается только мышью. За всё время даже и не подумал проверить такой сценарий :)

Перезалил по той же ссылке.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):учитывая что меню сейчас вызывается только мышью.
Почему только? А как же клавишные модификаторы? :wink:

Спасибо за фикс.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

В общем, поскольку проблем вроде больше не возникло, плагин ушел в релиз.

2.1.1
- небольшие исправления в документации
* чистки в коде
+ Tweaks: ShowPopupMenu может отображать значки в меню
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback
Да не сказать, что сильно тестировал менюшки. До баров даже руки не дошли, тем более с такими ограничениями.

По справкам:
Страница GetSystemMetrics опустела.
В англ. справке примеры для ModifyDialogs так и не поправил. Там же к неисправленным знакам вопроса добавилась страница ControlSetMouseAction в моих примерах.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
yozhik
Сообщения: 353
Зарегистрирован: Вс май 04, 2014 20:34
Откуда: Электросталь

Сообщение yozhik »

А как по кнопке на тулбаре попасть, чтобы на неё менюшку повесить? Вижу класс TButtonBar, а как внутри него до кнопки добраться не понимаю. Вот так на всех кнопках одна и та же менюшка получается:

Код: Выделить всё

ControlSetMouseAction /L:U /C:TButtonBar 1 ShowPopupMenu %COMMANDER_PATH%\Profile\tools\MenuPopup\TCMenuSystem.mnu
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

yozhik
Никак. Кнопки рисованые и не имеют отдельных оконных идентификаторов и классов.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher писал(а):Страница GetSystemMetrics опустела.
Точно. Интернет вчера отвратительно работал, страничка недогрузилась. Перезалил архив, версию не поднимал.
Flasher писал(а):В англ. справке
Да, надо бы это сразу править, потом забывается...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):Да, надо бы это сразу править
Так и? См. выделения в цитате из второй половины сообщения в ЛС от 25 апр. 15:36. Плюс:
# Shift+??? anywhere = switch to main toolbar,
Остальное, вроде, починил.

Add: исправления вижу, теперь ОК.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

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

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

Унифицированы интерфейсы команд - внутренних и экспортируемых из плагинов (внутреннее изменение, оптимизация)
Парсер переписан с нуля, с учетом сохранения совместимости
Соответственно, переписаны условия If..Else..Endif, добавлена возможность однострочного If .. Then
Добавлены циклы For и While

Код: Выделить всё

    For var = 1 To 5 [Step x]
    ...
    Next

    While var > 0
    ...
    Wend
Ключевые слова для управления выполнением (break, continue, return)
Добавлены пользовательские функции

Код: Выделить всё

    Func FuncName([ByRef] var1, var2, var3 = 1)
    ...
    EndFunc
Переменные в функциях локальны
Добавлено присваивание переменной

Код: Выделить всё

    var = expression
Поддержка разделения на строки с символом "_" в конце

Код: Выделить всё

    var = expression_1 + _
          expression_2 - _
          expression_N
Поддержка загрузки подключаемых файлов (includes)

Код: Выделить всё

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


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

Код: Выделить всё

MsgBox 123 Title - OK
MsgBox("123", "Title") - OK
А вот в присваивании в правой части писать команды "старым" методом нельзя.

Код: Выделить всё

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, проблем с синтаксисом не будет :)
Flasher писал(а):Так и?
Правил-правил, в итоге скопировал старый вариант :) Обновил, последний раз, если что осталось - потом.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback
Быстро же ты синтаксис в приоритет над последними хотелками вывел. :)
Loopback писал(а):добавлена возможность однострочного If .. Then
Наконец-то! А сделать, чтобы такая запись заработала в качестве параметра ControlSetMouseAction, можно?
Loopback писал(а):Добавлены пользовательские функции
А вызывать их как? Через Call, со скобками, без? Интерактивно (ControlSetMouseAction) можно?
Loopback писал(а):Переменные в функциях локальны
А если они объявлены до вызова?
Loopback писал(а):Поддержка загрузки подключаемых файлов (includes)
Имеется в виду скриптов с синтаксисом autorun?
Loopback писал(а):В целом, совместимость со старыми скриптами сохраняется.
Это очень хорошо. :)
Loopback писал(а):есть желание убрать директиву AutorunLoadInSubrocess
Нисколько не против.
Loopback писал(а):Наверно, придется немного переделать.
А тут только и остаётся добавить флаг в качестве последнего параметра.
Loopback писал(а):Обновил, последний раз
См. добавку в пред. посте.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher писал(а):Быстро же ты синтаксис в приоритет над последними хотелками вывел.
А чего тянуть-то? :wink:

На самом деля я вроде и не давал каких-то конкретных обещаний. Да и что-то та тема уже несколько поднадоела, когда-нибудь позже вернусь.
Flasher писал(а):Наконец-то! А сделать, чтобы такая запись заработала в качестве параметра ControlSetMouseAction, можно?

А вызывать их как? Через Call, со скобками, без? Интерактивно (ControlSetMouseAction) можно?
Напрямую в качестве параметра нет, но можно вызывать функцию с нужными If-ами и прочим. Вызов по имени точно такой же, как у любой другой команды. Можно без скобок командой (если не нужно возвращаемое значение), можно со скобками:

Код: Выделить всё

    FuncName 123 "asdf"   - OK
    FuncName(123, "asdf")  - OK
    ControlSetMouseAction ... FuncName 123 zxcv - OK

    Func FuncName(var1, var2) 
    ... 
    EndFunc
Flasher писал(а):А если они объявлены до вызова?
Планировалось так: если объявлены в основном теле скрипта до вызова, то глобальные, если в функции, при отсутствии глобальной - локальная. Но что-то мне подсказывает, что сейчас оно как-то не как задумано работает...
Flasher писал(а):Имеется в виду скриптов с синтаксисом autorun?
Конечно. Не знаю пока, насколько это будет востребовано именно в качестве библиотеки, но лично мне давно было нужно иметь возможность вынести основной конфиг из каталога плагина в заданное место. Даже думал дополнительный инишник делать, но так явно лучше.
Flasher писал(а):Это очень хорошо
Когда-то казалось, что все новые фичи возможны, только если полностью поменять синтаксис и пожертвовать совместимостью, но как выяснилось, возможны менее болезненные варианты.
Flasher писал(а):А тут только и остаётся добавить флаг в качестве последнего параметра.
Да, так и планировалось.
Ответить