Autorun

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

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

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

Сообщение Loopback »

Скопировал, вставил, добавил только COMMANDER_LANG = eng перед условием. Нет падений, в том числе на утренней версии. Меняю на rus - тоже без проблем.

Load сейчас просто неоткуда появляться, я его еще утром убил. Скорее всего у тебя все же какая-то старая версия грузится.

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

Сообщение Flasher »

Loopback писал(а):Скорее всего у тебя все же какая-то старая версия грузится.
Tweaks 100% новый, я сверял с архивным после закрытия/открытия ТС.

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

Сообщение Loopback »

Flasher писал(а):Tweaks 100% новый
Tweaks тут не причем, думаю, там изменения по модификаторам минимальны. А вот основной плагин я выкладывал утром версию здесь.

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

Сообщение Flasher »

Loopback писал(а):А вот основной плагин я выкладывал утром версию здесь.
wdx я тоже ставил. Сейчас ещё раз проверил с предыдущим Autorun.wdx (sha: 3cefd7cc6bf3c778c30b2fc4aba9fa2c44002ea6), ошибки подтвердились.

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

Сообщение Loopback »

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

Сообщение Flasher »

Не помогло. Придётся забыть про %COMMANDER_LANG%, видимо...
Блин, я же не ту переменную подсовываю. Надо %AUTORUN_TCLANG%. С ней всё в порядке.

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

CL = %COMMANDER_LANG%
Set C_L %COMMANDER_LANG%
msgbox '%CL% %C_L%'
---------------------------
COMMANDER_LANG %COMMANDER_LANG%
---------------------------
Т. е. в If попадало COMMANDER_LANG или %COMMANDER_LANG%. Так? В чём же тогда причина краха?
И почему в одном случае есть проценты, а в другом нет? И почему не вернуло пустые значения?

Ещё есть проблема с переносом строки. Не работает:

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

If %AUTORUN_TCARCH% = 32 Then _
LoadLibrary Plugins\ScrollTC.dll
If Not ProcessExist('~/F', '%COMMANDER_PATH%\Utils\Everything\Everything.exe') Then _
ShellExec /W:1 /T "%COMMANDER_PATH%\Utils\Everything\Everything.exe" -startup
Loopback писал(а):С вложенными If-ами нет проблем.
Я бы так не сказал:

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

A = 1
B = 2
C = 3
If A = 1 Then If B = 2 Then If C = 3 Then MsgBox Успех
[15] If A = 1 Then If B = 2 Then If C = 3 Then MsgBox Успех

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

Сообщение Loopback »

Ещё есть проблема с переносом строки.
Перенос съедает пробел перед _, в справке написано.Сделано только для того, чтобы при разрыве в строке текста не появлялся лишний пробел. Но вообще если подумать, разрывать посередине строки или ключевого слова это неправильно, поэтому верну как было, чтобы убирался только _. Единственная проблема - в случае неправильного размещения разрыва никаких сообщений об ошибках сделать не получится.
Я бы так не сказал
Разумеется, это не относится к однострочным If-ам. Я думал это очевидно. Да и какой смысл в такой гирлянде, если можно собрать условие с and?
Блин, я же не ту переменную подсовываю.
Я писать не успеваю, при каждом обновлении что-то новенькое.

Хорошо что заработало, но все же, падать не должно при любых ошибках. Интересно, как создавался этот %COMMANDER_LANG% и узнать его содержимое. При его отсутствии я тоже пробовал и тоже было всё норм.
Т. е. в If попадало COMMANDER_LANG или %COMMANDER_LANG%. Так? В чём же тогда причина краха?
Непринципиально. В условиях с процентами или без - равноценно. и я пробовал оба варианта.
И почему в одном случае есть проценты, а в другом нет?
Издержки разницы работы старого и нового метода. Еще раз, это непринципиально.
И почему не вернуло пустые значения?
А вот это как раз "благодаря" отсутствию обязательных кавычек. Поскольку в таком варианте неизвестно, что это - переменная или просто текст.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):Сделано только для того, чтобы при разрыве в строке текста не появлялся лишний пробел.
Почему это лишний? Если есть, значит, не лишний. На том же vb это нормальная практика, ведь пробел разделяет ключевые слова, чтобы ничего не слилось и работало. Перенос по словам — это же не перенос строки по ширине символов, как в текстовых редаторах/вьюверах. :wink:
Loopback писал(а):Разумеется, это не относится к однострочным If-ам.
Значит, ты меня не понял. Под вложенными я понимал инлайновую матрёшку. Мы же говорили именно об этом в контексте записи if-ов внутри команд.
Loopback писал(а):Да и какой смысл в такой гирлянде, если можно собрать условие с and?
Это же очевидно. Следующее условие напрямую зависит от предыдущего, чтобы не столкнуться с ошибками. К тому же в случае несрабатывания предыдущего условия не будет тратиться время на выполнение лишнего кода в последующих условиях. У меня в куче кодов такой подход.
Loopback писал(а):При его отсутствии я тоже пробовал и тоже было всё норм.
Ясно, а вот у меня не норм.
Loopback писал(а):А вот это как раз "благодаря" отсутствию обязательных кавычек.
ОК. Вот тебе с апострофами:

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

A = '%Empty%'
Set B '%Empty%'
msgbox '%A% %B%'
---------------------------
%Empty% \Empty
---------------------------
То же самое, только сюда ещё \ затесался.
А вот с наличием значения:

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

CL = '%AUTORUN_TCLANG%'
Set C_L '%AUTORUN_TCLANG%'
msgbox '%CL% %C_L%'

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

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

Сообщение Loopback »

Flasher писал(а):Почему это лишний?
Скажем так, лишний при некорректном использовании. Короче проехали, верну чтобы не съедался.
Flasher писал(а):Следующее условие напрямую зависит от предыдущего, чтобы не столкнуться с ошибками. К тому же в случае несрабатывания предыдущего условия не будет тратиться время на выполнение лишнего кода в последующих условиях. У меня в куче кодов такой подход.
В принципе, во всех полноценных языках в случае нескольких выражений через and, проверка идет слева направо и сразу прекращается, если условие false. Так что стройка лесенок оправдана не всегда.

Про какие коды не знаю, но тот же Autoit не позволяет городить лесенки в однострочных if-ах. Autorun к нему близок по своей сути, и многие подходы (и ограничения) такие же.
Flasher писал(а):Получается только с Set возращается значение.
Здесь ошибки нет. При присваивании правая часть - выражение, и записав здесь '%AUTORUN_TCLANG%' ты присвоил переменной строку с именем переменной, а не значение. A Set - старая команда, где переменные разворачиваются в тексте, поэтому значение вычислилось.
Правильно:

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

CL = %AUTORUN_TCLANG% 
CL = AUTORUN_TCLANG

Set C_L '%AUTORUN_TCLANG%'
Set C_L %AUTORUN_TCLANG%
Flasher писал(а):только сюда ещё \ затесался
У меня %Empty% %Empty%, как и ожидается.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):во всех полноценных языках в случае нескольких выражений через and, проверка идет слева направо и сразу прекращается, если условие false.
Т. е. vb, по-твоему, неполноценный?
Loopback писал(а):Про какие коды не знаю, но тот же Autoit не позволяет городить лесенки в однострочных if-ах.
Ну, если с And там работают прерывания, то ему это и не нужно.
Loopback писал(а):Autorun к нему близок по своей сути, и многие подходы (и ограничения) такие же.
Это я давно заметил, ещё и с учётом твоей былой активности в скриптовой теме. ;)
В общем, принял к сведению, if-матрёшка тут не нужна.
Loopback писал(а):ты присвоил переменной строку с именем переменной
Я согласен, но я лишь ориентировался на твои слова:
Loopback писал(а):"благодаря" отсутствию обязательных кавычек

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

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

Сообщение Loopback »

Flasher писал(а):Т. е. vb, по-твоему, неполноценный?
Ок, не так выразился. Конечно, только одна эта фича не делает язык полноценным или нет. Но конкретно в VB этого действительно оказывается нет.
Flasher писал(а):Ну, если с And там работают прерывания, то ему это и не нужно.
Есть, для and и or.
Flasher писал(а):Я согласен, но я лишь ориентировался на твои слова:
Обязательных кавычек для строк, а не всего выражения. И уж тем более не переменных. И только в функциональной записи.

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

Проблема в такой записи:
IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)

А в такой проблем нет:
IniRead('~/R', %COMMANDER_INI%, "Configuration", "LanguageIni")
IniRead('~/R', %COMMANDER_INI%, 'Configuration', 'LanguageIni')
IniRead('~/R', %COMMANDER_INI%, 'Configuration', "LanguageIni")
и т.д.
Flasher писал(а):О, а где ещё беспроцентный вариант можно использовать? В командах, например.
Теперь уже и не знаю. Возможно откачу назад, поскольку как я уже писал, сейчас невозможно отличить переменную от простой строки. Либо переключение прагмой.

В какой-то момент возникла какая-то проблема, поэтому я и разрешил переменные без %. Сейчас их можно использовать в любых выражениях - условиях, новом присваивании, параметрах функций и т.д. В том числе для команд при использовании вычисляемых строк, например так: %'COMMANDER_PATH & "\Main.bar"'. Обязательность %% сохраняется при прямом использовании в командной записи.
Flasher писал(а):У меня так. И почему ожидается-то, если вопрос был о пустых значениях?
Может какой-то баг, но у меня он не проявляется.

Пустые значения при отсутствии переменной не могут выдаваться, т.к. неизвестно, переменная ли это. Возвращается имя переменной, но так было и в предыдущих версиях Autorun.
Аватара пользователя
yozhik
Сообщения: 353
Зарегистрирован: Вс май 04, 2014 20:34
Откуда: Электросталь

Сообщение yozhik »

Loopback
У меня два вопроса. Если глупые, то не читайте, но, пожалуйста, ответьте :? .
1. Я не понял, где применяется новый синтаксис команд (тот, который со скобками), а где нет. Вот такая запись (ниже) должна работать? У меня не работает.

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

ControlSetMouseAction /R 17 /B:1 MsgBox(%AUTORUN_TCHANDLE%)
2. Переменная %AUTORUN_TCHANDLE% вернула хэндл 1441850. А функция в AutoIt WinGetHandle("[CLASS:TTOTAL_CMD]") вернула хэндл 0x000000000016003A. В чём разница между этими двумя хэндлами? Просто я окошки с подсказками для F-кнопок сделал себе в AutoIt, и они центрируются по окну, хэндл которого укажешь. Так со 2м хэндлом всё правильно центрируется, а с 1м, авторановским, улетает в правый угол экрана.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

yozhik писал(а):то не читайте
Отвечаю не глядя :D
yozhik писал(а):Я не понял, где применяется новый синтаксис команд (тот, который со скобками), а где нет. Вот такая запись (ниже) должна работать? У меня не работает.
Этот вопрос как раз весьма интересный. Не считая ошибки, что 17 должна идти после /B:1, то да, не работает, здесь только старый вариант. И как прикрутить новый к функциям в плагинах (и надо ли вообще - это единственная такая функция, вызывающая какие-то другие команды) - это еще надо подумать.

Но в принципе если очень надо, сейчас можно выполнить любое новое выражение через Eval:

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

ControlSetMouseAction /R /B:1 17 Eval 'MsgBox(%AUTORUN_TCHANDLE%)'
yozhik писал(а):В чём разница между этими двумя хэндлами?
Тут как раз всё просто: плагин возвращает значение в десятичной системе, Autoit - в шестнадцатеричной. В Autoit из десятичного в шестнадцатиричный вид можно перевести функцией Hex.
Аватара пользователя
yozhik
Сообщения: 353
Зарегистрирован: Вс май 04, 2014 20:34
Откуда: Электросталь

Сообщение yozhik »

Loopback писал(а):и надо ли вообще
Ну, для таких как я надо, наверное. Потому что единообразие логики помогает пониманию и запоминанию. А множество исключений им не способствуют. А если у человека нет специфического опыта, то ему трудно отличить свои ошибки от ошибок программы. В результате тратишь намного больше времени на изучение. И есть опасность на полпути устать и бросить, недоразобравшись.
Loopback писал(а):вызывающая какие-то другие команды
В том то и дело, что они не «какие-то», а самые что ни на есть главные. И в справке к плагину к ним просто отсылка в главный раздел. Мне бы и в голову не пришло, что одна и та же команда в рамках одного и того же сценария может иметь различия в синтаксисе. Вот такая логика людей неискушённых :) .
Loopback писал(а):17 должна идти после /B:1
Пардон, исправил. Спасибо. Я заметил, что так в справке, но подумал, что если параметр /B: относится только к 17, то ему логичней идти после :oops: .
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):Обязательных кавычек для строк, а не всего выражения.
Потом-то уже стало понятно.

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

Проблема в такой записи:
IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)
Почему проблема-то? Это справочный пример.
[cut="Хотя с ним другая проблема возникла:"]

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

# Alt+ПКМ по главному меню = обновление текущей локализации:
ControlSetMouseAction /R /K:A /H:64 0 CommandExec em_Lang IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)
# ПКМ по главному меню = переключение между русским и английским языками:
ControlSetMouseAction /R /H:64 0 ShellExec '%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe' '/ef if(tcini(Configuration,LanguageIni,`WCMD_RUS.LNG`),tem(em_Lang),tem(`em_Lang Wcmd_rus.lng`))'
[/cut]Так вот, на русском при нажатии Alt+ПКМ вместо обновления языка стала выполняться смена. И только на английском обновление стало срабатывать. :?

Дай, думаю, проверю:

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

ControlSetMouseAction /R /K:A /H:64 0 %"MsgBox('Alt+ПКМ')"
ControlSetMouseAction /R /H:64 0 %"MsgBox('ПКМ')"
Но вместо того, чтобы выполняться по кликам на гл. меню, окна стали появляться сами на этапе запуска ТС и только. :shock:

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

# Shift+ЛКМ по вкладкам = переключение на первую вкладку в соотв. панели:
ControlSetMouseAction /L /K:S 26 SendCommand 5201
ControlSetMouseAction /L /K:S 27 SendCommand 5301
Эти команды вообще без шифта стали работать, т. е. я не могу теперь активировать вкладку простым кликом.

Как это всё понимать?
Loopback писал(а):В том числе для команд при использовании вычисляемых строк, например так: %'COMMANDER_PATH & "\Main.bar"'.
Ух ты. Понял.
Loopback писал(а):Пустые значения при отсутствии переменной не могут выдаваться, т.к. неизвестно, переменная ли это.
Так нужно отличать. Мы же можем подставлять их в строку как в случае с переменными среды.
Из старого примера TCFS2.exe' '/ef "tem(`em_Lang %LNG%`)"' , где вместо %LNG% ожидается пустое значения для правильного срабатывания.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить