как управлять закрытием вкладок

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

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

tsviolen
Сообщения: 7
Зарегистрирован: Вс дек 19, 2010 15:14

как управлять закрытием вкладок

Сообщение tsviolen »

Здравствуйте. Скажите, как при помощи командной строки (или из сторонней программы, послав сообщение в Тотал) выполнить следующее:
- проверить все пути вкладок на предмет их указания на конкретный путь (на конкретный диск);
- закрыть определённые вкладки, например, под определёнными номерами, независимо от того, являются ли они активными, и независимо от того, в какой они панели.

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

Сообщение Flasher »

Не понятно для чего проверка нужна. Лучше конкретный пример привести. По вкладкам сложно, потому что нет внутренней команды "Сохранить вкладки активной панели в файл". Если только продолжение - OPENTABS <filename>..
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Имеется такой скриптик, который может быть запущен и из командной строки:

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

c:\path\to\PowerPro\powerpro.exe runfile.TabTools
Далее продолжаются вопросы, которые уже начал задавать Flasher. Что значит "проверка"? Найти среди всех вкладок те, что указывают на конкретный диск? Для этого есть настройка Configuration \ Folder Tabs \ Always show drive letter in drive title.
Скрипт пишет полный путь каждой вкладки в тултипе к оной - наводи мышь и проверяй. Что касается закрытия, то закрывает он массово указанные пользователем вкладки , либо те, что указывают на несуществующий путь (скажем, на вынутый сидюк).
Если ты владеешь каким-либо скриптовым языком (раз уж ты используешь термин "послать сообщение"), нетрудно нацарапать скрипт, который читает информацию из разделов [lefttabs], [righttabs], [left], [right] и анализирует ее. Так можно, по крайней мере, вычислить все пути вкладок.
С закрытием сложнее, я в свое время с этим намучился. Вообще пути два - переключаться на закрываемые вкладки внутренними командами, либо сохранить набор в tab-файл, отредактировать и открыть из ТС. Я использовал оба эти пути (см. код).
В любом случае требуется уточнить, зачем такая экзотическая цель ставится.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Да мне вообще кажется, что достаточно через контекстное меню вкладок сохранять нужное по разу в tab-файлы и создать с командой OPENTABS несколько кнопок/команд. И не надо никаких заморочек с текущими вкладками, ведь если ты определённо знаешь, какие вкладки не нужны, то, естественно знаешь, какие в определённый момент оставить. Всё просто.
А если нужно оставлять табы с определённым фильтром, например, с указанием диска, то как вариант - опять же вручную сохранить в tab-файл, а потом уже скриптом отредактировать и запустить. Если бы была команда сохранения табов в ini аналогично команде сохранения истории (cm_ConfigSaveDirHistory), то можно было бы автомат сделать.
tsviolen
Сообщения: 7
Зарегистрирован: Вс дек 19, 2010 15:14

Сообщение tsviolen »

Спасибо за отклики.
По порядку.
1. Всё это нужно для простой банальной цели - автоматизировать открытие и закрытие вкладок для вставляемых и извлекаемых устройств хранения информации. А именно: а) при вставке флэшки открывается новая вкладка в правой (к примеру) панели с указанием на только что вставленное устройство (эта задача вопросов не вызывает) б) при извлечении какая-нибудь программа или скрипт или команда командной строки проверяет пути вкладок на несуществующие пути (или на пути, указывающие на извлекаемое устройство) и закрывает соответствующие вкладки.
Я пользуюсь Zentimo, которая позволяет перед или после извлечения устройства запустить какой-либо скрипт или команду или файл.
2. Что касается скрипта TabTools - это был бы идеальный вариант. К сожалению, не удалось заставить его работать.
Оговорюсь, что никаким скриптовым языком не владею, только лишь начал знакомиться с PowerPro.
Теперь - к TabTools.
Вроде бы делал всё по инструкциям. Указал правильные пути в скрипте и вспомогательных скриптах. В итоге скрипт выдаёт такую ошибку:
Изображение
Собственно, неудача в работе данного скрипта и послужила причиной обращения к форуму.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Вызываемые плагины: win, ini, tc, childwin, miscplugin, file, vec
Проверь, все ли плагины на месте (\plugins\). Если нет, то плагин tc берем отсюда, childwin - отсюда, а вот здесь берем огромный архив всякой всячины, в том числе и плагина ini, на котором скрипт и споткнулся.
Устанавливаем, пробуем еще раз, внимательно читаем описание, задаем мне вопросы.
Желаю успеха.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
tsviolen
Сообщения: 7
Зарегистрирован: Вс дек 19, 2010 15:14

Сообщение tsviolen »

Спасибо за ссылки.
Итак, все вызываемые плагины на месте. Тем не менее, проблема остаётся.
Как я понял, ошибка заключается в том, что при работе в скрипте плагин ini обращается к несуществующему ini-файлу или несуществующему ключу (параметру) в ini-файле.
Ini-файл существует, это wincmd.ini, путь к нему в скрипте указан верно.
А вот строки "activetab" в файле wincmd.ini действительно не существует:
Изображение

Вот так выглядят секции left, right, lefttabs, righttabs в файле wincmd.ini:

[left]
path=D:\
sortorder=1
RedirectSection=History.ini
[right]
path=C:\
sortorder=1
RedirectSection=History.ini

. . . . .

[lefttabs]
RedirectSection=History.ini
[righttabs]
RedirectSection=History.ini
А вот так эти же секции выглядят в файле History.ini:
[left]
path=F:\Total Commander\
ShowAllDetails=1
SpecialView=3
show=1
negative Sortorder=0
customsortorder=1
[right]
path=F:\DOCS\SDF\CONST\
ShowAllDetails=1
SpecialView=3
show=1
negative Sortorder=0
customsortorder=1

. . . .

[lefttabs]
0_path=::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}
0_caption=Сетевые подключения
0_options=6|1|0|0|0|1|0
1_path=F:\Total Commander\Plugins\
1_options=6|1|0|0|0|0|0
activetab=1
[righttabs]
0_path=F:\ДОКУМЕНТЫ\
0_options=6|1|0|0|0|0|0
1_path=F:\ДОКУМЕНТЫ\ОТЧЁТ\СЛМ\
1_options=6|1|0|0|0|0|0
2_path=f:\ДОКУМЕНТЫ\ТАБЛИЦЫ\КОНСТ\
2_options=6|1|0|0|0|0|0
3_path=f:\DOCS\FACS\BUHS\
3_options=6|1|0|0|0|0|0
activetab=2
Вопрос № 1: может быть скрипт должен читать информацию о вкладках в History.ini, а не в Wincmd.ini?

Вопрос № 2: если нет, то в чём причина ошибки?

Вопрос № 3: если да, то не возьмётся ли автор внести в скрипт соответствующие изменения? (сам не хочу, это не мой уровень, боюсь напартачить).[/code]
Последний раз редактировалось tsviolen Вт дек 21, 2010 18:54, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

tsviolen писал(а):может быть скрипт должен читать информацию о вкладках в History.ini, а не в Wincmd.ini?
Должен только в случае переноса секции в отдельный файл, а по умолчанию это wincmd.ini. Путь исправляется в переменной global Config, подозреваю, уровень там и не требуется.
Только я не понял, как скрипт будет работать без перезапуска TC, ведь в этих секциях текущие пути вкладок появляются только таким образом..
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

2tsviolen
А вот строки "activetab" в файле wincmd.ini действительно не существует
Она есть, она не может не есть. Подробности здесь, но и без них могу сказать - ключ activetab указывает номер активной вкладки каждой панели (не уточняя, правда, какая из них - текущая). Он должен жить в каждом из разделов [lefttabs] и [righttabs]. Если его там нет, выхода два - вписать его руками и перезапустить ТС или просто перезапустить ТС и проверить - должен быть в обоих! (Flasher прав).
History.ini
Я не знаю, что это, и он ни при чем.
Вопрос № 1: может быть скрипт должен читать информацию о вкладках в History.ini, а не в Wincmd.ini?
Нет.
Вопрос № 2: если нет, то в чём причина ошибки?
Сделай то, о чем сказано выше, и будем разбираться дальше.
Вопрос № 3: если да, то не возьмётся ли автор внести в скрипт соответствующие изменения? (сам не хочу, это не мой уровень, боюсь напартачить).
Только если выяснится, что это необходимо.

Не отчаивайся, скрипт и правда сложный, не ты первый на нем спотыкаешься.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
tsviolen
Сообщения: 7
Зарегистрирован: Вс дек 19, 2010 15:14

Сообщение tsviolen »

2Вахмурка
Вооружившись данными указаниями, ещё раз проверил содержимое секций [left], [right], [lefttabs], [righttabs] файла wincmd.ini. Как ни старался перезапускать ТС, но эти разделы никак не характеризовали состояние вкладок, и не содержали необходимых ключей (N_path, N_options, activetab и пр.) Все эти секции выглядели так, как мною описано в предыдущих постах, и просто отсылали, содержа каждая такую строку:
RedirectSection=History.ini
При этом:
команда cm_ConfigSaveSettings приводила к обновлению секций [left], [right], [lefttabs], [righttabs] именно в файле History.ini.
к этому же результату приводил перезапуск ТС.

Секции [left], [right], [lefttabs], [righttabs] файла History.ini выглядят "как положено" - характеризуют состояние вкладок, содержат их пути и опции.

Эксперимент с заменой пути в переменной global Config с файла Wincmd.ini на файл History.ini привёл к такому результату:

Скрпит TabTools заработал!

Криво, косо, но заработал! Все функции не проверял, но текущие пути вкладок показывает верно, значки заблокированных вкладок показывает верно, ищет несуществующие пути и показывает правильный результат. Вкладки "по-тихому" не закрывает - либо всё равно выдаёт запрос на закрытие, либо просто не закрывает, либо создаёт дубликат вкладки, подлежащей закрытию. Подозреваю, это связано с тем, что обращения к файлу Wincmd.ini в скрипте имеются не только к секциям [left], [right], [lefttabs], [righttabs].

Вот так. Может быть у меня ТС особенный? (версия 7.56, но в предыдущих 7.55а 7.56а было то же самое). Более ранние версии использовать не пробовал.
History.ini
Я не знаю, что это...
Файл, содержащийся в папке ТС. Впрочем, не верю, что Вы не знаете.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

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

Сообщение Flasher »

tsviolen писал(а):Может быть у меня ТС особенный?
Ну раз такие мысли появляются, то у меня одно объяснение этому - сборка. Т.е. сборщик сам задал перенос секции в отдельный файл(о чём я писал выше) ключём RedirectSection. Нужно найти его в wincmd.ini в каждой из перечисленных секций и установить значение каждого в 0, потом вернуть в скрипте для global Config первое значение.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

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

Сообщение Flasher »

Avada
Хотел сразу написать, но подумал о тех секциях, которые по умолчанию переносятся при AlternateUserIni. Сейчас вижу, что среди перечисленных таких нет, поэтому твоё замечание справедливо.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Flasher
Да, но мы же только куски из INI-файлов видим... Мне следовало бы, пожалуй, поставить попрос иначе: что ещё переносится в этот самый файл History.ini (как по умолчанию, так и путём явного указания в секциях)? Просто уже интересно стало.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Ответить