[WFX] VirtualPanel - временная панель для ТК (Unicode)
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Это не окно VPBatch, это вопрос, прописанный в скрипте командой ifok. Просто отредактируй скрипт, и всё. Например, так:GGS писал(а):MVV
Когда я использую AskParam.exe совместно с VPBatch.exe, возможно отключить окно сообщения VPBatch.exe?
Код: Выделить всё
AskParam.exe /c"Добавление ссылки" /t"%%${}Path%%"%N /p"Добавить "%N" как:" VPBatch.exe ^exec { ^add /r "%%1" %P%N }В первой публичной бете ТК 7.55 замечено устранение некоторых недочетов в работе с временными панелями, в частности, глюк при переключении наборов колонок через контекстное меню заголовков табуляторов. Помимо этого, новый ТК позволяет выполнять операции копирования/перемещения файлов между виртуальной и физической файловой системой в фоновом потоке, позволяя параллельно выполнять другие операции с временной панелью. Я не мог обойти эту возможность в VP.
VirtualPanel 1.0.0.580 (изменения после 1.0.0.560):
+ многопоточный доступ к виртуальной системе
+ команда <move
+ команда <for позволяет вставлять только имя файла вместо %~<symbol>
+ возможность отменить прерывание операции (внутренняя проверка удержания Esc вместо учета флага прерывания ТК)
* переход по Shift+Enter к папке файла, а не к самому файлу (после 1.0.0.550)
* Shift+Enter в ТК 7.55 не обрабатывался из-за более высокого приоритета внутреннего выполнения
* ошибка обработки параметров команды <for
* некорректная интерпретация ".." в путях
* убраны запросы в командах <save и <export после <silent
* некоторые другие исправления
Помимо всего прочего, добавлен шизофренический скрипт, позволяющий перемещать структуру папок в другое место, выполняя слияние её содержимого с уже существующими папками (собственно, ради этого пришлось расширить функциональность команды <for - но нововведение не будет лишним).
VirtualPanel 1.0.0.580 (изменения после 1.0.0.560):
+ многопоточный доступ к виртуальной системе
+ команда <move
+ команда <for позволяет вставлять только имя файла вместо %~<symbol>
+ возможность отменить прерывание операции (внутренняя проверка удержания Esc вместо учета флага прерывания ТК)
* переход по Shift+Enter к папке файла, а не к самому файлу (после 1.0.0.550)
* Shift+Enter в ТК 7.55 не обрабатывался из-за более высокого приоритета внутреннего выполнения
* ошибка обработки параметров команды <for
* некорректная интерпретация ".." в путях
* убраны запросы в командах <save и <export после <silent
* некоторые другие исправления
Помимо всего прочего, добавлен шизофренический скрипт, позволяющий перемещать структуру папок в другое место, выполняя слияние её содержимого с уже существующими папками (собственно, ради этого пришлось расширить функциональность команды <for - но нововведение не будет лишним).
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
1) Допустим, есть скрипт >abc, и я выполняю команду Что происходит? По моим наблюдениям, ничего. Приходится сначала стирать старый скрипт и только потом выполнять команду. А здорово бы было, если бы он традиционно спрашивал: типа такой уже есть, заменить/нет/переименовать?
2) Соорудил два скрипта (может, кому пригодится). Скрипт удаляет в текущей и ниже файлы с заданной маской, кроме скриптов и хомяка (index.*)То же, но без маски (все файлы):3) За VPBatch.exe спасибо. Собственно, ты выполнил мое предложение.
Теперь эпитет "монстр" в отношении Virtual Panel - это просто уменьшитеьно-ласкательное...
Код: Выделить всё
<add >abc ...2) Соорудил два скрипта (может, кому пригодится). Скрипт удаляет в текущей и ниже файлы с заданной маской, кроме скриптов и хомяка (index.*)
Код: Выделить всё
<add \>MaskDelKeepIndex { <for %%f . "%1" { <ifcond { !script && !like "index.*" @ %%f } { <del "%%f" } } <for /d! %%d . * { <cd "%%d" <exec \>MaskDelKeepIndex "%1" } }Код: Выделить всё
<add \>FileDelKeepIndex { <for %%f . * { <ifcond { !script && !like "index.*" @ %%f } { <del "%%f" } } <for /d! %%d . * { <cd "%%d" <exec \>FileDelKeepIndex } }Теперь эпитет "монстр" в отношении Virtual Panel - это просто уменьшитеьно-ласкательное...
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
1) Внутренние команды не обязаны выполнять все пожелания:) Почему бы тебе не написать себе такой вариант скрипта >add, который удовлетворил бы все твои запросы, и пользоваться им вместо команды <add (благо, проверять существование файла и спрашивать у юзера возможность имеется)? Кстати, команда <add раньше заменяла существующие объекты, но это было не всегда безопасно, т.к. при замене папки файлом все содержимое папки уничтожалось. Поэтому с версии 1.0.0.560 по умолчанию команда <add не заменяет объекты, а заменяет их только при указании флага /f.
2) Лучше вместо строчки
написать
- будет работать независимо от расположения и имени файла скрипта.
Кстати, можно добавить проверку на наличие параметра-маски и, если он не задан, запускать себя же, передав в качестве маски звездочку.
Кстати, без команды <cd тоже можно обойтись. 
В конечном итоге скрипт может принять следующий вид:
Кстати, удобно вначале писать скрипт, указывая каждую команду на новой строке, с увеличенной табуляцией вложенных блоков:
(лишние разрывы строк и табуляции потом можно удалить regex-заменой "(\r\n|\t)+" на пробел или несколько пробелов)
3) Я сам довольный, что теперь можно вызывать внутренние команды с кнопочек панели инструментов.
Еще была мысль написать нечто вроде браузера виртуальной системы с поддержкой перетаскивания отдельно от виртуальной панели, чтобы не засорять её, но не знаю, как обращаться к ней - хотя, если это будет отдельный плагин ТК, то в принципе будет возможно передать ему указатель на экземпляр виртуальной системы и использовать его из нескольких потоков (благо, сейчас сам экземпляр имеет свою критическую секцию для многопоточного доступа).
2) Лучше вместо строчки
Код: Выделить всё
<exec \>MaskDelKeepIndex "%1"Код: Выделить всё
<exec "%0" "%1"Кстати, можно добавить проверку на наличие параметра-маски и, если он не задан, запускать себя же, передав в качестве маски звездочку.
В конечном итоге скрипт может принять следующий вид:
Код: Выделить всё
<add /f \>MaskDelKeepIndex { <ifdef "%2" { <for %%f "%1" "%2" { <ifcond { !script && !like "index.*" @ %%f } { <del "%%f" } } <for /d! %%d "%1" "*" { <exec "%0" "%%d" "%2" } } { <ifdef "%1" { <exec "%0" "%1" "*" } { <exec "%0" "." "*" } } }Код: Выделить всё
<add /f \>MaskDelKeepIndex {
<ifdef "%2" {
<for %%f "%1" "%2" {
<ifcond { !script && !like "index.*" @ %%f } { <del "%%f" }
}
<for /d! %%d "%1" "*" { <exec "%0" "%%d" "%2" }
}
{
<ifdef "%1" { <exec "%0" "%1" "*" } { <exec "%0" "." "*" }
}
}3) Я сам довольный, что теперь можно вызывать внутренние команды с кнопочек панели инструментов.
Еще была мысль написать нечто вроде браузера виртуальной системы с поддержкой перетаскивания отдельно от виртуальной панели, чтобы не засорять её, но не знаю, как обращаться к ней - хотя, если это будет отдельный плагин ТК, то в принципе будет возможно передать ему указатель на экземпляр виртуальной системы и использовать его из нескольких потоков (благо, сейчас сам экземпляр имеет свою критическую секцию для многопоточного доступа).
Последний раз редактировалось MVV Вт мар 30, 2010 14:51, всего редактировалось 2 раза.
AskParam не поддерживает Юникод, когда я ее писал, в этом не было необходимости, а мне пока все-таки char* писать привычнее, чем wchar_t*. В принципе, могу переделать.
Заметил, что в 1.0.0.580 в команде <for параметры обрабатываются неверно - путь и маска поменялись местами. Поэтому до исправления (следующий релиз) можно использовать следующий трюк (он же будет работать и после исправления - надеюсь, это очевидно не только мне
):
Видимо, придется писать для редактора схему подсветки, чтобы удобнее было править скрипты. 
Кстати, команды можно писать короче, они идентифицируются по 3-4 буквам (например, move, ifcond, properties и т.п. - но это пока имена не пересекаются).
По просьбам трудящихся обновленная Юникод-версия AskParam (больше не знаю, куда выложить, так что тут).
VirtualPanel 1.0.0.590:
* неправильный порядок параметров команды for
* ошибка установки даты/времени файлов скриптов
* некоторые оптимизации
Заметил, что в 1.0.0.580 в команде <for параметры обрабатываются неверно - путь и маска поменялись местами. Поэтому до исправления (следующий релиз) можно использовать следующий трюк (он же будет работать и после исправления - надеюсь, это очевидно не только мне
Код: Выделить всё
<for %f "<путь>\<маска>" "" {}Кстати, команды можно писать короче, они идентифицируются по 3-4 буквам (например, move, ifcond, properties и т.п. - но это пока имена не пересекаются).
По просьбам трудящихся обновленная Юникод-версия AskParam (больше не знаю, куда выложить, так что тут).
VirtualPanel 1.0.0.590:
* неправильный порядок параметров команды for
* ошибка установки даты/времени файлов скриптов
* некоторые оптимизации
Пожалуйста.GGS писал(а):Спасибо, работает. Я всегда в Вас верил.MVV писал(а):обновленная Юникод-версия AskParam
Кстати, теперь AskParam имеет постоянное место на wincmd.ru.
Интересно, кто какой максимальный файла состояния тестировал. У меня максимальный с где-то 346К объектов весит около 90 МБ (на больше дури не хватило
Внес некоторые изменения в формат пути в файле списка, теперь этот же файл списка весит в полтора раза меньше, правда читабельность немного снизилась (разумеется, поддержка полного формата останется).
Свершилось. Новый релиз с новыми багами. 
VirtualPanel 1.0.0.620:
+ сокращенный формат файла состояния
+ флаг 'o' команды save для сохранения файла состояния полного формата
+ безопасное многопоточное перечисление файлов (список файлов формируется за один заход в критическую секцию при вызове FsFindFirst)
+ более быстрое сохранение состояния (файлы подпапок ищутся от дескрипторов папок, а не из корневого каталога)
+ более быстрые загрузка/выгрузка больших состояний (используется boost::fast_pool_allocator как аллокатор для map)
* неправильный порядок параметров команды for
* ошибка установки даты/времени файлов скриптов
* неверная обработка относительных путей для команды put
* ошибка обработки маски для команды export
* некоторые другие исправления и оптимизации
Кстати (не совсем в тему), я доделал AskParam, теперь она позволяет запускать программу с переменными окружения в пути (%COMMANDER_PATH%, например).
VirtualPanel 1.0.0.620:
+ сокращенный формат файла состояния
+ флаг 'o' команды save для сохранения файла состояния полного формата
+ безопасное многопоточное перечисление файлов (список файлов формируется за один заход в критическую секцию при вызове FsFindFirst)
+ более быстрое сохранение состояния (файлы подпапок ищутся от дескрипторов папок, а не из корневого каталога)
+ более быстрые загрузка/выгрузка больших состояний (используется boost::fast_pool_allocator как аллокатор для map)
* неправильный порядок параметров команды for
* ошибка установки даты/времени файлов скриптов
* неверная обработка относительных путей для команды put
* ошибка обработки маски для команды export
* некоторые другие исправления и оптимизации
Кстати (не совсем в тему), я доделал AskParam, теперь она позволяет запускать программу с переменными окружения в пути (%COMMANDER_PATH%, например).
Простенькая панелька-менюшка инструментов для работы с одной виртуальной панелью (путь к VPBatch и AskParam нужно прописать свой):
Первая буква подсказки говорит о том, на какой панели должен быть курсор - на обычной (P) или на виртуальной (V), далее знак < или > указывает направление действия.
Код: Выделить всё
[Buttonbar]
Buttoncount=10
button1=WCMICONS.dll,65
cmd1=%COMMANDER_PATH%\Addons\AskParam.exe
param1=/c"Добавление ссылки на временную панель" /t"%%${}Path%%\"%N /p"Добавить "%N" как:" "%%COMMANDER_PATH%%\Plugins\FileSystem\VirtualPanel\VPBatch.exe" ^add "%%1" %P%N
path1=%COMMANDER_PATH%\Plugins\FileSystem\VirtualPanel\
iconic1=0
menu1=P>V Добавить объект на временную панель...
button2=WCMICONS.dll,64
cmd2=%COMMANDER_PATH%\Plugins\FileSystem\VirtualPanel\VPBatch.exe
param2=^ifok "Удалить %%${}Path%%\"%S1" из виртуальной панели?" { ^del /rd "%%${}Path%%\"%S1 }
iconic2=0
menu2=V>X Удалить объект из временной панели
button3=
iconic3=0
button4=WCMICONS.dll,4
cmd4=%COMMANDER_PATH%\Addons\AskParam.exe
param4=/c"Загрузка файла состояния" /t%P%N /p"Укажите путь к файлу состояния:" "%%COMMANDER_PATH%%\Plugins\FileSystem\VirtualPanel\VPBatch.exe" ^load "%%1"
iconic4=0
menu4=P>V Загрузить файл состояния...
button5=WCMICONS.dll,76
cmd5=%COMMANDER_PATH%\Plugins\FileSystem\VirtualPanel\VPBatch.exe
param5=^ifok "Удалить всё содержимое папки %%${}Path%%?" { ^del /rd "%%${}Path%%\*" }
iconic5=0
menu5=V>X Очистить текущую папку...
button6=WCMICONS.dll,51
cmd6=%COMMANDER_PATH%\Addons\AskParam.exe
param6=/c"Загрузка файла состояния в папку" /t%P%N /p"Файл состояния для загрузки в %%${}Path%%:" "%%COMMANDER_PATH%%\Plugins\FileSystem\VirtualPanel\VPBatch.exe" ^load "%%1" "%%%%${}Path%%%%"
iconic6=0
menu6=P>V Загрузить содержимое файла состояния в текущую папку...
button7=
iconic7=0
button8=WCMICONS.dll,50
cmd8=%COMMANDER_PATH%\Addons\AskParam.exe
param8=/c"Экспорт списка имен файлов" /t%P"%O.m3u" /p"Создаваемый список MP3-файлов из %%${}Path%%:" "%%COMMANDER_PATH%%\Plugins\FileSystem\VirtualPanel\VPBatch.exe" ^export /a "%%1" "%%%%${}Path%%%%" *.mp3
menu8=P<V Создать M3U-список из MP3-файлов текущей виртуальной папки...
button9=
iconic9=0
button10=WCMICONS.dll,34
cmd10=%COMMANDER_PATH%\Plugins\FileSystem\VirtualPanel\VPBatch.exe
param10=^prop
iconic10=0
menu10=ПараметрыVirtualPanel 1.0.0.640:
+ групповые ответы на вопрос создания ссылок при перемещении в виртуальную папку
* показ свойств в ТК 7.55 не обрабатывался из-за более высокого приоритета операции внутреннего выполнения
* исключение при перемещении из физической папки в виртуальную
* ошибка перезаписи файлов только для чтения
Грандиозные идеи почти иссякли:) нужна помощь
+ групповые ответы на вопрос создания ссылок при перемещении в виртуальную папку
* показ свойств в ТК 7.55 не обрабатывался из-за более высокого приоритета операции внутреннего выполнения
* исключение при перемещении из физической папки в виртуальную
* ошибка перезаписи файлов только для чтения
Грандиозные идеи почти иссякли:) нужна помощь
Слава Богу.MVV писал(а): Грандиозные идеи почти иссякли:) нужна помощь
А теперь я скажу как нормальный пользователь (и думаю, что большинство думают также), который НИКОГДА В ЖИЗНИ не будет пользоваться всеми этими скриптами.
Вы хотите идею? Вот Вам идея с которой нужно было начинать все это дело: нормальное окно настроек.
Сейчас оно для гиков\прогеров\фенов скриптов. А пользователь хочет GUI, а-ля лук-анд-фил.
Например:
что это такое???Флаги событий для отчета:
0x0
и что дальше? а простой EditBox в котором можно сразу задать путь слабо влепить?Файл отчета:
%TEMP%\VirtualPanel.log
опять-таки нормальную формочку, где я сам впишу цифру жалко?Максимальный размер:
0
И так далее по списку...
Вобщем, объяснил думаю доходчиво.
TC 9.51 | Win10 1903
Не нравится мне тон монолога. Не слишком ли резко?Mr.Merak писал(а):Слава Богу.
Если нововведения не по душе - пожалуйста, пользуйте старую версию, или не пользуйте вообще. Мысль в чём-то верная, но ее можно было выразить куда более благоприятным для ответного действия образом. Например, "О, раз глобальные идеи закончились, может быть, пришло время сделать подробный диалог настроек?". И дальнейшая беседа проходила бы совсем в другом тоне.
Я лично предпочитаю нечто нормально работающее, чем бессмысленные диалоги настроек и ноль функциональности. Не вижу необходимости забивать плагин диалогами настроек, в которые пользователь зайдет один раз, настроит и забудет об их существовании. Вам шашечки или ехать? К сожалению, сейчас глобальные тенденции явно не в сторону ехать - сплошь и рядом пустые красивости. Да, диалог настроек не слишком удобен, но это что, единственное, чего вам всем для полного счастья не хватает?Mr.Merak писал(а):Вот Вам идея с которой нужно было начинать все это дело: нормальное окно настроек.
Про файл отчета и максимальный размер лога - тут вообще не извращено, просто прокрутить колесо мыши (лень?) и вписать цифру или путь. И вообще, с учетом наличия VPBatch можно один раз создать кнопку панели инструментов для указания лог-файла, и не нужно входить в диалог вообще.
Последний раз редактировалось MVV Сб апр 03, 2010 21:32, всего редактировалось 1 раз.
Изо всех сил старался без матаMVV писал(а): Не нравится мне тон монолога.
вот по-поводу версий, что за странная нумерация? Ненавижу я эти 0.0.0.0.0.0MVV писал(а): Если нововведения не по душе - пожалуйста, пользуйте старую версию
А про нормальное работающее и нормальный диалог слыхали?MVV писал(а): Я лично предпочитаю нечто нормально работающее, чем бессмысленные диалоги настроек
"бессмысленные" это какое? градиенты на кнопках? я разве этого прошу? Откройте диалог настроек ТС - бессмысленно?
А я и добрая половина юзеров не видет смысла в скриптахMVV писал(а): Не вижу необходимости забивать плагин диалогами настроек, в которые пользователь зайдет один раз, настроит и забудет об их существовании
похоже на фобиюMVV писал(а):сплошь и рядом пустые красивости.
Тогда надо было для ФАРа писать плаг... а, ну да там же уже есть такой. Может тогда cmd.exe - и не париться?
Exec.exe, VPBatch.exe - имхо, вообще бред. Вспомогательные какие-то программы - а зачем они и как их использовать НАТЬ-НЕ-НАДОMVV писал(а): VPBatch можно один раз создать кнопку панели инструментов для указания лог-файла, и не нужно входить в диалог вобще.
TC 9.51 | Win10 1903