Копирование файлов с временной панели с сохранение структуры папок

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Копирование файлов с временной панели с сохранение структуры папок

Post by buniak_a_h »

Предлагаю небольшой макрос, копирующий файлы с временной панели, открытой на активной панели (извините за тавтологию) в директорий, открытый на неактивной панели. Макрос "рассовывает" копируемые файлы по подкаталогам в соответствии с их расположением в исходной структуре (относительно "корневой" папки). Особенно полезна для копирования результатов поиска файлов, помещённых на временную панель.





Опубликовал версию 1.5.2 в связи с изменениями в модулях
CopyFiles.TempPanel.lua.1.5.3.7z
(20.66 KiB) Downloaded 147 times
Last edited by buniak_a_h on Tue 31 Dec, 2019 12:38, edited 3 times in total.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Копирование файлов с временной панели с сохранение структуры папок

Post by Shmuel »

buniak_a_h,
1. Можно добавить ещё один гуид ''E2500D1C-D1D2-4C4C-91C0-6864F2AAF5E8'' (LF TmpPanel)
2. У меня регулярно с одного из выделенных файлов не снимается выделение, хотя он и копируется.

P.S.
По пункту 2 - скорее всего потому, что есть ещё один файл с тем же именем, но в другой папке.
Если это так, то виноват Far (конкретно - Panel.Select), а не макрос.
Last edited by Shmuel on Tue 24 Apr, 2018 21:56, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Копирование файлов с временной панели с сохранение структуры папок

Post by buniak_a_h »

Shmuel wrote: Tue 24 Apr, 2018 21:22 buniak_a_h,
1. Можно добавить ещё один гуид ''E2500D1C-D1D2-4C4C-91C0-6864F2AAF5E8'' (LF TmpPanel)
Спасибо.
Shmuel wrote: Tue 24 Apr, 2018 21:22 2. У меня регулярно с одного из выделенных файлов не снимается выделение, хотя он и копируется.
А это, похоже, ошибка в ФАРе. Пример:
Во временной панели два одноимённых файла (один - в подкаталоге):
C:\Root\Ja.Inc
C:\Root\Sub\Ja.Inc

Отмечаю оба файла, беру в буфер (в буфере именно то, что указано выше)
Далее в командной строке набираю:
lua:Panel.Select(0,0,2,mf.clip(0)) (пример из мануала).
Один из файлов остаётся отмеченным!!!.
При этом если один из файлов переименовать, то выделение снимается со всех.
Вы же там ближе к разработчикам ФАРа; скажите им, пожалуйста!
P/S. Заменить снятие отметки по списку файлов на цикл по файлам списка, снимая отметку по одному - плохая идея: в этом случае восстановить отметку по CtrlM будет невозможно.
Last edited by buniak_a_h on Tue 24 Apr, 2018 22:51, edited 1 time in total.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Копирование файлов с временной панели с сохранение структуры папок

Post by Shmuel »

buniak_a_h wrote: Tue 24 Apr, 2018 22:50Вы же там ближе к разработчикам ФАРа; скажите им, пожалуйста!
Не ближе, а один из них.
Вот этот патч решает данную проблему. Не стал коммитить, т.к. нет времени полностью проверять Panel.Select.

Code: Select all

diff --git a/far/filelist.cpp b/far/filelist.cpp
index 5464c674a..431e298c7 100644
--- a/far/filelist.cpp
+++ b/far/filelist.cpp
@@ -932,7 +932,7 @@ long long FileList::VMProcess(int OpCode,void *vParam,long long iParam)
 					if (i.empty())
 						continue;
 
-					const auto Pos = FindFile(PointToName(i), true);
+					const auto Pos = FindFile(i, false);
 					if (Pos == -1)
 						continue;
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Копирование файлов с временной панели с сохранение структуры папок

Post by buniak_a_h »

Shmuel wrote: Tue 24 Apr, 2018 22:55 Вот этот патч решает данную проблему
Это, видимо, не мне...
1. У меня не стоит ничего для git-а (насколько я понимаю эту систему, для коммита требуются права)
2. Хотя у меня и установлен MS VC++, но (а) на С++ я последний раз писал полноценную программу году этак в 1987; (б) сейчас я программирую на Delphi и (в) не представляю себе, что с Вашим патчем делать.
--
Надеюсь, Ваш патч в конце концов попадёт в сборку. Подожду...
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Копирование файлов с временной панели с сохранение структуры папок

Post by Shmuel »

buniak_a_h, вы правы, это не вам.
Просто я никогда не пользуюсь Panel.Select, поэтому надо будет сначала разбираться, потом тестировать - я бы предпочёл, чтобы тестирование сделал кто-нибудь, кто пользуется этой функцией.
Last edited by Shmuel on Tue 24 Apr, 2018 23:08, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Копирование файлов с временной панели с сохранение структуры папок

Post by buniak_a_h »

Shmuel wrote: Tue 24 Apr, 2018 23:08 Просто я никогда не пользуюсь Panel.Select
А чем Вы пользуетесь? Это - первое, что я нашёл для сброса пометки. Есть другие способы?
Вроде, panel.SetSelection(nil, 1, {i,j,...}, false), работает. Осталось перевести имена итемов в номера. Опять как-то через ...При этом почему-то вызов lua:=Panel.FExist(0, <Имя_Файла>) на временной панели всегда возвращает 0. Наверно, это - тоже ошибка: файл существует, хотя это и не имеет значения; он есть на панели. Panel.FExist должна возвращать индекс элемента:
Функция возвращает 0, если такого объекта на панели нет, или индекс элемента
И как найти индекс элемента (кроме как перебором)?
P.S.
Даже если заставить работать panel.SetSelection, то на экране это не отображается до тех пор, пока что-то не изменится (положение курсора, размер окна, панель погасить-зажечь или местами поменять)... Я бы сказал, что не делается Refresh экрана
Last edited by buniak_a_h on Wed 25 Apr, 2018 01:55, edited 2 times in total.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Копирование файлов с временной панели с сохранение структуры папок

Post by Shmuel »

Для ясности: я не пользовался Panel.Select не потому что она чем-то нехороша. Просто так исторически сложилось.
buniak_a_h wrote: Wed 25 Apr, 2018 00:52И как найти индекс элемента (кроме как перебором)?
Видимо, только перебором.
buniak_a_h wrote: Wed 25 Apr, 2018 00:52Я бы сказал, что не делается Refresh экрана
Надо вызвать panel.RedrawPanel (возможно сначала потребуется и panel.UpdatePanel).
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Копирование файлов с временной панели с сохранение структуры папок

Post by John Doe »

Shmuel wrote: Tue 24 Apr, 2018 21:22 Можно добавить ещё один гуид ''E2500D1C-D1D2-4C4C-91C0-6864F2AAF5E8'' (LF TmpPanel)
Я бы предложил проверять не гуид, а PFLAGS_REALNAMES (или APanel.OPIFlags:0x00000020).
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Копирование файлов с временной панели с сохранение структуры папок

Post by Shmuel »

Поместил вышеописанную проблему на багтрекер.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Копирование файлов с временной панели с сохранение структуры папок

Post by buniak_a_h »

Shmuel wrote: Wed 25 Apr, 2018 06:26 Надо вызвать panel.RedrawPanel (возможно сначала потребуется и panel.UpdatePanel).
Даже хватило Panel.SetPosIdx(0, APanel.CurPos) :-)
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Копирование файлов с временной панели с сохранение структуры папок

Post by buniak_a_h »

Shmuel wrote: Wed 25 Apr, 2018 07:39 Поместил вышеописанную проблему на багтрекер.
А с Panel.FExist что? Это плагин должен обеспечивать правильный номер итема на панели, или ФАР?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Копирование файлов с временной панели с сохранение структуры папок

Post by Shmuel »

buniak_a_h wrote: Wed 25 Apr, 2018 11:47А с Panel.FExist что? Это плагин должен обеспечивать правильный номер итема на панели, или ФАР?
Этой функцией я также никогда не пользовался.
Разберитесь по документации, и если считаете, что баг - поместите репорт на багтрекер.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Копирование файлов с временной панели с сохранение структуры папок

Post by Shmuel »

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

Отвечаю здесь - репорт ваш на трекере - нормальный (с учётом того, что это первый ваш репорт).
Шансов на исправление немного, поскольку такое поведение у функции было, видимо, всегда. Но какие-то шансы всё же есть.

P.S. Если обновляете версию вашего макроса в шапке, надо об этом сообщать в форуме, иначе никто об этом обновлении не узнает.
Last edited by Shmuel on Wed 25 Apr, 2018 15:34, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Копирование файлов с временной панели с сохранение структуры папок

Post by buniak_a_h »

Shmuel,
Post Reply

Return to “Обсуждение макросов”