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

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

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

GGS
Сообщения: 322
Зарегистрирован: Сб май 02, 2009 13:00

Сообщение GGS »

MVV
Имею TC с плагином VP на носителе read-only (CD).
Естественно, при выходе из TC получаю сообщение:
---------------------------
Virtual Panel
---------------------------
Ошибка записи файла конфигурации!

K:\TC_Local\fsplugin.ini

Проверьте права доступа к файлу.
---------------------------
Повтор Отмена
---------------------------

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

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

Несколько вопросов.
1. При нахождении внутри VP выдаю команду

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

<add \ c:\Some\path\*.*
или

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

<add \ c:\Some\path\
вылезает уже известное мне ;) диалоговое окно с кучей цифр и вопросом "Continue execution". При отказе и закрытии ТС еще одно сообщение об ошибке памяти.
а) команда правильная? Если да, то почему вызывается ошибка?
б) если нет, то в чем ошибка? И даже если в командной строке ерунда, не следует ли выдать информацию о причине ошибки, а не исключение?

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

Сообщение MVV »

GGS писал(а):Сам TC при этом зависает и выход возможен только через Диспетчер задач.
Можно ли предусмотреть возможность закрытия TC с отменой записи в файл конфигурации VP?
Хм, вот хрень. Непонятно мне, почему нельзя нажать кнопку диалога сообщения. Подумаю, что можно сделать. Пока рекомендую выгружать модуль командой cm_UnloadPlugins (предварительно закрыв вкладки с VP).
Вахмурка писал(а):

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

<add \ c:\Some\path\
а) команда правильная? Если да, то почему вызывается ошибка?
б) если нет, то в чем ошибка?
Вообще, маску в команде add указывать нельзя (если хочешь добавлять по маске - юзай put). Но самая серьезная ошибка этой команды - ты пытаешься заменить корневой каталог. Первым параметром нужно указывать путь к новому объекту, который ты хочешь создать. А так это приводило к уничтожению корневого каталога.
Вахмурка писал(а):И даже если в командной строке ерунда, не следует ли выдать информацию о причине ошибки, а не исключение?
It's not intentional. :D
Спасибо, исправил.
Вахмурка писал(а):2. Опечатка в английской справке: "Changeы".
Спасибо, но видно уже исправил - не нашел (везде где есть change, оно либо change, либо changes).
Последний раз редактировалось MVV Сб фев 06, 2010 18:20, всего редактировалось 1 раз.
GGS
Сообщения: 322
Зарегистрирован: Сб май 02, 2009 13:00

Сообщение GGS »

Вахмурка писал(а):<add \ c:\Some\path\
Сделайте так:

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

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

Сообщение MVV »

В общем, я перенес диалог недоступности конфига для записи в функцию инициализации. И вызывается он только если конфига изначально не существует, а попытка записать в него пустые параметры провалилась. Спасибо за информацию о баге (хотя и странном баге - видать, ТК и модуль друг другу мешали на этапе завершения).


VirtualPanel 1.0.0.400:
+ удаление физических файлов в корзину по умолчанию (напрямую - если зажата клавиша Shift или в ТК включено удаление напрямую)
+ файл состояния VP сохраняется при закрытии ТК только если содержимое VP было изменено
+ команда load теперь может быть запущена без параметров - для загрузки списка по умолчанию
+ команда eas теперь позволяет изменять имя скрипта автообновления
+ флаг /a для команд save/export, позволяющий сохранять в кодировке ANSI
+ новая команда ifcond для проверки атрибутов файла и т.п.
* убран заблокированный диалог при закрытии при неудачном сохранении настроек
* уменьшен объем текста в окне справки, теперь все команды умещаются в сообщении
* некоторые другие исправления
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

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

С командой более или менее ясно, буду дальше разбираться.
edit <virtual_path> [<new_script_or_real_path>]
Сhangeы script text or target path for object. If second parameter is not specified, edit dialog will be shown;
[Добавлено]
Твой плагин превращается во всесильного монстра. Это не может не радовать. Когда ты слегка притормозишь в программировании, дай знать - существенно переработаю статью, воздав должное Virtual Рanel. А пока (это тоже следствие "монструозности") - тебе следует существенно расширить документацию, увеличив количество примеров. Пока при чтении голова идет кругом - с трудом понимаешь, как это огромные возможности использовать. В других ВП с более скромными функциями подробное описание излишне, в твоей без этого не обойтись.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Вахмурка писал(а):С командой более или менее ясно, буду дальше разбираться.
edit <virtual_path> [<new_script_or_real_path>]
Сhangeы script text or target path for object. If second parameter is not specified, edit dialog will be shown;
А-а, понял, в файле языка. Мне пришлось поубирать все описания внутренних команд, т.к. выяснилось, что мессейджбокс не вмещает более 1535 символов. Так что этой строки больше нет. Я оставил (и даже добавил) только описания флагов, используемых в некоторых командах.
Вахмурка писал(а):Твой плагин превращается во всесильного монстра. Это не может не радовать. Когда ты слегка притормозишь в программировании, дай знать - существенно переработаю статью, воздав должное Virtual Рanel.
Надеюсь, не сильно в монстра. :)
Я постараюсь сохранить основную тематику функций. А статью можешь делать для версии 1.0.0.400, думаю, в ближайшее время у меня будет меньше свободного времени.
Вахмурка писал(а):Пока при чтении голова идет кругом - с трудом понимаешь, как это огромные возможности использовать. В других ВП с более скромными функциями подробное описание излишне, в твоей без этого не обойтись.
Ага, я сам не до конца понимаю, как их использовать. :)
Пожалуй, введение функции ifcond было действительно серьезным шагом - она использует довольно мощный вычислитель выражений. Я сам пока не знаю, нужен ли ей такой. Да и в плане дат я вначале думал просто приводить дату к числу вида 20100205 - для сравнения, а потом подумал, что в таком виде найти файл, который изменен менее чем 10 дней назад, будет сложно, тогда прикрутил преобразование в число секунд от 2000 года, а потом, решив, что секунда - слишком мелко, поменял на минуты. Так что, для поиска файлов, измененных за последние 10 дней, с размером больше 100 КБ, вполне можно использовать скрипт вида:

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

<for %f . *.txt { <ifcond "(date>datenow-10*24*60)&&size>100*1024 @ %f" { <ifok "Файл %f изменен за последние 10 дней и весит более 100 КБ." { } } }
(вернее, пока нельзя - я написал преобразователь дат, но не везде его вставил, уже исправил в коде. Не было времени у меня седня на тестирование, потихоньку доведем до ума)
Но я лично не припомню, когда я в ТК искал файлы, измененные за определенное время, при этом с ограничением по размеру. :)

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

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

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

В описании внутренних команд Virtual Panel то и дело встречается "<virtual_path> <physical_path_and_mask>", то есть два пути. Во-первых, это - явный намек на две панели. Во-вторых, очень уныло всякий раз набирать пути вручную.
Да, есть команда cm_AddPathToCmdline. Но это значит, что надо перейти в одну панель, выдать команду, потом в другую - опять ее, а в конце, нажимая Ввод, не забыть перейти в Virtual Panel. Скучно, долго, неудобно, чревато ошибками.
Теперь представим себе скрипт или, лучше, утилиту. Ищется окно ТС, в нем ищутся дексрипторы правой и левой панелей и дескриптор ком. строки. Далее идут вариации: что выделено на "физической" панели и какую команду выдал пользователь?
После непосредственного формирования команды активизируется "виртуальная" панель, фокус ставиться на ком. строку, дальше можно послать cm_Return. Все.
Тут надо задуматься вот о чем. Первое. Чтобы писать эту программу, надо хорошо чувствовать "физику" Virtual Panel. То есть в идеале алгоритм (не обязательно программу) должен писать тот, что в этом успел разобраться. Второе. Скрипт - на самый худой конец, по-хорошему даже vbs не подойдет, не говоря про PowerPro. Возможное решение - AHK, раз уж она умеет свои скрипты компилять в экзешники. В идеале - маленькая, самостоятельная утилитка. С сответствующим названием типа VPTool.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Знаю, что неудобно набирать вручную пути вставлять и прыгать по панелям. Но городить огород мне тоже не очень хочется.
Если бы Гислер добавил в ТК возможность запускать файлы с FS-модулей с панели инструментов, эта проблема исчезла бы - можно было бы добалять выделенный файл одной кнопкой. Если нет желания заморачиваться с внутренними командами - без этого вполне можно обойтись.
Потом, в любом случае кому-то придется искать дескрипторы панелей и т.п. Проблема в том, что ТК написан на Delphi - т.е. у компонентов окна нет постоянных идентификаторов, по которым можно было бы понять, левая это панель или правая, панель состояния ли мы нашли, или панель дисков...
Думаю, если есть скрипт, который находит панели и т.п., вполне можно было бы объяснить ему, что надо вставить в командную строку путь к файлу, выделенному на одной панели, потом на другой и т.п. Например, чтобы вставить команду <add, нужно получить путь к файлу, текущую папку на другой панели, добавить к этому пути предлагаемое имя файла и показать диалог подтверждения, а затем просто выполнить командную строку - здесь не требуются никакие глубокие знания физики или геометрии:) просто примитивные действия, доступные из любого скриптового инструмента.

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


Небольшое обновление. 8)

VirtualPanel 1.0.0.404:
* исправлено сравнение дат в команде ifcond (ошибка преобразования к числу минут)
+ эмуляция вхождения в архив по Shift+Enter

Правда, если VP открыта в правой панели, ТК открывает архив (создает новую вкладку), но почему-то переключает фокус на левую панель. Написал на оф. форуме, посмотрим, что можно сделать.
lsched
Сообщения: 74
Зарегистрирован: Вт окт 20, 2009 08:53
Откуда: Россия, Саратов

Сообщение lsched »

MVV писал(а):+ новая команда ifcond для проверки атрибутов файла и т.п.
Что-то неудачно реализовано определение доступности файла (valid). Создаю макрос, что-нибудь типа
<add \>lost_delete {<for %%f . * { <ifcond "valid @ %%f" {} { <del "%%f" } } }
Запускаю. Убиваются не только ссылки на недоступные файлы, но и макросы. :(
И какая-то засада с пользовательскими колонками. Через заголовки табуляторов включить не получается, выскакивает окно настройки. Если включить через главное меню - макросы исчезают, вместо них появляются задвоенные имена файлов. Пощелкаешь про заголовкам табуляторов - без всякой системы макросы то появляются, то опять превращаются в дубликаты файлов.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Да, согласен, про скрипты я забыл. Думаю, valid возвращает верное значение, т.к. файл не является ссылкой, но добавлю ключевое слово script для проверки, скрипт ли, так что можно будет использовать условие (!srcipt&&valid).

Кстати, если поставить скриптам атрибут только чтение, то без флага /f команда del их удалить не сможет.

А про колонки мы не раз говорили (если не в этой теме, то в этой, начиная с этого поста). Когда выбираешь набор колонок через главное меню ТК, все работает правильно, а когда через меню заголовков табуляторов, ТК почему-то переключает список набора колонок на текущий модуль, и надо вручную выбирать обратно модуль <Общие>.
lsched
Сообщения: 74
Зарегистрирован: Вт окт 20, 2009 08:53
Откуда: Россия, Саратов

Сообщение lsched »

MVV писал(а):А про колонки мы не раз говорили (если не в этой теме, то в этой, начиная с этого поста). Когда выбираешь набор колонок через главное меню ТК, все работает правильно
Я читал. Речь немного о другом. Когда таки со скрипом включаешь пользовательские колонки, имена скриптов пропадают, вместо них появляеются имена существующих файлов во втором экземпляре.

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

File1.ext     1 725
File2.ext     2 233
File3.ext     3 466
File1.ext     1 725
File2.ext     2 233
File3.ext     3 466
Если сменить порядок сортировки от прямого к обратному, щелкнув по заголовку колонки, все становится нормально

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

File3.ext     3 466
File2.ext     2 233
File1.ext     1 725
>Script3          0
>Script2          0
>Script1          0
Щелкнешь еще раз - опять задвоенные имена. Эффект проявляется при изменении порядка сортировки любой колонки.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Странный глюк. У меня не наблюдается. Приложи файл содержимого папки с такой ерундой (сделай экспорт командой <save c:\1.lst .). Заодно проверь, на всех ли наборах колонок такое наблюдается. Кстати, если появляется такое именно при изменении сортировки, глюк в ТК, т.к. он не запрашивает повторно при изменении сортировки содержимое папки - надо только понять, как его поймать.
lsched
Сообщения: 74
Зарегистрирован: Вт окт 20, 2009 08:53
Откуда: Россия, Саратов

Сообщение lsched »

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

Сообщение MVV »

Пиши автору TWinKey, пусть разбирается, где у него ошибка. :)
Можешь еще попытаться локализовать функцию из TWinKey, при включении которой проявляется глюк - понятнее будет.
Ответить