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 ... 113, 114, 115 ... 130, 131, 132  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Loopback



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Fri Jun 05, 2020 00:42    Post subject: Reply with quote

Flasher wrote:
Почему проблема-то?

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

Flasher wrote:
Как это всё понимать?

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

В общем специфичная получилась запись, она вообще выбивается из всей логики скрипта.

Flasher wrote:
где вместо %LNG% ожидается пустое значения для правильного срабатывания

Так если переменная %LNG% существует и она пустая, то и будет пустое значение. А вот если не существует, вернется само имя переменной, так было и раньше. Что мне и не нравится, т.к. фактически это ошибка пользователя в скрипте.
Back to top
View user's profile Send private message
yozhik



Joined: 04 May 2014
Posts: 178

Post (Separately) Posted: Fri Jun 05, 2020 01:08    Post subject: Reply with quote

Flasher wrote:
вообще без шифта стали работать

Ой! Точно. Только заметил: и у меня без шифта стало срабатывать
Code:
ControlSetMouseAction /L /K:S /B:7 17 CommandExec em_TCRestart

В общем, если указан Ctrl или Shift, то команда срабатывает по простому клику без модификатора. Если указан Alt или больше одного модификатора, то нормально работает.


Last edited by yozhik on Fri Jun 05, 2020 01:19; edited 1 time in total
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Fri Jun 05, 2020 01:19    Post subject: Reply with quote

Очередной раз исправил модификаторы, перемудрил я с ними, кажется, всё проще решается. Надеюсь теперь окончательно.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri Jun 05, 2020 01:22    Post subject: Reply with quote

Loopback wrote:
Уже много раз повторял - из-за строк без кавычек.
Так сам код выполняется. Я и спрашиваю, с чего ты взял, что проблемный, если это не так.

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

Loopback wrote:
сейчас не поддерживается функциональный синтаксис тут напрямую, только так, как выше приводил пример.
При чём тут напрямую? Это никак не объясняет, почему приведённые команды стали срабатывать без Alt и почему сообщение появляется при запуске ТС.

Loopback wrote:
Тут вообще похоже он неприменим будет, т.к. функция с параметрами переданная в качестве параметра в ControlSetMouseAction, будет выполняться один раз при вызове ControlSetMouseAction, поскольку параметры вычисляются при входе в нее.
Вообще не понял, как связана неприменимость с указанным повендением. Понятно, что один раз. А сколько же ещё? Тут же нет цикла.

Loopback wrote:
Что мне и не нравится, т.к. фактически это ошибка пользователя в скрипте.
Не согласен. Если переменная не задана, и мы её подставляем, то логично, что она должна вернуть пустое значение. Взять тот же vbs:
Code:
MsgBox Var
Получим пустую мессагу. Или такой пример:
Code:
Prog = "Program"
If CreateObject("WScript.Shell").Environment("System")("PROCESSOR_ARCHITECTURE") <> "x86" Then Arch = "x64"
MsgBox Prog & Arch & ".exe"

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Fri Jun 05, 2020 01:41; edited 1 time in total
Back to top
View user's profile Send private message
yozhik



Joined: 04 May 2014
Posts: 178

Post (Separately) Posted: Fri Jun 05, 2020 01:25    Post subject: Reply with quote

Loopback wrote:
исправил модификаторы

Спасибо, теперь всё хорошо.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri Jun 05, 2020 01:40    Post subject: Reply with quote

Loopback wrote:
Надеюсь теперь окончательно.
Увы, нет:
Code:
ControlSetMouseAction /R /K:L 1 ShowPopupMenu ...
ControlSetMouseAction /R /K:L 2 ShowPopupMenu ...
ControlSetMouseAction /L /K:R 23 SendCommand 2944
ControlSetMouseAction /L /K:R 29 SendCommand 2944
Команды выполняются без модификаторов.

По-прежнему мессаги появляется только при старте ТС. Пусть даже запись с %"<>" неактуальна, всё равно логика несвоевременного появления неясна.
С другой стороны, тут всё работает без всяких Eval:
Code:
SetEnv Manufacturer %"GetCPUInfo('CPUString')"
SetEnv Family %"GetCPUInfo('Family')"

Эта проблема тоже осталась:
Quote:
Так вот, на русском при нажатии Alt+ПКМ вместо обновления языка стала выполняться смена. И только на английском обновление стало срабатывать.
Пробовал и так, не помогло:
Code:
ControlSetMouseAction /R /K:A /H:64 0 CommandExec "em_Lang IniRead('~/R', %COMMANDER_INI%, 'Configuration', 'LanguageIni')"

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



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Fri Jun 05, 2020 02:27    Post subject: Reply with quote

Flasher wrote:
Ну, да ты заявил, что старому синтаксису новый не повредит, что я и отметил как положительный момент, иначе у кучи пользователей создалось бы кучу проблем с необходимостью переписывать свои конфиги.

Я и тогда писал, что строки без кавычек это не есть хорошо, но тогда это еще доставляло проблем.

В общем, я чувствую, что лучше прагмы с переключением поведения ничего не придумать. Два режима: как сейчас, только переменные без %% разрешены не будут. И второй, в котором будут разрешены, но будут обязательны кавычки вокруг строк. Третьего я не вижу.

Flasher wrote:
При чём тут напрямую? Это никак не объясняет, почему приведённые команды стали срабатывать без Alt и почему сообщение появляется при запуске ТС.

Насчет альта не знаю. Посмотрю на месаджбоксах.

Сообщение потому что при запуске команды при старте ТС считывается параметр, который должен быть именем функции. А вместо имени тут вычисляемая строка, которая при считывании выполняется.

Flasher wrote:
Не согласен. Если переменная не задана, и мы её подставляем, то логично, что она должна вернуть пустое значение. Взять тот же vbs:

Не согласен. Я с vbs был знаком очень давно и недолго, но если он на заранее не определенных переменных не возвращает ошибку, то для меня такое поведение дико.

Flasher wrote:
Команды выполняются без модификаторов.

Они меня добьют. Интересно, как они работали, если их явной обработки вообще не было. Явно по чистой случайности.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri Jun 05, 2020 02:47    Post subject: Reply with quote

Loopback wrote:
но тогда это еще доставляло проблем.
Частица "не" не пропущена?
Loopback wrote:
Третьего я не вижу.
Ну делай так, только оставь текущий вариант умолчательным.

Loopback wrote:
А вместо имени тут вычисляемая строка, которая при считывании выполняется.
Ох, как всё сложно...

Loopback wrote:
то для меня такое поведение дико.
Так на AutoIt без Opt('MustDeclareVars', 1) тоже переменные в ряде случае можно не объявлять. В vbs за обязательность объявления отвечает директива Option Explicit, это нормальная практика.
Loopback wrote:
Интересно, как они работали, если их явной обработки вообще не было.
Не понимаю, о чём ты. Ты меня по ним сам консультировал.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Fri Jun 05, 2020 15:26    Post subject: Reply with quote

Flasher wrote:
Частица "не" не пропущена?

Пропущена.
Flasher wrote:
Ну делай так, только оставь текущий вариант умолчательным.

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

Не вижу ничего смертельного в некоторых "breaking changes" при переходе на новую мажорную версию. Когда-то это надо делать, иначе хвост неоптимального кода и ошибочных решений так и будет тянуться вечно. К тому же уже сейчас есть четыре изменения, которые могут повлечь неработоспособность старого скрипта, самое критичное - условие старого типа для FileExist/ProcessExist, которого больше нет. Добавится еще одно.

В Autoit такие изменения были регулярно. Одно время в нем очень долго был баг, который позволял вставить разрыв внутри текстовой строки. Когда его исправили, многим пришлось переписывать скрипты, многие возмущались, но это же не повод, чтобы оставить баг неисправленным. До сих пор в Autoit есть опция ExpandEnvStrings, которую ввели где-то в самом начале 3-ей версии и которой уже лет 15 никто не пользуется, а что если бы она была включена по умолчанию?

Ну можно и какой-нибудь AutorunX или Neo сделать, чтобы оправдать критические изменения, но будет ли в этом большой смысл, если старая версия не будет обновляться?

Flasher wrote:
Ох, как всё сложно...

Да не сложно, тут просто сама команда атипичная. В общем подумал, чтобы было понятнее и чтобы естественно ложилось в функциональный синтаксис, надо просто считать, что параметры запускаемой команды/функции - это параметры ControlSetMouseAction, предназначенные для последующей передачи в функцию, имя которой задано перед этими параметрами (да по сути оно и сейчас так и есть). Тогда не будет причины смешивать типы синтаксиса и пытаться воткнуть туда елочку из if-ов или еще что-то непредусмотренное:

Code:

Только так
ControlSetMouseAction ... SendCommand 123
Или так
ControlSetMouseAction( ... , SendCommand, 123)


Flasher wrote:
тоже переменные в ряде случае можно не объявлять

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

Суть поведения в VBS понятна, но все равно, с точки зрения возможных ошибок, кажется это не совсем правильным. Интересно, кроме VBS есть еще языки, где такое разрешено?
Flasher wrote:
Не понимаю, о чём ты. Ты меня по ним сам консультировал.

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

Тут проблема в том, что при нажатии, скажем, правой кнопки, заданной в качестве основной, она же возвращалась в качестве модификатора. А состояние кнопок мыши, заданных в качестве модификатора, вообще никак не обрабатывалось. Переписал этот кусок, теперь в список полученных модификаторов основная кнопка не попадает.

Проверил на последних проблемных вариантах, везде работает, но я уже опасаюсь что-то говорить Smile

Обновил по той же ссылке.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri Jun 05, 2020 16:36    Post subject: Reply with quote

Loopback wrote:
маловероятно, что кто-то (кроме новых пользователей) вообще узнает про более оптимальный вариант.
А так они узнают о ней, в основном благодаря получению ошибок, что тоже не айс.

Loopback wrote:
а что если бы она была включена по умолчанию?
Так не была же. А если бы была, то посыпались бы жалобы, само собой. О том и речь.

Loopback wrote:
Ну можно и какой-нибудь AutorunX или Neo сделать
Не стоит.

Loopback wrote:
это параметры ControlSetMouseAction, предназначенные для последующей передачи в функцию, имя которой задано перед этими параметрами
Это заставит плагин не выполнять вычисляемую строку без соотв. жимокликов?

Loopback wrote:
но все равно, с точки зрения возможных ошибок, кажется это не совсем правильным.
Не знаю, что за точка зрения такая, но возможные ошибки всегда можно исправить в процессе отладки. Если переменные не переписываются по многу раз и их крайне мало, то такой подход вполне имеет место быть.
Loopback wrote:
Интересно, кроме VBS есть еще языки, где такое разрешено?
Все диалекты Бэйсика, по всей видимости. vb/vba/pure/real/power и т. д.
А ты можешь хотя бы Dim добавить, чтобы не присваивать пустую строку и не писать Global/Local?

Loopback wrote:
но я уже опасаюсь что-то говорить Smile
И правильно. С гл. меню проблема осталась. Также плагин не различает последовательности нажатия модификатора/кнопки. Что я правую зажму, нажав левую, что наоборот, результат аналогичный.

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



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Fri Jun 05, 2020 17:54    Post subject: Reply with quote

Flasher wrote:
А так они узнают о ней, в основном благодаря получению ошибок, что тоже не айс.

Узнают они об этом в основном из описания новой версии, где в таких случаях крупно объявляется о возможных проблемах и путях решения. Кто не читает - сам себе злобный буратино. Уж один раз в 10 лет можно или чуть напрячься, или оставаться на старой версии, благо она работает и добавить в неё уже нечего.
Flasher wrote:
Так не была же. А если бы была, то посыпались бы жалобы, само собой. О том и речь.

Точно уже не помню, это еще на старом форуме было. Либо ее сделали по просьбам тех, кто никак не мог уйти от стереотипов второй версии Autoit, либо этот функционал был добавлен в третью версию, но потом от него решили отказаться и оставить опцию. В любом случае это прямая аналогия. Старый или неудачный функционал может быть оставлен как опция, но не должен быть по умолчанию.
Flasher wrote:
Это заставит плагин не выполнять вычисляемую строку без соотв. жимокликов?

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

Возможно, лучше оставить ее исключением и не разрешать в ФЗ.
Flasher wrote:
А ты можешь хотя бы Dim добавить, чтобы не присваивать пустую строку и не писать Global/Local?

Могу, но не стану. Чем Global/Local хуже Dim? В чем кайф определять переменную именно в неопределенном диапазоне? В функциях Dim = Local, вне функций - Dim = Global.
Flasher wrote:
С гл. меню проблема осталась.

Если про это "ControlSetMouseAction /R /K:A /H:64 0 ", то это что-то не связанное с последними изменениями в tweaks, майская версия так же не работает.
В этом коде всё работает, это я у себя накосячил с MsgBox.
Code:

ControlSetMouseAction /R /K:A /H:64 0 MsgBox 'Alt+ПКМ'
ControlSetMouseAction /R /H:64 0 MsgBox 'ПКМ'


Flasher wrote:
Так вот, на русском при нажатии Alt+ПКМ вместо обновления языка стала выполняться смена. И только на английском обновление стало срабатывать.

Может правильную строку из справки использовать?
Code:
ControlSetMouseAction /R /H:64 0 CommandExec em_Lang %"IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)"


Flasher wrote:
Также плагин не различает последовательности нажатия модификатора/кнопки. Что я правую зажму, нажав левую, что наоборот, результат аналогичный.

Если это про этот код:
Code:

ControlSetMouseAction /L /K:R 23 SendCommand 2944
ControlSetMouseAction /L /K:R 29 SendCommand 2944

то не подтверждаю, всё различается.
Flasher wrote:
Забыл?

Исправил в невыложенной версии.


Last edited by Loopback on Fri Jun 05, 2020 21:48; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri Jun 05, 2020 21:47    Post subject: Reply with quote

Loopback wrote:
Кто не читает - сам себе злобный буратино.
То же самое можно ответить на:
Loopback wrote:
маловероятно, что кто-то (кроме новых пользователей) вообще узнает про более оптимальный вариант.

Loopback wrote:
В любом случае это прямая аналогия.
Ты же написал, что новая опция не была включена по умолчанию.

Loopback wrote:
не знаю даже, как теперь ее совместить с ФЗ (давай я буду сокращать, надоело писать полностью).
Перед сокращением обычно приводят расшифровку. Я без понятия, что за ФЗ. Функциональная/файловая зависимость/запись, федеральный закон, фабрика звёзд? )) Что это?

Loopback wrote:
Чем Global/Local хуже Dim?
Длиннее. В AutoIt же есть. Почему не добавить?

Loopback wrote:
В этом коде всё работает
С мессагой работает, а с исходной командой — нет.

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



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Fri Jun 05, 2020 22:27    Post subject: Reply with quote

Flasher wrote:
То же самое можно ответить на:

Можно.

Flasher wrote:
Перед сокращением обычно приводят расшифровку.

Функциональная Запись. В противовес Командная Запись.

Flasher wrote:
Длиннее.

Всё. Где смайл facepalm? Слов больше нет Confused

Flasher wrote:
В AutoIt же есть.

Лишняя сущность. Пережиток ранних времен. В справке его не рекомендуют к использованию.

Flasher wrote:
С мессагой работает, а с исходной командой — нет.

Ну может потому, что ты свой же пример неправильно записал? Из справки:
Code:

ControlSetMouseAction /R /H:64 0 CommandExec em_Lang %"IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)"

Всё работает, специально всё ставил и настраивал, чтобы протестировать.

Flasher wrote:
Не знаю. Зажимаю ЛКМ, потом жму ПКМ — и команда срабатывает.

Сочувствую, но повторить на сегодняшней версии не могу.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri Jun 05, 2020 23:41    Post subject: Reply with quote

Loopback wrote:
Функциональная Запись.
Ясно. В общем, думай, как выбраться из положения.

Loopback wrote:
Где смайл facepalm?
Где-где, в интернете...


Ладно, скажу по-другому: мне так привычней, удобней, сподручней...

Loopback wrote:
В справке его не рекомендуют к использованию.
Где? Тут не вижу.

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



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Sat Jun 06, 2020 01:00    Post subject: Reply with quote

Flasher wrote:
мне так привычней, удобней, сподручней

Ок.

Flasher wrote:
Где? Тут не вижу.

Тут, раздел Объявление переменных.

Flasher wrote:
Так, я уже запутался с этими кавычками, не/поддержкой старых записей и т. п. %"<>" останется или нет? Внутри неё кавычки/апострофы для строчных параметров будут нужны или нет?

Ну давай подведем краткое резюме.
1. Классический командный синтаксис остается в неизменном виде.
2. В командной записи, если не применяется вычисляемая строка, переменные в командах всегда должны заключены в %%, строки могут быть в кавычках обоих типов или вообще без них.
3. Вычисляемая строка в виде %"<>" остаётся для командного синтаксиса, чтобы выполнять однострочное функциональное выражение и передавать его результат в команду. Применима только и исключительно в командном синтаксисе.
4. Выполнение функциональных выражений будет зависеть от прагмы, соответственно, необходимость кавычек вокруг строк и переменные без %% (в том числе в вычисляемой строке, т.к. это функциональное выражение) регулируется ей.
5. В объявлении переменных и присваивании после = выражения пишутся только в ФЗ.
6. В условиях, циклах, объявлении функций выражения пишутся только в ФЗ.
7. Любая одиночная функция/команда в строке может быть запущена как в КЗ, так и в ФЗ (вопрос в целесообразности).
8. ControlSetMouseAction - исключение, в первую очередь потому, что если в вызываемой команде есть вычисляемая строка, то при командной записи она будет выполняться каждый раз при запуске команды. Достигнуть такого же результата в функциональной записи проблематично. Поэтому, вероятнее всего эта команда будет пригодна только для записи в КЗ.

В общем вот так, всё то, за что я так не люблю AHK. Но теперь я их хотя бы понимаю.
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 ... 113, 114, 115 ... 130, 131, 132  Next
Page 114 of 132

 
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