[WFX] VirtualPanel - временная панель для ТК (Unicode)

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

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

Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

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

А в скриптах, как я понял, эту команду использовать нельзя, именно в силу
Без символа '<' перед командой!
Пробовал так:

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

<add >2Mat { cd \ }
Получается иконка, перечеркнутая красным, и ругань при запуске: "Скрипт должен начинаться с символа <". Хотелось бы...
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

А религия запрещает делать так?

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

<add >2Mat {<exec cd \}
8)

(<exec обрабатывает команды абсолютно так же, как и командная строка ТК - вызывает функцию FsExecuteFileW)
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

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

Я тупо забыл про команду exec - никогда ей не пользовался. Четвертый раз спасибо.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

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


VirtualPanel 1.0.0.505:
+ функция автосохранения состояния с заданным интервалом времени
* корректная обработка переменных окружения в команде cd
GGS
Сообщения: 322
Зарегистрирован: Сб май 02, 2009 13:00

Сообщение GGS »

MVV
Ситуация:
1. Левая панель: активная, курсор на файле в архиве
2. Правая панель: содержимое виртуальной папки созданной командой <add
3. Копирую файл слева направо <F5>
В результате файл направо в физическую папку скопировался, но слева меня "выкидывают" из архива :(
Возможно ли слева остаться в архиве?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

А-а, есть такое дело. Просто я вызываю обновление панелей ТК после операций с VP (ведь эти операции могут изменить содержимое панелей) - а ТК при обновлении панели выходит из архива.

Кстати, не забывай, что при извлечении файлов из архива в физическую папку, на которую ссылается VP, ТК вначале извлекает файлы во временную папку, а потом только VP копирует их в папку назначения (но к данной проблеме это не относится).


У кого 1.0.0.505, обновите до 1.0.0.506, там небольшой баг, из-за которого модуль может вылетать при открытии диалога конфигурации (обращение к неуказанному параметру). :!:
GGS
Сообщения: 322
Зарегистрирован: Сб май 02, 2009 13:00

Сообщение GGS »

MVV писал(а):при извлечении файлов из архива в физическую папку, на которую ссылается VP, ТК вначале извлекает файлы во временную папку, а потом только VP копирует их в папку назначения
Это я заметил по выставлению атрибута "A" на извлечённый файл, при подобной операции без VP значение остаётся как было в архиве.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

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

2MVV
В-общем, мало-мальски сложные скрипты продолжают оставаться для меня китайской грамотой. При изучении справки и примеров возникли следующие вопросы:
1) Символ " . " часто употребляется, но его формат не описан (видимо, имеется в виду корень ВП);
2) После ifcond в справке идет фигурная скобка, а в примере - круглая, да еще в кавычках;
3) Что означает запись "@ %f" в примере? Ведь %f - это маска файла, а вовсе не виртуальный путь, как написано в справке.

Эти и другие вопросы встали передо мной при решении следующей задачи: удалить ссылки на все файлы, кроме index.*, от данной директории и ниже. Справиться с рекурсией я так и не смог и упростил задачу: только в текущей виртуальной папке. Пробовал по всякому, в том числе так:

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

<for %f . *.* { <ifcond { %f != index.* @ %f } { <del "%f" } }
Ответь, пожалуйста, на приведенные вопросы и подскажи, как решать задачу.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Здрасьте, символ точка заменяет текущую папку, как принято в виндовсах испокон времен. Корень ВП обозначается одиночным обратным слэшем.

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

После собаки в команде ifcond указывается имя файла, для которого вычисляется выражение. А %f в примере - это подстановочный символ команды for, внутри блока которой выполняется команда ifcond (какой именно символ используется в конкретной команде for, указывается в самой команде, я обычно для файлов использую %f, а для папок - %d, но если нужно использовать вложенный вызов команды for, придется использовать и другие буквы).

Сравнивать имя файла со строкой низя. В описании команды ifcond указано, какие можно использовать псевдо-константы (типа атрибутов, даты, времени и размера).

Но задача отрицания маски хорошая. Пожалуй, я добавлю для команды for флаг отрицания маски, или же возможность сопоставления имени текущего файла маске в выражении команды ifcond (скорее всего, это будет оператор вида like "index.*") - этот вариант мне кажется более широким в функциональном плане.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

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

символ точка заменяет текущую папку
Слабо себе представляю, как это используется. В батниках все просто: если не указан путь, предполагается текущий, иначе играем двумя точками (материнская директория) или слешем (корень). Про точку слышу впервые. Ну что же, благодаря тебе расширил свой кругозор.
Корень ВП обозначается одиночным обратным слэшем
...как и корень обычного диска.
если он содержит знак меньше, то его необходимо заключать в фигурные скобки
Ты думаешь, я не читал справку? Нет там этого. До чего-то приходится допирать, набивая шишки, до чего-то не допирается :)
%f в примере - это подстановочный символ команды for, внутри блока которой выполняется команда ifcond (какой именно символ используется в конкретной команде for, указывается в самой команде
Это тоже аналогично батникам.
В описании команды ifcond указано, какие можно использовать псевдо-константы (типа атрибутов, даты, времени и размера).
...но в явном виде запрета на имена файлов нет. Одна из проблем состоит в том, что отчасти твой язык напоминает батники, а в чем-то сильно отличен от него - ведь в батниках использовать условия типа

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

if -%1 == -index.* echo Хомяк
можно с огромным нашим удовольствием.
Пожалуй, я добавлю для команды for флаг отрицания маски
Хорошо бы все-таки достичь функциональности батниковской команды if. Тем более, что за счет вложенных скриптов можно даже структурным программированием заняться...
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Две точки - надпапка, точка - текущая папка, бэкслэш - корневая папка. В ТК, если в командной строке написать точку и нажать ентер, откроется текущая папка - самый быстрый способ открыть её. :)
Это тоже аналогично батникам.
Ну дык откуда драл=)

Батовая команда if куда ограниченнее, чем моя ifcond. :)
Сделать сравнение строк будет непросто, т.к. вычислитель выражения оперирует с числами, а тут вдруг на те, строки. Так что будете довольствоваться функцией like "<маска>" для проверки имени, или его отрицанием, если таковое нужно.

На всяк случай поясняю, как работает вычислитель: строится массив-выражение, содержащий операторы и числа, при построении псевдо-константы расширяются до значений, а также вычисляются операторы (пока он один - like). Далее, вычисляется значение выражения. Так что, выражение !like "index.*" истинно только в том случае, когда имя файла (только имя, без пути) не соответствует маске.



VirtualPanel 1.0.0.510 (изменения после 1.0.0.505): 8)
+ оператор like для команды ifcond, позволяющий проверять, удовлетворяет ли имя файла маске
* обновление панели-источника после операций убрано
* не запоминался флаг удаления всех файлов только для чтения
* ошибка в параметрах функции форматирования информационного окна (в 1.0.0.505)

Также добавлен пример удаления из текущей папки всех файлов кроме скриптов, mp3 и m3u:

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

<for %f . * { <ifcond { !script && !like "*.mp3" && !like "*.m3u" @ %f } { <del "%f" } }
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Исправляю кой-какие косяки, теперь скриптами с оператором like действительно можно пользоваться (нашел баг в обработке двойного символа % в файлах скриптов). Ну и по мелочи.


VirtualPanel 1.0.0.520 (изменения после 1.0.0.510):
+ команда <exec позволяет запрашивать параметр, если он начинается с символа '?'
+ раскрываются переменные окружения в параметрах запускаемых программ
+ команда "?" отображает справку
+ если параметр имеет вид ?:"<текст>", текст используется как подсказка в окне запроса параметра
* ошибка обработки "%%" в файлах скриптов
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Ребята, у кого есть доступ к бетам 7.51, проверьте один баг при работе с файловыми системами. Он был указан здесь под индексом D.

Берем, например, папку Windows (чтоб побольше), кидаем в VP. ТК на некоторое время подвисает, определяя количество файлов в папке и всё такое, потом копирует. Здесь все логично. Но если при обычном копировании юзер может нажать Esc и начать копирование без подобных расчетов, то при копировании в файловую систему - казалось бы, нажатие Esc отменяет подсчет, но после нажатия Esc при каждом вызове функции установки прогресса ТК возвращает флаг отмены юзером копирования - даже после того, как пользователь изъявил желание продолжить копирование.

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

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

Сообщение Avada »

MVV
Это поведение не исправлено ни в 7.51, ни в 7.55. Так что можно репортить.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
ask-rus
Сообщения: 2077
Зарегистрирован: Вт ноя 10, 2009 14:06
Откуда: Russian Federation

Сообщение ask-rus »

MVV
Спасибо за плагин! Буду рекомендовать его друзьям и знакомым.
Жаль ничем пока не могу помочь в его развитии...
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Ответить