Обмен кнопками

Если вы хотите поделиться с другими пользователями секретами Total Commander, знаете интересные опции, приемы, настройки, то вам сюда.

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

Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Dimsok
Прошу заглянуть на страницу 66 темы по обсуждению кнопок и припомнить, о чём там шла речь насчёт рабочих решений, оформления кнопок и пояснений к ним. Слишком много предлагается кнопок, которые юзер использовать без доводки не может. Хотя бы из-за путей к личным папкам в трёх последних постах (в тексте кнопки это хотя бы цветом отметить следовало). В конце концов, основной целью выкладывания кнопок должно быть удобство тех, кто будет ими пользоваться. Прошу принять к сведению, иначе модераторам действительно придётся ввести эту процедуру в какие-то пристойные берега.
Даже самая богатая фантазия
Не представит себе наши безобразия.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

По мотивам этого запроса.
Кнопка (версия TC 9.xx) для удаления файлов/каталогов по заданной маске, регулярному выражению с символом < или шаблону поиска с символом >. Требуется утилита TCFS2 (функции дополнительного модуля TCFS2Tools не используются):

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "set_ini(`%COMMANDER_PATH%\usercmd.ini`, em_temp, cmd, `SELECTFILESB `
`>Файлы старше 1 недели`                                                       ) tcm(524) tem(em_temp) if(msg($432,1004+msg($432,1000)), tcm(908))"
WCMICONS.DLL,64
Удалить файлы/каталоги |по маске (например: *.bak *.old) |регулярному выражению (<[ab].*) |или шаблону поиска (>Файлы старше 1 недели)


-1
Для задания альтернативного варианта, удалить в Корзину или в обход Корзины (зависящего от настроек TC), при вызове кнопки нажать клавишу Shift.
В кнопке для команды SELECTFILES добавлен модификатор B (выделяются и файлы и папки, соответствующие маске или шаблону). Можно указать D (только папки) или убрать модификатор (только файлы).
Если сильно захочется подтвердить удаление непосредственно в кнопке, то можно заменить tcm(908))" на
tcm(908,1) + eval(send_wait(`{ENTER}`, findwnd(`#32770`))))".
В дополнение, команду удаления файлов tcm(908) при желании можно поменять на команду копирования tcm(905) или перемещения tcm(906).

Чтобы при вызове кнопки файл usercmd.ini каждый раз не перезаписывался (из-за создания утилитой временной пользовательской команды em_temp), можно самостоятельно создать пользовательские команды выделения, например:
em_selB, состоящую из команды SELECTFILESB,
em_selD, состоящую из команды SELECTFILESD и
em_sel, состоящую из команды SELECTFILES,
одну из которых, в зависимости от решаемой задачи, и указывать в кнопке:

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "tcm(524) tem(`em_selB `
`>Файлы старше 1 недели`                                                       ) if(msg($432,1004+msg($432,1000)), tcm(908))"
WCMICONS.DLL,64
Удалить файлы/каталоги |по маске (например: *.bak *.old) |регулярному выражению (<[ab].*) |или шаблону поиска (>Файлы старше 1 недели)


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

Сообщение Flasher »

Запрошено:
TOTALCMD#BAR#DATA
%comspec% /q /c (for %# in
(%P%S) do call set "P=%%P%% %%# -title "%%~nx#"")&&call mplayer.exe -nofontconfig -really-quiet -fs -panscan 1 %%P:~4%%

Utils\MPlayer\mplayer.exe
MPlayer — воспроизвести выбранные видео на полном|экране с поочерёдным выводом имён в заголовок окна
%COMMANDER_PATH%\Utils\MPlayer\
1
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Текст файла в буфер (по запросу) с определением OEM, ANSI, UTF-7, UTF-8, UTF-16.
TOTALCMD#BAR#DATA
%ComSpec% /v:on /q/c echo off&set CP1251=1251&set ASCII=1251&set IBM866=866&set UTF-7=65000&set UTF-8=65001&set UCS-2=65001&for /f "tokens=1 delims=/" %# in ('
enca.exe -e -L russian
%V') do chcp !%%#!&cls&clip<%V
wcmicons.dll,45

Скопировать в буфер обмена текст файла под курсором
%COMMANDER_PATH%\Utils\Enca
1
Enca 1.13.
Enca 1.19 | Enca 1.20 (спасибо addhaloka).
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

All
Поскольку беспрерывные призывы соблюдать правила и помещать запросы на кнопки не в этой теме, а в специальной, некоторой частью участников (причём отнюдь не только новичками) упорно игнорируются, придётся прибегнуть к более сильным мерам. Впредь откровенный оффтоп такого рода будет из этой темы попросту удаляться. Иного пути приучить кое-кого к порядку, к сожалению, не вижу. Сообщение AlexTex было в этом ряду первым номером.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Близко к теме:
TOTALCMD#BAR#DATA
*%ComSpec% /v:on /q/c @echo off&for /r %# in (*.
txt) do for /f "eol=C skip=1 delims=" %h in ('certutil -hashfile "%#" MD5') do set "crc=%h"&&call robocopy "%~dp#\"
"%P!crc: =!" "%%~nx#" /MOV /NJH /NJS /NDL /NFL&cls
wpdshext.dll,4
Переместить
txt-файлы из структуры активного каталога в MD5-папки

1
TOTALCMD#BAR#DATA
*%ComSpec% /v:on /q/c @echo off&for /r %# in (*.
txt) do for /f "eol=C skip=1 delims=" %h in ('certutil -hashfile "%#" MD5') do set "crc=%h"&& call xcopy "%#" !crc: =!\ /chikorqxy

FXSRESM.dll,11
Скопировать
txt-файлы из структуры активного каталога в MD5-папки

1
Windows Vista+. Другие алгоритмы: MD2, MD4, SHA1, SHA256, SHA384, SHA512.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

На основе запроса:

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

TOTALCMD#BAR#DATA
cm_ClearAll,cm_FocusTrg,cm_ClearAll,cm_FocusTrg,cm_select,em_SyncOpen=,cm_ClearAll

wcmicons.dll,48
Синхронизировать папку/файл под курсором


-1
где em_SyncOpen= это пользовательская команда, представляющая SYNCOPEN = (можно вместо пользовательской подставить встроенную команду cm_FileSync, чтобы сравнение не начиналось сразу после открытия диалога).
Если требуется предупреждение об отсутствии в целевом каталоге папки или файла с тем же именем, что под курсором в исходной панели, то сцепка команд может быть такой:

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

524,4006,524,4006,em_SelT,cm_select,em_SyncOpen=,524,4006,524,4006
В ней добавлена пользовательская команда em_SelT, представляющая SELECTFILESBT с %Z%N в строке параметров.

Кнопка для синхронизации одноимённых папок:

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

TOTALCMD#BAR#DATA
%COMMANDER_EXE%
/S=S:= %Z%X%P%x%N %X%T%x%N
wcmicons.dll,48
Синхронизировать папку под курсором с одноимённой в другой панели


-1
Чтобы сравнение не начиналось сразу после открытия диалога, следует убрать знак = после двоеточия.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

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

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

TOTALCMD#BAR#DATA
%COMMANDER_EXE%
/S=S:= %Z%X"%P%x"%N %X"%T%x"%N
wcmicons.dll,48
Синхронизировать папку под курсором с одноимённой в другой панели


-1
Если под курсором [..], то файловые панели синхронизируются целиком.
Помимо синхронизации папок кнопка подходит и для сравнения одноимённых файлов архивов.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Отголосок этой темы. Кнопка с утилитой TCFS2.
Функции дополнительного модуля TCFS2Tools не используются.

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "set_ini(`%COMMANDER_PATH%\usercmd.ini`, em_temp, cmd, `SyncOpen = Несуществующее имя шаблона`) tem(em_temp)
delay(200) if(findwnd(`#32770`)!=0, delay(1000) + send(`{ESC 2}`, findwnd(`#32770`)), loop(if(findwnd(`TCmpForm`)!=0 && findwnd(`TCheckEditBox`)==0, 0*send(`+{END}^%%l`, findwnd(`TCmpForm`))*delay(100)+1, 0)) + if(findwnd(`TCmpForm`)!=0, eval(send_wait(`{ENTER}`, findwnd(`TCheckEditBox`),1)) + loop(if(findwnd(`TCmpForm`)==0, 0, 0*send(`~(%%ы)`, findwnd(`TCmpForm`))*delay(100)+1)) + if(msg($432,1000)-1, tcm(540), tcm(4002) + tcm(540) + tcm(4001))))" %Z
WCMICONS.DLL,48
Копировать СЛЕВА  -->  НАПРАВО метки даты/времени одноимённых файлов


-1
Для поиска одноимённых файлов и копирования их меток даты/времени используется инструмент синхронизации каталогов.
Если выделения в файловых панелях нет, то они обрабатываются целиком (с учётом подкаталогов).
Если выделены папки/файлы (не важно в какой из панелей, можно выбирать и в обеих), то в последующих операциях участвуют только они.
Какая из панелей активна, значения не имеет.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Кнопка с утилитой TCFS2 для поиска с плагинами.
Функции дополнительного модуля TCFS2Tools не используются.

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "set_ini(`%COMMANDER_PATH%\usercmd.ini`, em_TempParam, cmd, `%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "set_tcini(Searches, $tmp_plugin,`) set_ini(`%COMMANDER_PATH%\usercmd.ini`, em_TempParam, param,
<`?       ` tc.writedate >= 06.05.20 `                                                                                          ) tem(em_temp)"`>) set_ini(`%%COMMANDER_PATH%%\usercmd.ini`, em_temp, cmd, `cd >$tmp`) set_tcini(Searches, $tmp_SearchIn, ``) set_tcini(Searches, $tmp_SearchFor, ``) set_tcini(Searches, $tmp_SearchText, ``) set_tcini(Searches, $tmp_SearchFlags, ``) tem(em_TempParam) eval(send_wait(`{HOME}^{RIGHT 2}`, findwnd(`TSTDTREEDLG`)))"
wcmicons.dll,24
Задать параметры пользовательского шаблона $tmp для поиска с плагинами| и применить фильтр с ним в активной панели
tc.writedate >= 05.05.20 & tc.writedate <= 06.05.20 | tc.ext = txt | exif.ISO = 400 | age.Changed.Minutes < 1 | (Seconds Minutes Hours Days Weeks Months Years)
Путь к утилите TCFS2 заменить на свой (в двух местах кода кнопки).
В поле "Путь запуска:" приведено несколько примеров для правки поля "Параметры:" (в косых кавычках).
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Кнопка (версия TC 9.0+) для поиска файла/каталога под курсором (активной панели) в неактивной.
Требуется утилита TCFS2, функции дополнительного модуля TCFS2Tools не используются.

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "if(msg($432,1007-msg($432,1000)), varset(1,1), varset(1,0)) set_ini(`%COMMANDER_PATH%\usercmd.ini`, em_temp, cmd, `LOADSEARCH $tmp`) set_tcini(Searches, $tmp_SearchFlags,
`1|0020`  varget(1)  `2000020|||||||||0000|||`) if(null("%N"),set_tcini(Searches, $tmp_SearchFor, ``), set_tcini(Searches, $tmp_SearchFor, `%Z%N.`)) set_tcini(Searches, $tmp_SearchIn, ``) set_tcini(Searches, $tmp_SearchText, ``) set_tcini(Searches, $tmp_plugin, ``) tcm(4006) tem(em_Temp) eval(send_wait(`{ENTER}`, findwnd(`TFindFile`)))"
wcmicons.dll,47
Поиск текущего файла/каталога в неактивной панели |(в том числе в архивах)
Если в активной панели под курсором `..`, то TC будет искать все файлы/каталоги.
При наличии выделения в неактивной панели поиск выполняется только в выделенных файлах/каталогах.
Чтобы исключить поиск в архивах, следует в поле "Параметры:" первую 1 заменить на 0.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Отсюда

kirimbay
На скорую руку, для TC версии 9.0 и выше, кнопка для выделения объектов между двумя выделенными.
Требуется утилита TCFS2, функции дополнительного модуля TCFS2Tools не используются.

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef "if(msg($432,1004+msg($432,1000))==2,tcm(2049)+tcm(2053)+varset(1,msg($432,1006+msg($432,1000))-msg($432,1008+msg($432,1000)))+tcm(2053)+varset(2,msg($432,1006+msg($432,1000))-msg($432,1008+msg($432,1000)))+if(varget(1)==varget(2),varset(1,0))+msg($433,2049,varget(1))+msg($433,2936,varget(2)-varget(1)),tem(`em_>Выделите_2_объекта!`))"
WCMICONS.DLL,39
Добавить выделение файлов/папок между двумя выделенными
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Пожалуй, поделюсь своим более лаконичным вариантом без передёргиваний выделения и с нормальным текстом окна ошибки:

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef
if(msg(1074,msg(1074,1000)+1004)==2,msg($0B,0)+tcm(2057)+tcm(2054)+tcm(2053)+varset(1,msg(1074,1006+msg(1074,1000)))+tcm(2054)+msg(1075,2936,varget(1)-msg(1074,1006+msg(1074,1000)))+msg($0B,1)+redraw()+tcm(2918),tcm(-1,1)+eval(settext_wait("`[✖] Выделите 2 объекта!`",findwnd(Static,,findwnd(#32770)))))
wciconex.dll,73
Выделить всё в границах двух выделенных объектов
Разумеется, никаких ограничений на типы объектов (аля 'файлы/папки') нет. Т. е. работать будет как в любых виртуальных папках, так и в списках плагинов и структурах wfx-плагинов.
P. S.: Перерисовка окна не вызывает таких неприятностей, как моргания цветов, прыжков курсора со сдвигом списка туда-сюда, что в примерах выше и ниже.
Последний раз редактировалось Flasher Чт июл 23, 2020 14:40, всего редактировалось 1 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Укоротил вариант, что для TC версии 9.0+ и без ненужной перерисовки панелей инструментов (главной и вертикальной), панели функциональных клавиш, командной строки, а также вкладок, заголовков панели, заголовков табуляторов и др. элементов интерфейса окна TC:

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef "if(msg($432,1004+msg($432,1000))==2,tcm(2049)+tcm(2053)+tcm(2053)+varset(1,msg($432,1006+msg($432,1000))) +tcm(2054)+msg($433,2936,varget(1)-msg($432,1006+msg($432,1000))),tem(em_>Выделите_2_объекта!))"
WCMICONS.DLL,39
Добавить выделение файлов/папок между двумя выделенными
Если есть желание избавиться и от передёргиваний, и от ненужной перерисовки, то можно попробовать вариант,

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef "if(msg($432,1004+msg($432,1000))==2,msg($0B,0)+tcm(2049)+tcm(2053)+tcm(2053) +varset(1,msg($432,1006+msg($432,1000)))+tcm(2054)+msg($433,2936,varget(1)-msg($432,1006+msg($432,1000)))+tcm(2012)+msg($0B,1)+tcm(2012),tem(em_>Выделите_2_объекта!))"
WCMICONS.DLL,39
Добавить выделение файлов/папок между двумя выделенными
где для перерисовки используется задвоенная команда 2012 (или 330).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Легкая правка моего варианта без каких-либо предложенных далее артефактов выделения и псевдодорисовки
(особенно тех, что невооружённым глазом видны и остаются при наличии на предыдущем плане браузера, например, с видео на паузе):

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef
if(msg(1074,msg(1074,1000)+1004)==2,sendmsg(msg(1074,3),$0B,0)+tcm(2057)+tcm(2054)+tcm(2053)+varset(1,msg(1074,1006+msg(1074,1000)))+tcm(2054)+msg(1075,2936,varget(1)-msg(1074,1006+msg(1074,1000)))+sendmsg(msg(1074,3),$0B,1),tcm(-1,1)+eval(settext_wait("`[✖] Выделите 2 объекта!`",findwnd(Static,,findwnd(#32770)))))
wciconex.dll,46
Выделить всё в границах двух выделенных объектов
Последний раз редактировалось Flasher Сб июл 25, 2020 10:49, всего редактировалось 1 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить