View previous topic :: View next topic |
Author |
Message |
yozhik
Joined: 04 May 2014 Posts: 181
|
(Separately) Posted: Tue Jun 02, 2020 11:55 Post subject: |
|
|
Loopback wrote: | Занятно, у меня работает. |
Вот, ключевая фраза прозвучала, и сразу и у меня всё заработало. А оказывается дело-то было в пробелах! Я команды в конфиге выровнял пробелами, чтоб наглядней было:
Code: | ControlSetMouseAction /L /K:A 17 /B:4 SendCommand 509
ControlSetMouseAction /R 17 /B:7 ShowPopupMenu %COMMANDER_PATH%\Profile\tools\MenuPopup\TCMenuShutdown.mnu
ControlSetMouseAction /L /K:S 17 /B:7 CommandExec em_MENU_Shutdown_TCRestart
ControlSetMouseAction /L /K:A /K:S 17 /B:7 CommandExec em_Menu_Shutdown_TCSwitchArc |
Теперь если в 3й строке лишние пробелы между /L и /K:S убрать, и оставить один, то всё заработает. 2.1.1 воспринимает оба варианта, 2.2.1 только без пробелов. Ну, по аналогии с жизнью вроде это понятно: парсер то молодой ещё, а чем моложе, тем строже .
Flasher wrote: | Я на днях тоже об этом думал |
Очень рад, что я не одинок. Собственно, была бы возможность настраиваемых подсказок. Там уж какими способами — дело хозяйское. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1291
|
(Separately) Posted: Tue Jun 02, 2020 12:20 Post subject: |
|
|
Flasher wrote: | Отдельно написанная if-функция под команды, не из блочного синтаксиса: |
А, ну понятно. Типа как IfElse - подобие тернарного оператора в дельфи. Только как и там, работать так не будет, т.к. актуальные параметры вычисляются перед входом в функцию. Но если сделать функцию Eval, выполняющую записанный строкой код, тогда можно будет так записать:
Code: |
MyIf(%AUTORUN_TCPID%=32,"ShellExec('~/SW_HIDE',prog.exe)","ShellExec('~/SW_HIDE',prog64.exe)")
Func MyIf(expr, e_true, e_false)
if expr then
Eval(e_true)
else
Eval(e_false)
endif
EndFunc |
yozhik wrote: | А оказывается дело-то было в пробелах! |
Спасибо за пример, смог повторить. Очень интересный косячок, что-то явно с передачей параметров в плагин. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Jun 02, 2020 12:29 Post subject: |
|
|
Loopback wrote: | тогда можно будет так записать: | В конфиге? Это-то понятно, но нам бы опять же шашечки. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1291
|
(Separately) Posted: Tue Jun 02, 2020 12:46 Post subject: |
|
|
Flasher
Других шашечек не будет. |
|
Back to top |
|
|
yozhik
Joined: 04 May 2014 Posts: 181
|
(Separately) Posted: Tue Jun 02, 2020 17:32 Post subject: |
|
|
Loopback
Ещё заметил. При такой последовательности
Code: | ControlSetMouseAction /L /K:A 17 /B:6 CommandExec em_MENU_F8_BGDelete
ControlSetMouseAction /L /K:A /K:S 17 /B:6 CommandExec em_FASTCOPY_Delete |
вызов по Alt+Shift не срабатывает, точнее в обоих случаях срабатывает только первая em_. Чтобы заработали обе, нужно переставить строки местами
Code: | ControlSetMouseAction /L /K:A /K:S 17 /B:6 CommandExec em_FASTCOPY_Delete
ControlSetMouseAction /L /K:A 17 /B:6 CommandExec em_MENU_F8_BGDelete |
Это я к тому, что может в справке стоит упомянуть... |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1291
|
(Separately) Posted: Tue Jun 02, 2020 18:40 Post subject: |
|
|
yozhik
Не надо это документировать, это баг Вот исправленная версия.
Для трех основных модификаторов любые их комбинации должны работать независимо от расположения вызовов. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1291
|
(Separately) Posted: Tue Jun 02, 2020 21:47 Post subject: |
|
|
Версия 2.2.2 beta
- Tweaks: исправлена работа с модификаторами
- исправлена работа с именованными параметрами
+ функция Eval для вычисления значения строки с выражением
+ функция Call для вызова функции по имени, заданному строкой
+ добавлен открытый список параметров в функциях
+ добавлены ключевые слова Global, Local
- исправлен некорректный номер строки в сообщениях об ошибках
- исправлена работа с кавычками в выражениях в определенных ситуациях
- исправлена работа с глобальными переменными в функциях
В русскую справку добавлено описание бета-функционала, пока одной страницей. Онлайн-вариант. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jun 03, 2020 00:09 Post subject: |
|
|
Loopback
Так ты поддержку старого синтаксиса поубирал что ли?
Code: | ControlSetMouseAction /R /K:A /H:64 0 CommandExec em_Lang %"IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)"
Undefined variable: Configuration
|
Code: | If Not ProcessExist('~/F', '%COMMANDER_PATH%\Utils\Everything\Everything.exe') Then
Undefined command of function name: NotProcessExist |
Code: | If %COMMANDER_LANGINI% = wcmd_eng.lng OR %COMMANDER_LANGINI% = "" Then
Undefined variable: wcmd_eng.lngOR%COMMANDER_LANGINI% |
Quote: | Также возможно задавать переменные без предварительного определения: | Хм. Code: | Set Name Text
Name = "Text" | Легче не стало. Без кавычек нельзя, апострофы не поддерживаются.
Quote: | Параметр задается специальным значением «…»
Code: | Func MyFunc(...)
For i = 1 To Args() |
| Вот так намудрил. Впервые такое вижу. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Wed Jun 03, 2020 00:16; edited 1 time in total |
|
Back to top |
|
|
yozhik
Joined: 04 May 2014 Posts: 181
|
(Separately) Posted: Wed Jun 03, 2020 00:15 Post subject: |
|
|
Loopback
У меня пробелы работают и бага с расположением больше нет. Спасибо.
Следующий момент:
Code: | ControlSetMouseAction /L /K:C 17 /B:3
ControlSetMouseAction /L /K:C /K:S 17 /B:3 SendCommand 1004 |
В этом варианте второй вызов (с Ctrl+Shift) блокируется.
Code: | ControlSetMouseAction /L /K:C /K:S 17 /B:3 SendCommand 1004
ControlSetMouseAction /L /K:C 17 /B:3 |
А в этом всё хорошо отрабатывает: родной с Ctrl блокируется, а мой назначенный с Ctrl+Shift срабатывает. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1291
|
(Separately) Posted: Wed Jun 03, 2020 01:38 Post subject: |
|
|
Flasher wrote: | Так ты поддержку старого синтаксиса поубирал что ли? |
Не запланированно, но получается да, в процессе отключил поддержку строчных литералов без кавычек, которые без них, по-хорошему, должны представлять имена переменных или функций. И даже не заметил этого, поскольку все строки всегда делаю в кавычках.
Вообще это порочная практика, использование строк в скрипте без кавычек. Пока был командный синтаксис, проблем это не составляло, но очень мешает теперь. Надо было бы изначально сделать кавычки обязательными, но кто же тогда знал, во что это со временем перерастет.
Наверно буду делать новую директиву, управляющую обязательностью кавычек в выражениях (к командам это не относится). И скорее всего, включу ее по умолчанию.
А пока исправленная версия с необязательными кавычками.
Хотя, во втором примере все равно косяк. Многострадальный not
Flasher wrote: | Без кавычек нельзя, апострофы не поддерживаются. |
Причина та же что и выше.
Что за апострофы, которых тут так не хватает?
Flasher wrote: | Вот так намудрил. Впервые такое вижу |
Всё давно придумано до нас.
Метод получения аргументов не лучше и не хуже других языков. Были бы массивы - можно было бы сделать массивом.
yozhik wrote: | Следующий момент: |
Хорошо, проверю. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jun 03, 2020 02:49 Post subject: |
|
|
Loopback wrote: | в процессе отключил поддержку строчных литералов без кавычек | А почему тогда на эту строку не ругалось?
Code: | If %OSVer% = 2000 Or %OSVer% = XP Or %OSVer% = 2003 Or %OSVer% = 2003R2 Then |
Loopback wrote: | И скорее всего, включу ее по умолчанию. | Да ну, не надо. А то потом чужие баги разгребать замучаешься.
Loopback wrote: | Хотя, во втором примере все равно косяк. Многострадальный not | Жду правки.
Забыл ещё написать, что сперва появляется окно только с текстом 'Load'. С чем это может быть связано?
Loopback wrote: | Что за апострофы, которых тут так не хватает? | В смысле "что"? A = 'Text'
Loopback wrote: | Всё давно придумано до нас. | Что-то не вижу там ничего толкового про многоточие. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1291
|
(Separately) Posted: Wed Jun 03, 2020 11:39 Post subject: |
|
|
Flasher wrote: | А почему тогда на эту строку не ругалось? |
Не знаю. Баг с not затрагивал и or и and. Что-то может сложилось не так.
PS: Перезалил исправленный вариант по той же ссылке.
Flasher wrote: | Забыл ещё написать, что сперва появляется окно только с текстом 'Load'. С чем это может быть связано? |
Исправил.
Flasher wrote: | A = 'Text' |
И что же мешает их использовать? Как работало, так и работает, наравне с двойными кавычками.
Flasher wrote: | Что-то не вижу там ничего толкового про многоточие. |
В примере показано. В С так задается переменный список аргументов.
yozhik wrote: | Следующий момент: |
Доконают меня эти модификаторы , а вроде простая вещь... Надеюсь, исправил окончательно. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jun 03, 2020 20:47 Post subject: |
|
|
Loopback wrote: | Исправил. | Появляется, если присвоение без кавычек. А вот на этой строке 'If %COMMANDER_LANG% = eng Then' не только появляется, но потом и крашит ТС с окном 'Runtime error 216 at 754D8449', которое обычным образом не закрывается и держит ТС (+ TCFS2) до его терминирования.
Loopback wrote: | И что же мешает их использовать? | Сейчас проверил, вроде заработало. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1291
|
(Separately) Posted: Wed Jun 03, 2020 22:07 Post subject: |
|
|
Flasher wrote: | Появляется, если присвоение без кавычек. А вот на этой строке 'If %COMMANDER_LANG% = eng Then' не только появляется, но потом и крашит ТС с окном 'Runtime error 216 at 754D8449' |
На этой строке не могу повторить.
Конкретно "Load" вылезало на функции LngRead, в утренней версии (от 12:43) я его убрал. Но у меня она проблем не вызывает. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|