Копирование файлов с временной панели с сохранение структуры папок
- buniak_a_h
- Posts: 4266
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Копирование файлов с временной панели с сохранение структуры папок
Предлагаю небольшой макрос, копирующий файлы с временной панели, открытой на активной панели (извините за тавтологию) в директорий, открытый на неактивной панели. Макрос "рассовывает" копируемые файлы по подкаталогам в соответствии с их расположением в исходной структуре (относительно "корневой" папки). Особенно полезна для копирования результатов поиска файлов, помещённых на временную панель.
Опубликовал версию 1.5.2 в связи с изменениями в модулях
Опубликовал версию 1.5.2 в связи с изменениями в модулях
Last edited by buniak_a_h on Tue 31 Dec, 2019 12:38, edited 3 times in total.
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Копирование файлов с временной панели с сохранение структуры папок
buniak_a_h,
1. Можно добавить ещё один гуид ''E2500D1C-D1D2-4C4C-91C0-6864F2AAF5E8'' (LF TmpPanel)
2. У меня регулярно с одного из выделенных файлов не снимается выделение, хотя он и копируется.
P.S.
По пункту 2 - скорее всего потому, что есть ещё один файл с тем же именем, но в другой папке.
Если это так, то виноват Far (конкретно - Panel.Select), а не макрос.
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.
- buniak_a_h
- Posts: 4266
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Копирование файлов с временной панели с сохранение структуры папок
Спасибо.
А это, похоже, ошибка в ФАРе. Пример:
Во временной панели два одноимённых файла (один - в подкаталоге):
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.
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Копирование файлов с временной панели с сохранение структуры папок
Не ближе, а один из них.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;
- buniak_a_h
- Posts: 4266
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Копирование файлов с временной панели с сохранение структуры папок
Это, видимо, не мне...
1. У меня не стоит ничего для git-а (насколько я понимаю эту систему, для коммита требуются права)
2. Хотя у меня и установлен MS VC++, но (а) на С++ я последний раз писал полноценную программу году этак в 1987; (б) сейчас я программирую на Delphi и (в) не представляю себе, что с Вашим патчем делать.
--
Надеюсь, Ваш патч в конце концов попадёт в сборку. Подожду...
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Копирование файлов с временной панели с сохранение структуры папок
buniak_a_h, вы правы, это не вам.
Просто я никогда не пользуюсь Panel.Select, поэтому надо будет сначала разбираться, потом тестировать - я бы предпочёл, чтобы тестирование сделал кто-нибудь, кто пользуется этой функцией.
Просто я никогда не пользуюсь Panel.Select, поэтому надо будет сначала разбираться, потом тестировать - я бы предпочёл, чтобы тестирование сделал кто-нибудь, кто пользуется этой функцией.
Last edited by Shmuel on Tue 24 Apr, 2018 23:08, edited 1 time in total.
- buniak_a_h
- Posts: 4266
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Копирование файлов с временной панели с сохранение структуры папок
А чем Вы пользуетесь? Это - первое, что я нашёл для сброса пометки. Есть другие способы?
Вроде,
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.
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Копирование файлов с временной панели с сохранение структуры папок
Для ясности: я не пользовался Panel.Select не потому что она чем-то нехороша. Просто так исторически сложилось.
Видимо, только перебором.
Надо вызвать panel.RedrawPanel (возможно сначала потребуется и panel.UpdatePanel).
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Копирование файлов с временной панели с сохранение структуры папок
Я бы предложил проверять не гуид, а PFLAGS_REALNAMES (или APanel.OPIFlags:0x00000020).
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Копирование файлов с временной панели с сохранение структуры папок
Поместил вышеописанную проблему на багтрекер.
- buniak_a_h
- Posts: 4266
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Копирование файлов с временной панели с сохранение структуры папок
Даже хватило Panel.SetPosIdx(0, APanel.CurPos)
- buniak_a_h
- Posts: 4266
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
Копирование файлов с временной панели с сохранение структуры папок
А с Panel.FExist что? Это плагин должен обеспечивать правильный номер итема на панели, или ФАР?
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Копирование файлов с временной панели с сохранение структуры папок
Этой функцией я также никогда не пользовался.buniak_a_h wrote: ↑Wed 25 Apr, 2018 11:47А с Panel.FExist что? Это плагин должен обеспечивать правильный номер итема на панели, или ФАР?
Разберитесь по документации, и если считаете, что баг - поместите репорт на багтрекер.
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Копирование файлов с временной панели с сохранение структуры папок
buniak_a_h, оригинальный вы товарищ, посылаете мне ЛС, а когда я пытаюсь ответить, вижу
"Некоторые пользователи не могут быть добавлены, так как они отключили получение личных сообщений."
Отвечаю здесь - репорт ваш на трекере - нормальный (с учётом того, что это первый ваш репорт).
Шансов на исправление немного, поскольку такое поведение у функции было, видимо, всегда. Но какие-то шансы всё же есть.
P.S. Если обновляете версию вашего макроса в шапке, надо об этом сообщать в форуме, иначе никто об этом обновлении не узнает.
"Некоторые пользователи не могут быть добавлены, так как они отключили получение личных сообщений."
Отвечаю здесь - репорт ваш на трекере - нормальный (с учётом того, что это первый ваш репорт).
Шансов на исправление немного, поскольку такое поведение у функции было, видимо, всегда. Но какие-то шансы всё же есть.
P.S. Если обновляете версию вашего макроса в шапке, надо об этом сообщать в форуме, иначе никто об этом обновлении не узнает.
Last edited by Shmuel on Wed 25 Apr, 2018 15:34, edited 1 time in total.
- buniak_a_h
- Posts: 4266
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact: