TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое

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

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

Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Полностью согласен с Flasher. Если всё, что описывается во внутренних командах в конфиге, впихнуть в кнопку, она лопнет. :D

В самой утилите содержатся ровно те функции, что описаны в Readme. Это чтение и запись конфигурационных файлов, работа с окнами, отправка нажатий клавиш, смена каталога и т.п. Включать в неё полный перечень опций тотала никогда не было целью, наоборот была цель сделать её максимально гибкой, чтобы её можно было подстроить под любую версию тотала без перекомпиляции. Поэтому всё, что может быть описано прямым текстом, вынесено в конфиг, а сама утилита является его парсером. И командная строка тоже читается аналогично строкам конфига (параметры после /ef обрабатываются как правые части команд, /ei - как правые части действий).

Если совсем нечем заняться, можно укоротить конфиг, оставив лишь те команды, которые вызываются с кнопки, и их зависимости. Утилита, по идее, будет ругаться, если что-то не найдёт.
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение HA3APET »

MVV
создал в контекстном меню папок через внутренние ассоциации пункт "Изменить атрибуты", командой для которого является:

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

"%commander_path%\Programm\TCFS2\TCFS2.exe" /u- /ef tcm(502)
Всё отлично, появляется нужное окошечко, но хотелось бы, что бы процесс TCFS2.exe завершался сразу после того, как вызовет это окно, а не после его закрытия.
Это возможно? Или может есть более простой способ решить мою задачу с контекстным меню...
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

HA3APET
Не так
tcm(502, 1)
?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

sa,
Строки с пробелами - обязательно в кавычки. И возможны два варианта асинхронной посылки:

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

TCFS2.exe /u- /ef "tcm(502, 1)"

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

TCFS2.exe /u- /ef "tcm(502, -1)"
HA3APET,
Контекстные меню через внутренние ассоциации не всегда удобны: беда тотала в том, что он не поддерживает объединение пунктов меню из разных шаблонов (если у тебя есть шаблон с пунктами для папок и шаблон для вообще всех объектов, будут отображаться только пункты первого).
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV писал(а):обязательно в кавычки
Упустил: проверял без пробела, а потом добавил его в посте для красоты.
возможны два варианта
При -1 процесс TCFS2.exe завершается как-то не сразу...
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

sa писал(а):При -1 процесс TCFS2.exe завершается как-то не сразу...
А, точно. Там же создаётся тред, и процесс в течение 100 секунд ожидает завершения работы тредов.
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение HA3APET »

MVV
sa
Спасибо, здорово.
Да, немного не удобно, что TC не объединяет пункты из разных шаблонов, но пока удаётся это обходить.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Зашёл тут за сортировку по количеству файлов в папке, попробовал посылать

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

cm_SwitchDirSort: Сортировать каталоги: по имени/как файлы
cm_SrcCustomView5: Переключаем на пользовательский набор колонок номер 5
cm_SrcSortByCol3: Сортировать по третьей колонке в активной панели

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

%COMMANDER_PATH%\Utilities\TCFS2\TCFS2.exe
/ef "msg($0B,0) tcm(2012) tcm(275) tcm(6003) msg($0B,1) redraw()"
Крайняя команда ТС то срабатывает, то нет. Почему?

Добавлено:
DirSizeCalc не самый шустрый плаг, считать количество файлов - процесс небыстрый, сделал ход конём: убрал tcm(6003) :)
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Skif_off
Для себя назвал эту команду (cm_SwitchDirSort) немного по-другому:
Всегда сортировать каталоги по имени: вкл/выкл.
То есть эта команда из разряда переключателей. Поэтому, наверное и кажется: то сработает, то нет.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

sa
О, спасибо, так и есть по-ходу: этот момент вообще упустил из виду.
Наверное, придётся переделывать, скриптом скорее всего - сортировка каталогов как файлов не нужна постоянно.

MVV
Что-то я немного затупил: tcm(xxx) посылают ТС SendMessage или PostMessage? И проверяется ли как-то результат?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Skif_off
Может быть и так и сяк. Почитай ридми, там всё описано.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Flasher
В курсе, что можно и так и сяк, но не понял, как по умолчанию. Вот, допустим:

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\*\TCFS2.exe
/ef tcm(2400)
wcmicons.dll,83
Пример


-1
Здесь что?

Пока писал, сообразил заглянуть в историю:
2010-06-11 v1.2
+ parameter added for msg function to send message using PostMessage instead of SendMessage
Получается, по умолчанию - SendMessage?

Я как Буриданов осёл, никак не решу, что правильнее использовать для встроенных команд ТС :)) Для пользовательских команд и WM_COPYDATA с 'G'+256*'W' в AutoIt использую SendMessageW, для встроенных - PostMessage, но периодически выношу мозг сомнениями (хотя пока и не сталкивался с какими-то проблемами). Для некоторых (открывающих окна, например) PostMessage, кажется, будет правильнее.
Последний раз редактировалось Skif_off Сб апр 25, 2015 02:46, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Skif_off писал(а):Получается, по умолчанию - SendMessage?
Да, с ожиданием результата в отличии от ситуации, когда подставляем значение < 0.
Skif_off писал(а):никак не решу, что правильнее использовать для встроенных команд ТС
При вызове окон - PostMessage, в остальных случаях - зависит от ситуации. Да и параметр был бы не нужен, если бы достаточно было одного решения.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Flasher писал(а):При вызове окон - PostMessage, в остальных случаях - зависит от ситуации.
Да, с окнами PostMessage разумнее, что-то я поторопился, исправил пост, а с критериями выбора проблема. В общем, оставлю пока PostMessage дефолтным, пусть ТС сам разбирается с очередью.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Вообще, по идее правильнее SendMessage, но тотал обрабатывает и PostMessage. Иногда PostMessage приводит к неправильным результатам. Собственно, если асинхронность не нужна, лучше SendMessage (режим 0 для tcm), если нужна, то сначала попробовать PostMessage (режим 1 для tcm), а если работает плохо - то SendMessage в фоне (режим -1 для tcm).

А для переключателя сортировки каталогов по имени можно делать проверку значения в wincmd.ini, чтобы не вызывать команду, если режим уже в нужном положении, как это сделано с кучей других ключей:

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

[Macros]
areDirsSortedByName=tcini(Configuration, SortDirsByName, 1, 1)
И тогда гарантированно отключать сортировку по имени так:

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

TCFS2 /ef "if(areDirsSortedByName, tcm(2012))"
Ну или раскрыть макрос, чтобы не надо было вписывать его в конфиг:

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

TCFS2 /ef "if(tcini(Configuration, SortDirsByName, 1, 1), tcm(2012))"
Ответить