Страница 16 из 35

Double Commander

Добавлено: 15.01.2008 23:29:58
mpyat2
Об ошибках сюда можно?
В модуле ufileop.pas, процедура LoadFilesbyDir строку 98

Код: Выделить всё

if sr.Name='' then COntinue;

лучше раскомментировать -- у меня на Ubuntu 7.10 (Lazarus 0.9.25) при получении списка некоторых директорий (напр. мой home) FindFirst возвращает файл с пустым именем (откуда? может гуру знают?). В результате в строке 110

Код: Выделить всё

fr.bSysFile := (sr.Name[1] = '.') and (sr.Name <> '..');

DoubleCmd вылетает (обращение к несуществуюшему sr.Name[1]).
Строки относительно сегодняшнего SVN версии 156

Добавлено: 16.01.2008 12:09:36
Attid
mpyat2 это костылик не стоит этого добавлять.

проблема или в LCL или в твоей системе.
преверь на других командерах, а также свой примерчик сооруди с файндом.

у меня в венде напричер часто на СД жалуется, даже где-то выше писал об этом, но это проблемы моей системы например она еще проявляется на антивируснике ..

Добавлено: 16.01.2008 15:31:49
mpyat2
Ok, но зачем тогда этот костылик присутствует [почти] везде, где FindFirst встречается в исходных кодах Lazarus?
См. например, lazarus\ide\buildmanager.pas метод

Код: Выделить всё

function TBuildManager.DeleteAmbiguousFiles(const Filename: string
  ): TModalResult;
....
    if SysUtils.FindFirst(ADirectory+GetAllFilesMask,faAnyFile,FileInfo)=0 then
    begin
      ShortFilename:=ExtractFileName(Filename);
      IsPascalUnit:=FilenameIsPascalUnit(ShortFilename);
      UnitName:=ExtractFilenameOnly(ShortFilename);
      repeat
        if (FileInfo.Name='.') or (FileInfo.Name='..')
        or (FileInfo.Name='')
        or ((FileInfo.Attr and faDirectory)<>0) then continue;
....


и другие (checkcompileropts.pas, codebrowser.pas ...).

Может в этом есть некий скрытый смысл? :-)

Добавлено: 16.01.2008 16:04:25
Attid
тогда скрытый наверно есть =)
хотя странно это имхо =/

Alexx2000 добавишь ?

Добавлено: 16.01.2008 16:19:18
Alexx2000
Attid писал(а):Alexx2000 добавишь ?

В модуль ufileop.pas добавил.

mpyat2, копирование/ удаление нормально работают? Тут на форуме на sf.net, radek25 пишет что у него в Ubuntu 7.10 виснет.

Добавлено: 17.01.2008 12:02:59
mpyat2
Попробую сегодня вечером (Ubuntu только дома)

Добавлено: 17.01.2008 23:43:49
mpyat2
При удалении файлов (UBUNTU 7.10) ПОЧТИ всегда зависает (причем так жестко, что система перестает реагировать, только мышь двигается. Ctrl-Alt-F1 удалось переключиться на текстовую консоль, но при переключении обратно все замерзло ввобще).
Похоже, виснет на Resume потока, который удаляет файлы. Но на 100% не уверен (продебагить пока не удалось, все нафиг виснет).

Копирование иногда работает, иногда виснет.

Более мелкий баг: похоже FindFirst/FindNext реализован не очень корректно: у меня встречаются файлы с двоеточием в имени (НЕ Я ИХ ДЕЛАЛ!). MC показывает их корректно, DoubleCmd откусывает часть имени или не показывает их вообще. При копировании каталогов с такими файлами вылетает.

Добавлено: 18.01.2008 02:21:09
B4rr4cuda
Более мелкий баг: похоже FindFirst/FindNext реализован не очень корректно: у меня встречаются файлы с двоеточием в имени (НЕ Я ИХ ДЕЛАЛ!). MC показывает их корректно, DoubleCmd откусывает часть имени или не показывает их вообще. При копировании каталогов с такими файлами вылетает.

Таки да. Создать файл с двоеточием в имени (в DC) не удалось.
Файл с именем #$.txt создался, но копирование, перемещение
вызвают Access Violation. Открытие на редактирование во внутреннем редакторе и удаление просто не срабатывают.
Добавлено
Хм, файл с двоеточием (описанный выше) (new:#$.txt) создался, но отображался как #$.txt. Случайно обнаружил просмотрев темповую папку с помощью mc. После перезапуска DC видит этот файл как папку. Странно...

Во первых не знаю как его вывести (может
быть использовать Hint). Во вторых где именно выводить данное
окно?

Предлагаю такой вариант:
Лог. Хорошо выполненный интерфейсно и практически.
И минипанельку лога показывать под функциональными кнопками ( а лучше вместо них, их все равно никто не использует). А кому надо больше функций лога - вызовет соответсвующий диалог.
Подобная реализация (минипанель лога) мне встретилась у emelfm, или как он там пишется. Очень (!) удобно.

Добавлено: 18.01.2008 03:44:25
B4rr4cuda
Нашел таки этот противный баг с отображением ".." в корневой папке (/):
ufilepanel.pas строка 169

Код: Выделить всё

 if (not gShowSystemFiles) and bSysFile then Continue;
       fRefList.Add(pfri);

Добавляем еще одно условие:

Код: Выделить всё

if (not gShowSystemFiles) and bSysFile then Continue;
if ((pfri^.sPath='') and (pfri^.sName='..') and (ActiveDir='/')) then  Continue;
       fRefList.Add(pfri);

Добавлено: 18.01.2008 05:18:52
B4rr4cuda
Что-то сломали в чтении настроек.
Указываем шрифт, ок, перезапускаем ДС - указан default.
Более старые версии читают нормально (свн от 13 числа читает).

Добавлено: 18.01.2008 05:41:49
B4rr4cuda
А не, с чтением все в норме. Проблема в записи. То ли куда-то не туда пишет, толи не пишет вообще. Вручную добавил
FontName=-xos4-terminus-medium-r-normal-*-*-160-*-*-c-*-iso10646-1
в ~/.config/doublecmd/doublecmd.ini и все стало нормуль.

Добавлено: 18.01.2008 10:32:48
B4rr4cuda
Такое предложение: ограничить отображаемый путь (слева от комстроки) иначе при входе "глубоко" в фс кострока теряется.

Добавлено: 18.01.2008 11:53:11
Alexx2000
B4rr4cuda писал(а):Подобная реализация (минипанель лога) мне встретилась у emelfm, или как он там пишется. Очень (!) удобно.

Хорошая идея, мне нравится.

Добавляем еще одно условие:

Код: Выделить всё

if (not gShowSystemFiles) and bSysFile then Continue;
if ((pfri^.sPath='') and (pfri^.sName='..') and (ActiveDir='/')) then  Continue;
       fRefList.Add(pfri);

Добавил

А не, с чтением все в норме. Проблема в записи. То ли куда-то не туда пишет, толи не пишет вообще.

Хранение настроек сейчас перерабатываю, поэтому могут быть ошибки в работе

B4rr4cuda писал(а):Такое предложение: ограничить отображаемый путь (слева от комстроки) иначе при входе "глубоко" в фс кострока теряется.

Надо добавить соответствующую опцию

Добавлено: 19.01.2008 17:48:47
B4rr4cuda
mpyat2 писал(а):При удалении файлов (UBUNTU 7.10) ПОЧТИ всегда зависает (причем так жестко, что система перестает реагировать, только мышь двигается. Ctrl-Alt-F1 удалось переключиться на текстовую консоль, но при переключении обратно все замерзло ввобще).

Похоже, виснет на Resume потока, который удаляет файлы. Но на 100% не уверен (продебагить пока не удалось, все нафиг виснет).

Копирование иногда работает, иногда виснет.

Кстати, мелькнула мысля, может эта проблема косвенно связана с нерабочим копированием\перемещением\удалением в DC собраным под QT?
"Что-то неладно в Датском Королевстве" С

Добавлено: 19.01.2008 22:27:49
B4rr4cuda
Нашел таки бяку...
Потоковые операции (копирование/перемещение/удаление) в DC собранном под QT начинают работать, если не использовать синхронизацию.
В частности удаление работает полностью коректно, если в модуле uDeleteThread заменить вызовы а-ля

Код: Выделить всё

Synchronize(@FFileOpDlg.UpdateDlg);

на

Код: Выделить всё

FFileOpDlg.UpdateDlg;

Это работает также под GTK и GTK2.
Точнее работает, но не совсем коректно...

У кого какие мысли?