Копирование файлов с временной панели с сохранение структуры папок
Posted: Tue 24 Apr, 2018 20:12
by buniak_a_h
Предлагаю небольшой макрос, копирующий файлы с временной панели, открытой на активной панели (извините за тавтологию) в директорий, открытый на неактивной панели. Макрос "рассовывает" копируемые файлы по подкаталогам в соответствии с их расположением в исходной структуре (относительно "корневой" папки). Особенно полезна для копирования результатов поиска файлов, помещённых на временную панель.
В другом обсуждении упомянул эту задачу, и мне сказали, что может быть очень полезна.
Макрос повешен на CtrlAltF5
Макрос не обрабатывает каталоги (только файлы)
Макрос не запрашивает путь к приёмному каталогу. Строго в каталог неактивной панели.
При наличии в приемном каталоге файла запрашивает, что делать. Варианты:
- переписать \ как для одного файла,
- пропустить / так и для всех оставшихся
- обновить - переписать только если исходный файл новее приёмного.
Действует на все оставшиеся
- прекратить копирование.
Версия 2
Первая версия работала только во временной панели, созданной плагином TempPanel. Во вторую версию добавлены временные панели от плагинов LuaFAR Search и RESearch
Версия 3
По рекомендации John Doe заменил проверку GUID-а на флаг файловой панели
Добавил проверку, что исходный файл - реальный, т.к. TmpPanel в режиме :any может отображать на панели что угодно
Сделан обход ошибки ФАРа в функции Panel.Select для гашения отметок
Версия 4
Реализована минимальная визуализация (вывожу имя копируемого файла и имя целевой папки, а также обновляю содержимое пассивной панели)
Предусмотрено прерывание копирования по [Esc]. Увы, прерывание копирования текущего файла не предусмотрено.
Версия 1.5.3
Исправлен вызов panel.GetPanelInfo в связи с изменившимся интерфейсом.
Опубликовал версию 1.5.2 в связи с изменениями в модулях
Копирование файлов с временной панели с сохранение структуры папок
Posted: Fri 30 Nov, 2018 06:44
by Shtirla
Latest post of the previous page:
Во первых Спасибо автору ! помог решить задачку быстрее.
во вторых выкладываю модификацию текущего макроса, замена идет поиском первых слэшей в пути, а не из Panel0, ибо накиданные с разных ресурсов файлы так не копировались
Копирование файлов с временной панели с сохранение структуры папок
Posted: Fri 30 Nov, 2018 10:58
by buniak_a_h
Shtirla wrote: ↑Fri 30 Nov, 2018 06:44
замена идет поиском первых слэшей в пути, а не из Panel0, ибо накиданные с разных ресурсов файлы так не копировались
Я, конечно, в курсе. Но тут тоже проблема возникает: если поиск привёл к тому, что все найденные файлы расположены в одном подкаталоге (и его вложенных), то в качестве "корня" будет именно этот общий каталог. Меня это не устраивало. Поэтому я сделал макрос, "заточенный" под поиск по AltF7: при закрытии диалога поиска я запоминаю текущий каталог в локальную переменную, а при копировании использую это значение. Плюс - ясно. Минус - именно "заточенность" на поиск файла. Т.е. при занесении на временную панель файла, не находящегося в каталоге, бывшем текущим при начале поиска этот файл не будет найден. В связи с этим добавил следующее: если после копирования остались не скопированные файлы, то инициируется обычный поиск (F5).
Пример переделанного макроса будет помещён в первый пост темы чуть позже.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Fri 30 Nov, 2018 11:00
by Shtirla
Ну как вариант, перед копированием можно проходить все файлы с путями, и искать общий знаменатель в начале строки
Копирование файлов с временной панели с сохранение структуры папок
Posted: Fri 30 Nov, 2018 11:18
by buniak_a_h
Shtirla wrote: ↑Fri 30 Nov, 2018 11:00
Ну как вариант, перед копированием можно проходить все файлы с путями, и искать общий знаменатель в начале строки
Я писал, чем это меня не устраивает. Конкретно меня в конкретно моих задачах.
Если все найденные файлы находятся в одном подкаталоге, то корнем будет считаться этот общий для всех каталог. А мне для не очень квалифицированных юзеров надо делать так, чтоб они потом могли не глядя распаковать - и всё встало бы, куда надо.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Fri 30 Nov, 2018 11:22
by Shtirla
ну тогда не пойму чем вариант с заменой по первому\ не устраивает, он как раз таки полную структуру сохраняет
Копирование файлов с временной панели с сохранение структуры папок
Posted: Fri 30 Nov, 2018 14:02
by buniak_a_h
Shtirla wrote: ↑Fri 30 Nov, 2018 11:22
ну тогда не пойму чем вариант с заменой по первому\ не устраивает, он как раз таки полную структуру сохраняет
Извините, невнимателен.
По первому - другая крайность. Например, все проекты находятся в подпапках D:\SUBSTR\F\Projects\Projecn#. Это - у меня. У юзера нет D:\SUBSTR\F\Projects\, а вместо этого есть C:\Program Files\ Я передаю файлы, относящиеся к одному проекту (Project#\) (не все - выборочно).
Я не критикую Ваш вариант: такой макрос у меня тоже есть (точнее, был). И именно убирал общее начало. Мне как раз удобнее стало копировать пути, начиная с папки, которая была текущей во время начала поиска. Да, узко специализированный получился скрипт. Но часто требуемый. В моих условиях, во всяком случае...
Копирование файлов с временной панели с сохранение структуры папок
Posted: Sun 15 Dec, 2019 12:57
by buniak_a_h
Опубликовал версию 1.5.2 . Связана с изменениями в модулях для совместимости с другими моими же скриптами. Если Вы их не используете, версию 1.5.2 можете не качать.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Sun 15 Dec, 2019 15:47
by citRiks
buniak_a_h wrote: ↑Sun 15 Dec, 2019 12:57
Опубликовал версию 1.5.2
Установил, работает, с другими макросами не конфликтует. Спасибо.
С учётом следующего. В архиве CopyFiles.TempPanel.1.5.2.7z вместо файла CopyFiles.TempPanelRus.lng лежит файл CopyFiles.TempPanel.lng с англоязычным содержанием и в кодировке 1251. Перевёл содержание на русский, сохранил в UTF-8 с BOM и переимевал файл. Тогда скрипт стал нормально работать в Фаре с русским языком.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Sun 15 Dec, 2019 17:07
by buniak_a_h
citRiks wrote: ↑Sun 15 Dec, 2019 15:47
вместо файла CopyFiles.TempPanelRus.lng лежит файл CopyFiles.TempPanel.lng с англоязычным содержанием и в кодировке 1251.
На самом деле это был эксперимент. С тех пор функция GetMsg сильно расширилась …
Насколько я понимаю, это ни на что не влияет. Ну, кроме описания макроса во всяких браузерах. Но всё равно спасибо.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Sun 15 Dec, 2019 17:51
by citRiks
buniak_a_h wrote: ↑Sun 15 Dec, 2019 17:07
Насколько я понимаю, это ни на что не влияет
Кое на что, всё-таки, влияет. Например, в меню выбора макроса выводится описание макроса на английском. А если просто перевести текст на русский и сохранить его в 1251, то вывод будет и вовсе на тарабарском. Поэтому я и поправил файл как изложил выше.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Tue 31 Dec, 2019 09:13
by citRiks
buniak_a_h,
В 5543 обеих разрядностей при нахождении в панелях после нажатия кнопки F5 на клавиатуре стало появляться красное
Error
C:\FarTst.x86.3.0.5543n\Plugins\LuaMacro\LuaMacro.dll:
...3.0.5543n\Profile\Macros\scripts\CopyFiles.TempPanel.lua:77: bad argument #1 to 'GetPanelInfo' (
userdata expected, got number)
stack traceback:
[C]: in function 'GetPanelInfo'
...3.0.5543n\Profile\Macros\scripts\CopyFiles.TempPanel.lua:77: in function 'condition'
C:\FarTst.x86.3.0.5543n\Plugins\LuaMacro\utils.lua:1059: in function 'GetMacro'
C:\FarTst.x86.3.0.5543n\Plugins\LuaMacro\keymacro.lua:337: in function <C:\FarTst.x86.3.0.5543n\
Plugins\LuaMacro\keymacro.lua:336>
OK
.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Tue 31 Dec, 2019 10:33
by buniak_a_h
Интересно… Видимо, когда-то изменился интерфейс к этой функции. Во всяком случае я нашёл такие же ошибочные конструкции не только в моём скрипте, но и в давным-давно скачанных (авторства таких гуру, как Smuel!) Если интересно, то может посыпаться MultiPanel, PanelFilter (там panel.GetPanelInfo(-1, 1)), [Плагин] Macro Panel — макро-браузер в панели (правда, теперь ссылка в нём указывает "в космос". Но скачать я успел)
Та же беда будет и в Gind_n_Go (Вы, по-моему, его смотрели). Лечится заменой panel.GetPanelInfo(0) на panel.GetPanelInfo(nil, 1). У себя поправлю.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Tue 31 Dec, 2019 10:45
by buniak_a_h
Стоп! Исправил, и работать перестало … Надо искать …
--
upd
Всё правильно. Не работало по какой-то другой причине.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Tue 31 Dec, 2019 10:46
by Shmuel
buniak_a_h wrote: ↑Tue 31 Dec, 2019 10:33
Во всяком случае я нашёл такие же ошибочные конструкции не только в моём скрипте, но и в давным-давно скачанных (авторства таких гуру, как Smuel!)
Если не трудно, подскажите, в котором моём скрипте вы такое нашли. Сейчас сделал поиск по своим скриптам с регулярным выражением panel\.\w+\s*\(\s*\d, и ничего не нашлось.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Tue 31 Dec, 2019 11:01
by buniak_a_h
Shmuel wrote: ↑Tue 31 Dec, 2019 10:46
подскажите, в котором моём скрипте вы такое нашли
Там я привёл список.
PanelFilter (не знаю, какая версия - в самом скрипте не указано). Там написано:
Ну и Ваш панельный модуль, который мне посоветовали в качестве примера. Увы, теперь там "висячая ссылка", но был! А значит такой вариант вызова был узаконен
Копирование файлов с временной панели с сохранение структуры папок
Posted: Tue 31 Dec, 2019 11:17
by Shmuel
buniak_a_h wrote: ↑Tue 31 Dec, 2019 11:01
PanelFilter (не знаю, какая версия - в самом скрипте не указано). Там написано:
Спасибо, нашёл. (Регулярное выражение поиска не учитывало возможность минуса перед цифрой).
Эта строчка принадлежала оригинальному автору, который писал данный скрипт много лет назад для Фар 1.75.
Надо будет строчку исправить и скрипт перевыложить.
Насчёт панельного модуля - ошибку не нашёл - просьба дать ссылку или прикрепить вашу копию.