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 

Autorun
Goto page Previous  1, 2, 3 ... 111, 112, 113 ... 133, 134, 135  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
yozhik



Joined: 04 May 2014
Posts: 181

Post (Separately) Posted: Tue Jun 02, 2020 11:55    Post subject: Reply with quote

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 только без пробелов. Ну, по аналогии с жизнью вроде это понятно: парсер то молодой ещё, а чем моложе, тем строже Smile .

Flasher wrote:
Я на днях тоже об этом думал

Очень рад, что я не одинок. Собственно, была бы возможность настраиваемых подсказок. Там уж какими способами — дело хозяйское.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1291

Post (Separately) Posted: Tue Jun 02, 2020 12:20    Post subject: Reply with quote

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
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Jun 02, 2020 12:29    Post subject: Reply with quote

Loopback wrote:
тогда можно будет так записать:
В конфиге? Это-то понятно, но нам бы опять же шашечки. Wink
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1291

Post (Separately) Posted: Tue Jun 02, 2020 12:46    Post subject: Reply with quote

Flasher
Других шашечек не будет.
Back to top
View user's profile Send private message
yozhik



Joined: 04 May 2014
Posts: 181

Post (Separately) Posted: Tue Jun 02, 2020 17:32    Post subject: Reply with quote

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
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1291

Post (Separately) Posted: Tue Jun 02, 2020 18:40    Post subject: Reply with quote

yozhik
Не надо это документировать, это баг Smile Вот исправленная версия.

Для трех основных модификаторов любые их комбинации должны работать независимо от расположения вызовов.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1291

Post (Separately) Posted: Tue Jun 02, 2020 21:47    Post subject: Reply with quote

Версия 2.2.2 beta

- Tweaks: исправлена работа с модификаторами
- исправлена работа с именованными параметрами
+ функция Eval для вычисления значения строки с выражением
+ функция Call для вызова функции по имени, заданному строкой
+ добавлен открытый список параметров в функциях
+ добавлены ключевые слова Global, Local
- исправлен некорректный номер строки в сообщениях об ошибках
- исправлена работа с кавычками в выражениях в определенных ситуациях
- исправлена работа с глобальными переменными в функциях

В русскую справку добавлено описание бета-функционала, пока одной страницей. Онлайн-вариант.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jun 03, 2020 00:09    Post subject: Reply with quote

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()
Вот так намудрил. Впервые такое вижу. Smile
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Wed Jun 03, 2020 00:16; edited 1 time in total
Back to top
View user's profile Send private message
yozhik



Joined: 04 May 2014
Posts: 181

Post (Separately) Posted: Wed Jun 03, 2020 00:15    Post subject: Reply with quote

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
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1291

Post (Separately) Posted: Wed Jun 03, 2020 01:38    Post subject: Reply with quote

Flasher wrote:
Так ты поддержку старого синтаксиса поубирал что ли?

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

Вообще это порочная практика, использование строк в скрипте без кавычек. Пока был командный синтаксис, проблем это не составляло, но очень мешает теперь. Надо было бы изначально сделать кавычки обязательными, но кто же тогда знал, во что это со временем перерастет.

Наверно буду делать новую директиву, управляющую обязательностью кавычек в выражениях (к командам это не относится). И скорее всего, включу ее по умолчанию.

А пока исправленная версия с необязательными кавычками.

Хотя, во втором примере все равно косяк. Многострадальный not Smile

Flasher wrote:
Без кавычек нельзя, апострофы не поддерживаются.

Причина та же что и выше.

Что за апострофы, которых тут так не хватает?

Flasher wrote:
Вот так намудрил. Впервые такое вижу

Всё давно придумано до нас.

Метод получения аргументов не лучше и не хуже других языков. Были бы массивы - можно было бы сделать массивом.

yozhik wrote:
Следующий момент:

Хорошо, проверю.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jun 03, 2020 02:49    Post subject: Reply with quote

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
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1291

Post (Separately) Posted: Wed Jun 03, 2020 11:39    Post subject: Reply with quote

Flasher wrote:
А почему тогда на эту строку не ругалось?

Не знаю. Баг с not затрагивал и or и and. Что-то может сложилось не так.

PS: Перезалил исправленный вариант по той же ссылке.

Flasher wrote:
Забыл ещё написать, что сперва появляется окно только с текстом 'Load'. С чем это может быть связано?

Исправил.

Flasher wrote:
A = 'Text'

И что же мешает их использовать? Как работало, так и работает, наравне с двойными кавычками.

Flasher wrote:
Что-то не вижу там ничего толкового про многоточие.

В примере показано. В С так задается переменный список аргументов.

yozhik wrote:
Следующий момент:

Доконают меня эти модификаторы Smile , а вроде простая вещь... Надеюсь, исправил окончательно.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jun 03, 2020 20:47    Post subject: Reply with quote

Loopback wrote:
Исправил.
Появляется, если присвоение без кавычек. А вот на этой строке 'If %COMMANDER_LANG% = eng Then' не только появляется, но потом и крашит ТС с окном 'Runtime error 216 at 754D8449', которое обычным образом не закрывается и держит ТС (+ TCFS2) до его терминирования.

Loopback wrote:
И что же мешает их использовать?
Сейчас проверил, вроде заработало.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1291

Post (Separately) Posted: Wed Jun 03, 2020 22:07    Post subject: Reply with quote

Flasher wrote:
Появляется, если присвоение без кавычек. А вот на этой строке 'If %COMMANDER_LANG% = eng Then' не только появляется, но потом и крашит ТС с окном 'Runtime error 216 at 754D8449'

На этой строке не могу повторить.

Конкретно "Load" вылезало на функции LngRead, в утренней версии (от 12:43) я его убрал. Но у меня она проблем не вызывает.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jun 03, 2020 22:56    Post subject: Reply with quote

Loopback
Не знаю, у меня проблема именно на ней. Крах происходит после смены языка на английский, а Load всегда появляется.
 Появилось после правки моего справочного примера:

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 111, 112, 113 ... 133, 134, 135  Next
Page 112 of 135

 
Jump to:  
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