Ru-Board.club
← Вернуться в раздел «Программы»

» Far Manager

Автор: Angel_Ka
Дата сообщения: 07.05.2016 13:07
shmuz2

Цитата:
репорты очень важны для развития программ

Из этого расчёта и постил. Чтобы автор плагина был в курсе. А что уж он с этой инфой будет делать, то автору виднее. Спасибо Вам за отзыв!

VictorVG4
Благодарю Вас за консультацию! Расширяет кругозор. Полезно.
Автор: VictorVG4
Дата сообщения: 07.05.2016 21:19
b4663 r14134 - ВОПРОС:

только у меня перестала работать функция

Цитата:
function SimSU.Shell_SelectingEx.Synchronize()
local AFiles={}
for j=1,panel.GetPanelInfo(nil,1).ItemsNumber do
AFiles[j]=panel.GetPanelItem(nil,1,j).FileName
end
AFiles=table.concat(AFiles,"\n")
local PFiles={} for j=1,panel.GetPanelInfo(nil,0).ItemsNumber do
PFiles[j]=panel.GetPanelItem(nil,0,j).FileName
end
PFiles=table.concat(PFiles,"\n")
Panel.Select(0,0) Panel.Select(0,1,2,PFiles)
Panel.Select(1,0) Panel.Select(1,1,2,AFiles)
end


из скрипта SimSU::SelectingEx.lua? на b4662 r14131 ещё работает, а на b4663 r14134 её вызов поломался. Пробовал нажимать Divide, выбирать макрос

Цитата:
Macro {area="Shell"; key=S.KeySync; priority=S.PriorSync; description=M.DescrSync;
condition = function() return APanel.Visible and APanel.FilePanel and PPanel.Visible and PPanel.FilePanel end;
action=SimSU.Shell_SelectingEx.Synchronize;
}

через F11::Macro Browser и F11::Менеджер макросов и обработчиков событий не зовётся на нескольких копиях и машинах. Мне одному так "повезло"?
Автор: shmuz2
Дата сообщения: 07.05.2016 21:41
VictorVG4
Сломался Panel.Select.

Добавлено:
Я до сих пор сижу на 4637, пока всё не устаканится.
Автор: VictorVG4
Дата сообщения: 07.05.2016 21:49
shmuz2

Понял. А я уже решил свою функцию селектора ваять и стал просчитывать её алгоритм. Ладно, подождём.
Автор: VictorVG4
Дата сообщения: 08.05.2016 01:52
b4664 r14136 - Panel.Select() починена, сборки обновил.
Автор: VictorVG4
Дата сообщения: 08.05.2016 17:09
FarUE3 b4665 r14142 Sun May 08 16:54:14 +0300 2016

Цитата:
1. Far b4665 r14142
2. EnvManager v1.2.1
3. Рефакторинг. Обновление совместимо с SVN r14137 - SVN r14142

изменения в х64 совпадают с п1 и п2, в farue3-update.exe обновлена константа проверки минимальной SVN ревизии до r14137, потому обновление с более старых версий осуществляется просто установкой поверх них полной сборки.

P.S.

Понятно, что ставить х86 сборку в тот же каталог что и х64 не стоит - при совпадении имён файлов они могут быть перезаписаны, но если какие-то DLL плагинов в исходном х64 наборе отсутствуют и не удалены установкой, то они работать в х86 не будут. Ну, а кто хочет приключений - вперёд на мины.
Автор: Alexyz21
Дата сообщения: 08.05.2016 22:26
Shmuel
В макросе определяю функцию:

Код: ffi.cdef[[
int CompareString(DWORD, DWORD, const char*, int, const char*, int);
]]
Автор: VictorVG4
Дата сообщения: 08.05.2016 22:33
Alexyz21

Отсюда CompareStringW()/CompareStringA()?
Автор: Alexyz21
Дата сообщения: 08.05.2016 22:36
Хороший вопрос )))
Прилепил в winapi.lua под CompareStringW - не помогло
int CompareStringW (/*LCID*/ DWORD Locale, DWORD dwCmpFlags, const wchar_t* lpString1, int cchCount1,
const wchar_t* lpString2, int cchCount2);
int CompareString (/*LCID*/ DWORD Locale, DWORD dwCmpFlags, const char* lpString1, int cchCount1,
const char* lpString2, int cchCount2);
Автор: shmuz2
Дата сообщения: 08.05.2016 22:51
Alexyz21

Цитата:
Прилепил в winapi.lua под CompareStringW - не помогло

Лепить надо CompareStringA.
Автор: Alexyz21
Дата сообщения: 08.05.2016 22:55
А как она дружит/не дружит с Utf8 из panel.GetPanelItem(nil,1,i).FileName? Конвертировать весь внутренний список в Utf16 очень накладно.
Автор: wseventeen
Дата сообщения: 08.05.2016 23:00
Alexyz21
Ф-я для юникода CompareStringW для анси CompareStringA.
Ф-и CompareString в kernel32.dll нет, добавлять ее описание нет никакого смысла.
Пользуйтесь тем что есть.
Автор: VictorVG4
Дата сообщения: 08.05.2016 23:01
<del, уже ответили>
Автор: shmuz2
Дата сообщения: 08.05.2016 23:03

Цитата:
А как она дружит/не дружит с Utf8

CompareStringA - "A" обозначает ANSI, то-есть это не юникод вообще.
Автор: Alexyz21
Дата сообщения: 08.05.2016 23:09
И как лучше поступить? Делать имена широкими win.Utf8ToUtf16(panel.GetPanelItem(nil,1,i).FileName), а затем сравнивать с помощью CompareStringW()?
Автор: shmuz2
Дата сообщения: 08.05.2016 23:20
Alexyz21
Как лучше поступить? Пробуйте разные варианты и выбирайте наиболее для вас подходящий.
Да, есть ещё функции far.LStricmp и far.LStrnicmp.
Автор: Angel_Ka
Дата сообщения: 09.05.2016 00:24
Полностью бранч из 1,8 млн файлов консольная команда формирует почти полтора часа. А ведь существуют базы и на порядок б0льшие. Такие приходится обрабатывать по частям.

Файл-список же даже для очень больших баз создаётся за минуту-другую (из 1,8 млн файлов — за 25 секунд).

А не будет ли быстрее следующая последовательность? Сначала обрабатывать файл-список в редакторе Фара, направляя результаты в значительно меньший по размеру производный список. И только потом формировать из производного списка бранч-панель для внесения коррективов в реальную базу.

Но вот позволяет ли Фаровский редактор работать со строками так, чтобы получать результаты, достигаемые в бранч-панели макросом от Alexyz21 Select Duplicates FileName in Branch panel? А именно: находить строки, содержащие полные дубликаты имён файлов, дубликаты с частично совпадающими именами от их начала и дубликаты с частично совпадающими именами от концов имён.
Автор: shmuz2
Дата сообщения: 09.05.2016 09:46
Angel_Ka

Цитата:
Но вот позволяет ли Фаровский редактор работать со строками так, чтобы получать результаты, достигаемые в бранч-панели макросом от Alexyz21

Позволяет.
Автор: Angel_Ka
Дата сообщения: 09.05.2016 14:12
shmuz2

Шорткатом AltShiftF2, запущенным в панели "LF Search: временная панель", создал файл-список panel0.temp.
Через некоторое время, по аналогии с командой временной панели Фара tmp:panel0.temp, попытался считать данный файл во временную панель плагина командой lfs:panel0.temp, но выскочила ошибка:
Код: Error [used: 541 KB]

[?]:[string "far2.utils"]:384: invalid command: panel0.temp
stack traceback:
[C]: in function 'error'
[?]:[string "far2.utils"]:384: in function 'u'
[?]:[string "far2.utils"]:435: in function <[string "far2.utils"]:434>
Автор: shmuz2
Дата сообщения: 09.05.2016 14:27
Angel_Ka
Встроенная "временная панель" плагина до сих пор рассматривалась только как средство отображения результатов поиска. Отдельный её вызов не предусматривался, как и вызов через префикс. Однако вы уже второй человек, высказывающийся по поводу отдельного доступа к функциональности данной панели. Может и сделаю как-нибудь.
Автор: Angel_Ka
Дата сообщения: 09.05.2016 16:39
shmuz2

Цитата:
Позволяет.

Благодарю Вас за консультацию! Спасибо за оперативную отзывчивость!

Цитата:
Может и сделаю как-нибудь.

Спасибо! Для меня это было бы весьма желательно. Встроенная "временная панель" плагина LF Search обладает, как минимум, двумя капитальными преимуществами перед нативной "временной панелью" Фара. Она в 2,5 раза быстрее формирует бранчи. И это на базах с очень большим количеством файлов весьма существенно. И плагиновая панель корректно работает с именами файлов, содержащими типографские кавычки « и ». Нативная же панель игнорирует файлы с такими кавычками, и это чаще всего неприемлемо. А вот по управляемости нативная панель пока поудобнее.
Автор: shmuz2
Дата сообщения: 09.05.2016 16:42
Angel_Ka
Возьмите эту же панель отдельным плагином (https://www.sendspace.com/file/b67p1p).
Префикс комстроки tmp2:
Чтобы не перехватывала стандартную врем. панель при поиске через AltF7, переименуйте DLL, чтобы её имя шло по алфавиту после tmppanel.dll.
Имейте в виду, что могут быть баги, т.к. плагин не был в публичном доступе.
Автор: Angel_Ka
Дата сообщения: 09.05.2016 16:48
shmuz2

Цитата:
Возьмите эту же панель отдельным плагином

Большое спасибо! Бегло посмотрел. C учётом настроек, подсказанных автором плагина, понравилось всё.

Мне непременно нужны три основных позиции:
1) формирование бранча — есть (подхватом результатов нативного поиска);
2) создание файла-списка — есть;
3) чтение файла-списка — есть.

Микротест макросом Select Duplicates FileName in Branch panel плагин LuaFAR Temp. Panel прошёл отлично. Бранч сформировал полный, никаких файлов с ёлочками в именах за бортом не оставил. Нашёл все файлы как положено, и ни каких не пропустил.
Автор: shmuz2
Дата сообщения: 09.05.2016 17:41

Цитата:
3) чтение файла-списка — как бы и есть, но транслируется он не в панель, а в диалог

В настройках плагина (AltShiftF9) сбросьте галку "Menu from file list".
Автор: Angel_Ka
Дата сообщения: 09.05.2016 18:25
shmuz2

Цитата:
В настройках плагина ...

Большое спасибо за инструкцию! Настройки подогнал под свои нужды. Файл-список теперь подхватывается плагином в панель, как мне и требуется. И заодно выставил маску "*.tmps" и префикс "tmps:".

Формирование бранча на 711 926 файлов плагин LuaFAR Temp. Panel произвёл за 5 мин 40 сек. Плагин же LF Search делает это за 6 мин 45 сек. Это несколько неожиданно, но в данном случае так даже и лучше.

Дубли в данном бранче, сформированном плагином LuaFAR Temp. Panel, макрос Select Duplicates FileName in Branch panel нашёл все, похожие от начала тоже все, и похожие с конца тоже все. Тест плагином пройден на отлично.

Работу же с базой, ёмкостью 1.833.335 файлов, плагин LuaFAR Temp. Panel не осиливает. Сетует на нехватку памяти. Но это уже, кажется, проблемы наличия необходимых ресурсов памяти на машинах. При этом, если у автора плагина найдется возможность так оптимизировать его код, что он станет справляться и с такими бранчами, то это, конечно, будет объективно предпочтительнее.

В целом, ОЧЕНЬ БЛАГОДАРЕН Вам за этот плагин!
Автор: shmuz2
Дата сообщения: 09.05.2016 19:32

Цитата:
Работу же с базой, ёмкостью 1.833.335 файлов, плагин LuaFAR Temp. Panel не осиливает. Сетует на нехватку памяти.

Код панели один и тот же в обоих плагинах, поэтому поведение в общем должно быть одинаково.
Ради интереса, попробуйте LF Search x86 на той же базе, если не лень.
Автор: Angel_Ka
Дата сообщения: 09.05.2016 20:13
shmuz2

Цитата:
попробуйте LF Search x86 на той же базе, если не лень

Конечно не лень — я ведь заинтересован в продвижении работы с бранчами, и чем только смогу буду содействовать. Запустил формирование бранча плагином LF Search x86, посмотрим.

Увы, на 44 минуте работы плагин выдал ошибку:
Код: Error [used: 316468 KB]

not enough memory
Автор: shmuz2
Дата сообщения: 09.05.2016 21:08
Angel_Ka, при нехватке памяти всё возможно.
Автор: Angel_Ka
Дата сообщения: 09.05.2016 21:22
shmuz2
А нативная Временная панель при той же памяти относительно нормально работает и с более тучной базой на 2,9 млн (2 890 330) файлов.
Автор: shmuz2
Дата сообщения: 09.05.2016 21:27
Я уже упоминал весьма недавно, что LuaFAR-плагины кушают больше памяти, чем "обычные". Есть и и другие тонкости, связанные с организацией памяти LuaJIT по сравнению со "стандартным" Lua. Если вам больше подходит нативная временная панель, пользуйтесь ею, всего то и делов.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: оффтоп


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.