View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000637 | Far Manager | Plugins API.Panel | public | 2008-11-17 20:07 | 2009-06-13 11:00 |
Reporter | chupakabra | Assigned To | alexy | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Fixed in Version | 2.0 | ||||
Summary | 0000637: Проблемы плагинов с OPIF_REALNAMES | ||||
Description | 1. Поиск выводит результаты в неправильном виде. Можно увидеть на примере плагина NTFS File Information. 2. В flupdate.cpp видим такой код: if(Info.Flags & OPIF_REALNAMES) { ConvertNameToShort (CurListData->strName, CurListData->strShortName); } Зачем он нужен? По-моему его надо убрать, т.к. он создает проблемы с производительностью. 3. Это нормально что Фар иногда использует текущий каталог Windows вместо OpenPluginInfo.CurDir? К примеру, если плагин не вызывает SetCurrentDirectory() при смене каталога (но при этом обновляет OpenPluginInfo.CurDir), то Far неправильно определяет путь к выделенному файлу. | ||||
Tags | No tags attached. | ||||
Build | 965 | ||||
2008-11-22 14:57
|
flupdate.patch (671 bytes)
Index: flupdate.cpp =================================================================== --- flupdate.cpp (revision 2106) +++ flupdate.cpp (working copy) @@ -729,10 +729,6 @@ //memset(CurListData,0,sizeof(*CurListData)); PluginToFileListItem(CurPanelData,CurListData); - if(Info.Flags & OPIF_REALNAMES) - { - ConvertNameToShort (CurListData->strName, CurListData->strShortName); - } CurListData->Position=I; if ((Info.Flags & OPIF_USEHIGHLIGHTING) || (Info.Flags & OPIF_USEATTRHIGHLIGHTING)) CtrlObject->HiFiles->GetHiColor(&CurPanelData->FindData,&CurListData->Colors,(Info.Flags&OPIF_USEATTRHIGHLIGHTING)!=0); |
2008-11-22 14:57
|
findfile.patch (1,720 bytes)
Index: findfile.cpp =================================================================== --- findfile.cpp (revision 2106) +++ findfile.cpp (working copy) @@ -1638,8 +1638,7 @@ string strFileName=FindList[FindExitIndex]->FindData.strFileName; Panel *FindPanel=CtrlObject->Cp()->ActivePanel; - if ((FindList[FindExitIndex]->ArcIndex != LIST_INDEX_NONE) && - (!(ArcList[FindList[FindExitIndex]->ArcIndex]->Flags & OPIF_REALNAMES))) + if (FindList[FindExitIndex]->ArcIndex != LIST_INDEX_NONE) { HANDLE hPlugin = ArcList[FindList[FindExitIndex]->ArcIndex]->hPlugin; if (hPlugin == INVALID_HANDLE_VALUE) @@ -2630,11 +2629,12 @@ TRY { Sleep(200); - strPluginSearchPath=L""; HANDLE hPlugin=ArcList[FindFileArcIndex]->hPlugin; struct OpenPluginInfo Info; CtrlObject->Plugins.GetOpenPluginInfo(hPlugin,&Info); strSaveDir = Info.CurDir; + strPluginSearchPath=Info.CurDir; + if (!strPluginSearchPath.IsEmpty()) AddEndSlash(strPluginSearchPath); WaitForSingleObject(hPluginMutex,INFINITE); if (SearchMode==SEARCH_ROOT || SearchMode==SEARCH_ALL || @@ -2718,16 +2718,10 @@ string strFullName; if (StrCmp(strCurName,L".")==0 || TestParentFolderName(strCurName)) continue; - if (Flags & OPIF_REALNAMES) - { - strFullName = strCurName; - } - else - { - strFullName = strPluginSearchPath; - strFullName += strCurName; - } + strFullName = strPluginSearchPath; + strFullName += strCurName; + /* $ 30.09.2003 KM ���������� ���� �� �������� � ��������� ����� */ |
|
flupdate.patch удаляет вызов ConvertNameToShort() т.к. этим должен заниматься плагин. findfile.patch исправляет поиск в панели плагина. |
|
Ты что то немного спешишь. При OPIF_REALNAMES у плагина как бы и не может быть current dir, все элементы панели должны содержать полный путь по другому это работать не может. |
|
Думаю надо поменять эту логику. Иначе как быть с плагинами типа NTFS File Information? Но я пока и не пытался править третий пункт, это патчи для первых двух. |
|
REALNAMES был в общем придуман (я так догадываюсь) для TempPanel, а там есть просто мешанина любых файлов с любой папки, поэтому надо в имени файла содержать полный путь. Баги 1 и 3 происходят с твоим плагинов скорее всего потому что ты полный путь не хранишь, а это уже типа твой баг. Храни полный путь в filename. Пункт 2 надо подумать и понять зачем оно вообще было сделано так. |
|
Насчет 1 не согласен. Для чего Фар берет на себя задачи по вычислению короткого имени? По-моему этим должен сам плагин заниматься. В итоге получается так, что NTFS File Information генерирует листинг за 10 секунд, а Фар потом еще минуту сканирует диск в поисках этих коротких имен. |
|
Перепутал пункты 1 и 2. |
|
Ты давай исправь у себя в плагине 1 и 3 а насчёт 2 надо думать, т.е. понятно что это convertname немного лишнее но надо всё таки узнать по какой причине оно там есть. |
|
Насчет хранения полного пути: в NTFS File Information есть режим, в котором на панели отображаются относительные пути (список файлов из текущего каталога и всех подкаталогов). Можно тут конечно полные пути отображать, но это будет очень некрасиво выглядеть в случае длинных путей. |
|
А почему ты вообще против изменения логики REALNAMES? TmpPanel и с новой логикой будет работать, я учитывал что CurDir может быть пустой. Есть какие-то еще плагины с REALNAMES? |
|
А это нормально что в плагиновском режиме просмотра панели OPIF_SHOWNAMESONLY не работает? |
|
Без понятия, надо смотреть. А насчёт realnames, если ты берёшся проверить все места в коде где юзается REALNAMES и сделать полный патч то для 1.80 твоё добавление к логике принимается. |
|
Выяснилась еще одна проблема - если CurDir пустой и пользователь нажимает на .. то Фар просто сам закрывает плагин. В итоге непонятно как ходить по каталогам. |
|
Свежий патч всегда здесь: http://farplug.googlecode.com/svn/trunk/farpatch/far2.patch |
|
965 |
Date Modified | Username | Field | Change |
---|---|---|---|
2008-11-17 20:07 | chupakabra | New Issue | |
2008-11-22 14:57 | chupakabra | File Added: flupdate.patch | |
2008-11-22 14:57 | chupakabra | File Added: findfile.patch | |
2008-11-22 15:03 | chupakabra | Note Added: 0002025 | |
2008-11-22 15:19 | alexy | Note Added: 0002026 | |
2008-11-22 15:19 | alexy | Status | new => assigned |
2008-11-22 15:19 | alexy | Assigned To | => alexy |
2008-11-22 15:28 | chupakabra | Note Added: 0002027 | |
2008-11-22 15:39 | alexy | Note Added: 0002028 | |
2008-11-22 15:53 | chupakabra | Note Added: 0002029 | |
2008-11-22 15:54 | chupakabra | Note Added: 0002030 | |
2008-11-22 15:57 | alexy | Note Added: 0002031 | |
2008-11-22 16:02 | chupakabra | Note Added: 0002032 | |
2008-11-22 16:10 | chupakabra | Note Added: 0002033 | |
2008-11-22 17:15 | chupakabra | Note Added: 0002034 | |
2008-11-22 17:30 | alexy | Note Added: 0002035 | |
2008-11-23 10:40 | chupakabra | Note Added: 0002042 | |
2008-11-23 10:42 | chupakabra | Note Edited: 0002042 | |
2009-03-25 10:52 | chupakabra | Note Added: 0002823 | |
2009-03-27 15:31 | alexy | Assigned To | alexy => |
2009-03-27 15:31 | alexy | Status | assigned => new |
2009-05-29 23:30 | alexy | Status | new => assigned |
2009-05-29 23:30 | alexy | Assigned To | => alexy |
2009-05-29 23:53 | alexy | Note Added: 0003370 | |
2009-05-29 23:53 | alexy | Status | assigned => feedback |
2009-06-13 11:00 | alexy | Build | => 965 |
2009-06-13 11:00 | alexy | Status | feedback => closed |
2009-06-13 11:00 | alexy | Resolution | open => fixed |
2009-06-13 11:00 | alexy | Fixed in Version | => 2.0 |