Возможно, я ошибся форумом, но помогите, пожалуйста, если кто знает.
Цитирую документацию:
Path0 - содержит путь на реальной файловой системе, до вызова плагинов, создающих свою панель (без заключительного '\')
Из этого, вроде, следует, что Path0 запоминается при создании плагином панели и не зависит от позиции, на которой стоит указатель в панели.
ОДНАКО!
Временная панель; содержит следующие файлы: C:\Root\qqq.txt
C:\Root\Sub\www.txt
Если указатель стоит на первом файле, то APanel.Path0=C:\Root
Если указатель стоит на втором файле, то APanel.Path0=C:\Root\Sub
При том, что «до вызова плагина, создавшего свою панель» (цитата из документации) путь был, естественно, один.
Ну и вдогонку. Есть ли возможность определить каталог, который был при создании временной панели (на самом деле - любой панели плагина)?
Что такое APanel.Path0
Posted: Mon 23 Apr, 2018 23:14
by HaRT
buniak_a_h wrote: ↑Mon 23 Apr, 2018 23:01 «до вызова плагина, создавшего свою панель» (цитата из документации)
Очевидно, документация написана для случая панели наподобие архивной.
buniak_a_h wrote: ↑Mon 23 Apr, 2018 23:01 определить каталог, который был при создании временной панели (на самом деле - любой панели плагина)?
Видимо, довольно часта ситуация: временная панель, полученная после поиска, содержит список файлов в папке и её вложенных подпапках. Требуется скопировать все/отмеченные файлы в другую папку, сохраняя структуру каталогов (относительно "корневой"). Я сделал, но чрезсидалищно перанально... Если получится сделать по уму - думаю, такой сервис будет многим полезен. Впрочем, возможно, он уже есть. Я не нашёл...
Что такое APanel.Path0
Posted: Mon 23 Apr, 2018 23:52
by HaRT
buniak_a_h wrote: ↑Mon 23 Apr, 2018 23:46
скопировать все/отмеченные файлы в другую папку, сохраняя структуру каталогов (относительно "корневой")
Лично я бы делал через архивирование без сжатия с сохранением относительных путей. И Фар для этого не особо нужен, ну разве что скормить выделенные пути архиватору. Если архиватор умеет писать/читать стандартный выход/вход, то можно даже без явного временного файла.
buniak_a_h wrote: ↑Mon 23 Apr, 2018 23:46
скопировать все/отмеченные файлы в другую папку, сохраняя структуру каталогов (относительно "корневой")
Лично я бы делал через архивирование без сжатия с сохранением относительных путей. И Фар для этого не особо нужен, ну разве что скормить выделенные пути архиватору. Если архиватор умеет писать/читать стандартный выход/вход, то можно даже без явного временного файла.
Насчёт "Фар для этого не особо нужен" я не понял. С помощью FindStr (Grep) искать, что ли?
Когда-то на MSDOS я так и делал. Не особо удобно...
Что такое APanel.Path0
Posted: Tue 24 Apr, 2018 00:38
by HaRT
buniak_a_h wrote: ↑Tue 24 Apr, 2018 00:25
С помощью FindStr (Grep) искать, что ли?
Ну я же написал: Фар тут нужен только для того, чтобы сформировать список выделенных на панели путей и скормить их архиватору (будь то bsdtar, 7-Zip или ещё какой) — в командной строке или через файл-список. Дальше этот архиватор файлы собирает в один архив с сохранением относительных путей, а другой экземпляр архиватора тут же их раскладывает из архива по тем же относительным путям в папке назначения. Совсем несложный батник получается, особенно если можно архиваторы объединить в конвейер.
Что такое APanel.Path0
Posted: Tue 24 Apr, 2018 08:30
by John Doe
buniak_a_h wrote: ↑Mon 23 Apr, 2018 23:01
Есть ли возможность определить каталог, который был при создании временной панели (на самом деле - любой панели плагина)?
Можно проверить Path0 стоя на элементе ..
Что такое APanel.Path0
Posted: Tue 24 Apr, 2018 09:22
by buniak_a_h
John Doe wrote: ↑Tue 24 Apr, 2018 08:30
Можно проверить Path0 стоя на элементе ..
Я так и сделал.
Это и называется перанально...
В этом есть неудобство. То ли действительно в ФАРе недоделка, то ли я не нашёл нормального способа. Поясню.
В структуре PanelInfo есть два элемента, характеризующие положение указателя на панели: CurrentItem и TopPanelItem. Для получения Path0 я перехожу на первый итем (на ".."), затем по Panel.SetPosIdx возвращаю указатель на старое место. При этом положение на панели меняется. Приходится в цикле делать Keys"Down", пока TopPanelItem не станет таким, как до перемещения. Или я не нашёл способа при перемещении задать TopPanelItem.
Аналогичное перемещение в редакторе: в функции editor.SetPosition можно задать как CurPos, так и TopScreenLine. А на панелях ситуация симметричная, но то ли такого не предусмотрено, то ли я не нашёл как. Нелогично...
Что такое APanel.Path0
Posted: Tue 24 Apr, 2018 09:40
by Shmuel
buniak_a_h wrote: ↑Tue 24 Apr, 2018 09:22Или я не нашёл способа при перемещении задать TopPanelItem.
panel.RedrawPanel
Что такое APanel.Path0
Posted: Tue 24 Apr, 2018 13:17
by Wave
А вот скопировать с временной панели с сохранением структуры — это очень и очень полезная фича! Нужна редко, но метко. Трюк с архиватором возьму на заметку, если не забуду к следующему разу, но вообще считаю этот трюк очень перректальным.
Что такое APanel.Path0
Posted: Tue 24 Apr, 2018 13:24
by Shmuel
Wave wrote: ↑Tue 24 Apr, 2018 13:17А вот скопировать с временной панели с сохранением структуры — это очень и очень полезная фича!
А в чём проблема написать макрос для этого? Есть функции win.CreateDir, win.CopyFile и т.д. Подозреваю, что такой макрос в 20 строк уложится.
Что такое APanel.Path0
Posted: Tue 24 Apr, 2018 17:48
by buniak_a_h
Shmuel wrote: ↑Tue 24 Apr, 2018 13:24
А в чём проблема написать макрос для этого? Есть функции win.CreateDir, win.CopyFile и т.д. Подозреваю, что такой макрос в 20 строк уложится.
Так и пишу. Были несколько проблем (описанных в этой теме). В остальном у меня 64 строки получилось. Это - ещё без подтверждения перезаписи. Сделаю - выложу.
Что такое APanel.Path0
Posted: Tue 24 Apr, 2018 17:59
by Shmuel
buniak_a_h wrote: ↑Tue 24 Apr, 2018 17:48В остальном у меня 64 строки получилось.
Ну да, 20 строк это слишком оптимистично было сказано.
Что такое APanel.Path0
Posted: Tue 24 Apr, 2018 19:42
by Smitis
buniak_a_h wrote: ↑Tue 24 Apr, 2018 09:22
Или я не нашёл способа при перемещении задать TopPanelItem.
Тремя вызовами Panel.SetPosIdx: cначала на -1 (в конец), затем на TopPanelItem, затем снова на CurrentItem.
П.С.
Опередили, уже посоветовали panel.RedrawPanel.