Page 1 of 2

Что такое APanel.Path0

Posted: Mon 23 Apr, 2018 23:01
by buniak_a_h
Возможно, я ошибся форумом, но помогите, пожалуйста, если кто знает.
Цитирую документацию:
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:46
by buniak_a_h
HaRT wrote: Mon 23 Apr, 2018 23:14 Какую задачу вы хотите решить?
Видимо, довольно часта ситуация: временная панель, полученная после поиска, содержит список файлов в папке и её вложенных подпапках. Требуется скопировать все/отмеченные файлы в другую папку, сохраняя структуру каталогов (относительно "корневой"). Я сделал, но чрезсидалищно перанально... Если получится сделать по уму - думаю, такой сервис будет многим полезен. Впрочем, возможно, он уже есть. Я не нашёл...

Что такое APanel.Path0

Posted: Mon 23 Apr, 2018 23:52
by HaRT
buniak_a_h wrote: Mon 23 Apr, 2018 23:46 скопировать все/отмеченные файлы в другую папку, сохраняя структуру каталогов (относительно "корневой")
Лично я бы делал через архивирование без сжатия с сохранением относительных путей. И Фар для этого не особо нужен, ну разве что скормить выделенные пути архиватору. Если архиватор умеет писать/читать стандартный выход/вход, то можно даже без явного временного файла.

Что такое APanel.Path0

Posted: Tue 24 Apr, 2018 00:25
by buniak_a_h
HaRT wrote: Mon 23 Apr, 2018 23:52
buniak_a_h wrote: Mon 23 Apr, 2018 23:46 скопировать все/отмеченные файлы в другую папку, сохраняя структуру каталогов (относительно "корневой")
Лично я бы делал через архивирование без сжатия с сохранением относительных путей. И Фар для этого не особо нужен, ну разве что скормить выделенные пути архиватору. Если архиватор умеет писать/читать стандартный выход/вход, то можно даже без явного временного файла.
Насчёт "Фар для этого не особо нужен" я не понял. С помощью FindStr (Grep) искать, что ли?
Когда-то на MSDOS я так и делал. Не особо удобно...

Что такое APanel.Path0

Posted: Tue 24 Apr, 2018 00:38
by HaRT

Что такое 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.

Что такое 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.

Что такое APanel.Path0

Posted: Tue 24 Apr, 2018 20:14
by buniak_a_h