Страница 112 из 243
Добавлено: Вт июн 02, 2020 10:55
yozhik
Loopback писал(а):Занятно, у меня работает.
Вот, ключевая фраза прозвучала, и сразу и у меня всё заработало. А оказывается дело-то было в пробелах! Я команды в конфиге выровнял пробелами, чтоб наглядней было:
Код: Выделить всё
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 писал(а):Я на днях тоже об этом думал
Очень рад, что я не одинок. Собственно, была бы возможность настраиваемых подсказок. Там уж какими способами — дело хозяйское.
Добавлено: Вт июн 02, 2020 11:20
Loopback
Flasher писал(а):Отдельно написанная if-функция под команды, не из блочного синтаксиса:
А, ну понятно. Типа как IfElse - подобие тернарного оператора в дельфи. Только как и там, работать так не будет, т.к. актуальные параметры вычисляются перед входом в функцию. Но если сделать функцию Eval, выполняющую записанный строкой код, тогда можно будет так записать:
Код: Выделить всё
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 писал(а): А оказывается дело-то было в пробелах!
Спасибо за пример, смог повторить. Очень интересный косячок, что-то явно с передачей параметров в плагин.
Добавлено: Вт июн 02, 2020 11:29
Flasher
Loopback писал(а):тогда можно будет так записать:
В конфиге? Это-то понятно, но нам бы опять же шашечки.

Добавлено: Вт июн 02, 2020 11:46
Loopback
Flasher
Других шашечек не будет.
Добавлено: Вт июн 02, 2020 16:32
yozhik
Loopback
Ещё заметил. При такой последовательности
Код: Выделить всё
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_. Чтобы заработали обе, нужно переставить строки местами
Код: Выделить всё
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
Это я к тому, что может в справке стоит упомянуть...
Добавлено: Вт июн 02, 2020 17:40
Loopback
yozhik
Не надо это документировать, это баг

Вот исправленная
версия.
Для трех основных модификаторов любые их комбинации должны работать независимо от расположения вызовов.
Добавлено: Вт июн 02, 2020 20:47
Loopback
Версия 2.2.2 beta
- Tweaks: исправлена работа с модификаторами
- исправлена работа с именованными параметрами
+ функция Eval для вычисления значения строки с выражением
+ функция Call для вызова функции по имени, заданному строкой
+ добавлен открытый список параметров в функциях
+ добавлены ключевые слова Global, Local
- исправлен некорректный номер строки в сообщениях об ошибках
- исправлена работа с кавычками в выражениях в определенных ситуациях
- исправлена работа с глобальными переменными в функциях
В русскую справку добавлено описание бета-функционала, пока одной страницей.
Онлайн-вариант.
Добавлено: Вт июн 02, 2020 23:09
Flasher
Loopback
Так ты поддержку старого синтаксиса поубирал что ли?
Код: Выделить всё
ControlSetMouseAction /R /K:A /H:64 0 CommandExec em_Lang %"IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)"
Undefined variable: Configuration
Код: Выделить всё
If Not ProcessExist('~/F', '%COMMANDER_PATH%\Utils\Everything\Everything.exe') Then
Undefined command of function name: NotProcessExist
Код: Выделить всё
If %COMMANDER_LANGINI% = wcmd_eng.lng OR %COMMANDER_LANGINI% = "" Then
Undefined variable: wcmd_eng.lngOR%COMMANDER_LANGINI%
Также возможно задавать переменные без предварительного определения:
Хм.
Легче не стало. Без кавычек нельзя, апострофы не поддерживаются.
Параметр задается специальным значением «…»
Вот так намудрил. Впервые такое вижу.

Добавлено: Вт июн 02, 2020 23:15
yozhik
Loopback
У меня пробелы работают и бага с расположением больше нет. Спасибо.
Следующий момент:
Код: Выделить всё
ControlSetMouseAction /L /K:C 17 /B:3
ControlSetMouseAction /L /K:C /K:S 17 /B:3 SendCommand 1004
В этом варианте второй вызов (с Ctrl+Shift) блокируется.
Код: Выделить всё
ControlSetMouseAction /L /K:C /K:S 17 /B:3 SendCommand 1004
ControlSetMouseAction /L /K:C 17 /B:3
А в этом всё хорошо отрабатывает: родной с Ctrl блокируется, а мой назначенный с Ctrl+Shift срабатывает.
Добавлено: Ср июн 03, 2020 00:38
Loopback
Flasher писал(а):Так ты поддержку старого синтаксиса поубирал что ли?
Не запланированно, но получается да, в процессе отключил поддержку строчных литералов без кавычек, которые без них, по-хорошему, должны представлять имена переменных или функций. И даже не заметил этого, поскольку все строки всегда делаю в кавычках.
Вообще это порочная практика, использование строк в скрипте без кавычек. Пока был командный синтаксис, проблем это не составляло, но очень мешает теперь. Надо было бы изначально сделать кавычки обязательными, но кто же тогда знал, во что это со временем перерастет.
Наверно буду делать новую директиву, управляющую обязательностью кавычек в выражениях (к командам это не относится). И скорее всего, включу ее по умолчанию.
А пока исправленная
версия с необязательными кавычками.
Хотя, во втором примере все равно косяк. Многострадальный not
Flasher писал(а): Без кавычек нельзя, апострофы не поддерживаются.
Причина та же что и выше.
Что за апострофы, которых тут так не хватает?
Flasher писал(а):Вот так намудрил. Впервые такое вижу
Всё давно
придумано до нас.
Метод получения аргументов не лучше и не хуже других языков. Были бы массивы - можно было бы сделать массивом.
yozhik писал(а):Следующий момент:
Хорошо, проверю.
Добавлено: Ср июн 03, 2020 01:49
Flasher
Loopback писал(а):в процессе отключил поддержку строчных литералов без кавычек
А почему тогда на эту строку не ругалось?
Код: Выделить всё
If %OSVer% = 2000 Or %OSVer% = XP Or %OSVer% = 2003 Or %OSVer% = 2003R2 Then
Loopback писал(а):И скорее всего, включу ее по умолчанию.
Да ну, не надо. А то потом чужие баги разгребать замучаешься.
Loopback писал(а):Хотя, во втором примере все равно косяк. Многострадальный not
Жду правки.
Забыл ещё написать, что сперва появляется окно только с текстом 'Load'. С чем это может быть связано?
Loopback писал(а):Что за апострофы, которых тут так не хватает?
В смысле "что"? A = 'Text'
Loopback писал(а):Всё давно придумано до нас.
Что-то не вижу там ничего толкового про многоточие.
Добавлено: Ср июн 03, 2020 10:39
Loopback
Flasher писал(а):А почему тогда на эту строку не ругалось?
Не знаю. Баг с not затрагивал и or и and. Что-то может сложилось не так.
PS: Перезалил исправленный вариант по той же
ссылке.
Flasher писал(а):Забыл ещё написать, что сперва появляется окно только с текстом 'Load'. С чем это может быть связано?
Исправил.
Flasher писал(а): A = 'Text'
И что же мешает их использовать? Как работало, так и работает, наравне с двойными кавычками.
Flasher писал(а):Что-то не вижу там ничего толкового про многоточие.
В примере показано. В С так задается переменный список аргументов.
yozhik писал(а):Следующий момент:
Доконают меня эти модификаторы

, а вроде простая вещь... Надеюсь,
исправил окончательно.
Добавлено: Ср июн 03, 2020 19:47
Flasher
Loopback писал(а):Исправил.
Появляется, если присвоение без кавычек. А вот на этой строке 'If %COMMANDER_LANG% = eng Then' не только появляется, но потом и крашит ТС с окном 'Runtime error 216 at 754D8449', которое обычным образом не закрывается и держит ТС (+ TCFS2) до его терминирования.
Loopback писал(а):И что же мешает их использовать?
Сейчас проверил, вроде заработало.
Добавлено: Ср июн 03, 2020 21:07
Loopback
Flasher писал(а):Появляется, если присвоение без кавычек. А вот на этой строке 'If %COMMANDER_LANG% = eng Then' не только появляется, но потом и крашит ТС с окном 'Runtime error 216 at 754D8449'
На этой строке не могу повторить.
Конкретно "Load" вылезало на функции LngRead, в утренней версии (от 12:43) я его убрал. Но у меня она проблем не вызывает.
Добавлено: Ср июн 03, 2020 21:56
Flasher
Loopback
Не знаю, у меня проблема именно на ней. Крах происходит после смены языка на английский, а Load всегда появляется.
[cut="Появилось после правки моего справочного примера:"]
Код: Выделить всё
If %COMMANDER_LANG% = eng Then
ExpandSelection = 'Expand selection'
CustomFields = 'Custom fields by file type'
ListerPlugins = 'Lister plugins'
ContentPlugins = 'Content plugins'
IntAssoc = 'Internal Associations'
Tree = 'Tree'
Edit = 'Edit/View'
Plugins = 'Plugins'
Packer = 'Packer'
Font = 'Font'
DefineColors = 'Define colors by file type'
FSplugins = 'File system plugins'
Else
IniRead /R LNG %COMMANDER_INI% Configuration LanguageIni
LngRead ExpandSelection 18 '%COMMANDER_PATH%\Language\%LNG%'
LngRead CustomFields 1589
LngRead ListerPlugins 1593
LngRead ContentPlugins 1595
LngRead IntAssoc 1722
LngRead Tree 5002
LngRead Edit 5102
StrPart Packer "%Edit%" \n 9
StrPart Edit "%Edit%" \n 5
LngRead Plugins 5360
LngRead Font 5844
StrTrim Font %Font%
LngRead DefineColors 6501
LngRead FSplugins 6841
EndIf
[/cut]