Double Commander

Файловый менеджер

Модератор: Модераторы

Сообщение Attid » 20.01.2008 00:35:06

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

как костыль можно дерективы поставить, как решение премер на 2 кнопки и в трекер.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Alexx2000 » 20.01.2008 01:39:46

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

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

Раньше без синхронизации под гтк сразу падало или висло. Вот тогда я намучался :( Конечно это баг Лазаруса, надо им в баг трекер закинуть, если еще нету. Надо чтобы везде работало одинаково.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Сообщение B4rr4cuda » 20.01.2008 01:58:04

Закоментировал синхронизы в uCopyThread и uMoveThread - отлично работает под qt.
Пока лазаровцы не наладили можно, как костылик, использовать:
в make.sh

Код: Выделить всё
if [ "$lcl" = "qt" ]
then
  rm interface.inc
  echo "{\$DEFINE QT}">interface.inc
fi


в каждый проблемный файл
Код: Выделить всё
{$I interface.inc}

и в проблемные места:
Код: Выделить всё
{$IFDEF QT}
     FFileOpDlg.UpdateDlg;
    {$ELSE}
     synchronize(@FFileOpDlg.UpdateDlg);
    {$ENDIF}
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение B4rr4cuda » 20.01.2008 02:07:34

Туплю.
В make.sh просто
Код: Выделить всё
rm interface.inc
echo "{\$DEFINE $lcl}">interface.inc
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение B4rr4cuda » 21.01.2008 12:55:36

Во первых, наваял скриптик для автоматической адаптации DC для QT.
Копируем код ниже в файлик в каталог DC, права на исполнение, запускаем.
(!) Больше одного раза не запускать.
Потом компилим патченый код под qt. Все потоковые операции работают коректно.
Если нужно скомпилить под гтк или гтк2 в interface.inc вместо
{$DEFINE QT} указываем {$DEFINE GTK} или что-то другое.
Вновь нужно под qt - указываем {$DEFINE QT}.
Скрипт заново запускать НЕ надо!

Код: Выделить всё
#!/usr/bin/perl -w

`rm interface.inc;echo '{\$DEFINE QT\}'>interface.inc`;

@list=`ls *.pas`;

foreach (@list)
{


#удаляем левые символы и выставляем выходное расширение
$fon=$_;
$fon=~s/\n//;
$fon=$`;
$fon=~s/\r//;

`cp $fon $fon.bak`;

$fon=$`.".bak";

open( FIN,"<$fon");
open( FOUT,">$_");

while ($str=<FIN>)
{
$str=~s/\n//;
$str=$`;
$str=~s/\r//;
$str=$`;

#Включаем инклуд
$rez=$str=~m/\{\$H\+\}/;
if ($rez)
{
  $str.="\n\{\$I interface.inc\}\n"
}

#поиск
$rez=$str=~m/.*Synchronize\(.*\@/;#@*

#если строка найдена
if ($rez)
  {
    #Присваиваем переменым найденые значеня
    $func=$';
    $sync=$&;

    #Повторный поиск и отделяем мух от котлет
    $rez=$func=~m/\)\;/;
    if ($rez)
    {
      $func=$`;
      $str= "{\$IFDEF QT}\n\t$func;\n{\$ELSE}\n\t$sync$func);\n{\$ENDIF}\n";
    }
  }
    print FOUT "$str\n";
}
close(FIN);
close(FOUT);
}


А во вторых - понравился лог. Очень удобно, красиво и функционально! :)
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение mpyat2 » 21.01.2008 17:24:04

По поводу появления пустого имени файла:
у меня в директории есть файл "file:" (с двоеточием в конце). Я заметил, что если в имени файла двоеточие, то откусыается все до него, включая его самоё :-).
Видимо, это баг FindFirst/FindNext. Попытаюсь исследовать глубже.
mpyat2
незнакомец
 
Сообщения: 5
Зарегистрирован: 16.01.2008 00:15:02
Откуда: Киев

Сообщение B4rr4cuda » 22.01.2008 07:38:03

2mpyat2
Возможно проблема в модуле uDCUtils или где-то рядом, в частности в этом модуле многие функции а-ля ExtractOnlyFileName удаляют символы разделители ( ['.', '/', '\', ':']), и двоеточие включено в них. Также ищется включение DriveDelim, который тоже является ':'.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение B4rr4cuda » 22.01.2008 09:27:50

Нашел.
mpyat2 оказался прав. Функция FindNext возвращает обрезанное имя файла, если в имени есть двоеточие. Имя обрезается в
FindNext ()->FindGetFileInfo()->ExtractFileName()->
fina.inc строка 82
Код: Выделить всё
while (I > 0) and not (FileName[I] in ['/', '\', ':']) do Dec(I);
Result := Copy(FileName, I + 1, MaxInt);

Обратите внимание на двоеточие в set-е.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение Attid » 22.01.2008 11:50:44

отправил в трекер

как временое решение сделать примерно так

Код: Выделить всё
{ifdef linux}
while (I > 0) and not (FileName[I] in ['/', '\']) do Dec(I);
{else}
while (I > 0) and not (FileName[I] in ['/', '\', ':']) do Dec(I);
{endif}
Result := Copy(FileName, I + 1, MaxInt);


и пересобрать фпц
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение B4rr4cuda » 22.01.2008 13:34:45

Может включить FindFirst/FindNext функции в DC, чтобы не зависеть от багов фпцешников?
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение B4rr4cuda » 22.01.2008 14:48:36

Перекомпилил fpc с поправкой {$ifdef .... отображает теперь нормально, но операции копирования\перемещения теперь вопрошают "Недостаточно места на диске продолжить?" и, если согласиться копируют с удвоением имени файла до двоеточия:
было new:111.txt, скопировалось, как new:new:111.txt.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение Alexx2000 » 22.01.2008 15:13:17

Сриптик надо добавить в SVN.
Может включить FindFirst/FindNext функции в DC, чтобы не зависеть от багов фпцешников?

Кстати думал об этом, правда по другой причине:
Чтобы атрибуты под Линуксом возвращал не всякие там faReadOnly, faArchive (которые под Линуксом имеют мало смысла), а типа rwxrwxrwx. Не охота везде IFDEF'ы пихать. В модуле uFindEx сделал даже небольшой hack так, сказать для этого, но криво это как то.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Сообщение B4rr4cuda » 22.01.2008 19:24:15

Сриптик надо добавить в SVN.

Только предупреждение о двойном запуске добавь, а то мешанина {$IFDEF} на выходе будет.

Чтобы атрибуты под Линуксом возвращал не всякие там faReadOnly, faArchive (которые под Линуксом имеют мало смысла), а типа rwxrwxrwx.

Очень правильная мысль. Плюс к этому не каждый фпц перекомпилить будет (да и умеет, если откровенно). На днях, один кадр, проприетарные дрова ати ставил, а они с дри в ядре конфликтуют, надо ядро перекомпилить. Он, как об этом узнал, вообще от идеи отказался, под vesa-ой сидит, *здесь была матерная фраза*. *убунты уничтожают новообращеным мозг. Грустно.
А юникод сейчас популярен. И фм просто обязан с ним правильно работать.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение Attid » 22.01.2008 21:15:28

B4rr4cuda писал(а):
Сриптик надо добавить в SVN.

Только предупреждение о двойном запуске добавь, а то мешанина {$IFDEF} на выходе будет.

а может все таки выполнить скрипт один раз и все ? в будущем много еще каких директив может понадобиться только interface.inc переименовать в dc.inc хотя это не важно.

Чтобы атрибуты под Линуксом возвращал не всякие там faReadOnly, faArchive (которые под Линуксом имеют мало смысла), а типа rwxrwxrwx.

а можно переписать и отправить в фпц =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Alexx2000 » 23.01.2008 01:14:50

а может все таки выполнить скрипт один раз и все ? в будущем много еще каких директив может понадобиться только interface.inc переименовать в dc.inc хотя это не важно.

Сам не знаю как лучше, а когда поправят это дело, опять писать скриптик который будет убирать IFDEF'ы?
а можно переписать и отправить в фпц =)

Ну FindFirst, FindNext они менять не будут, потеряется совместимость. А вот дополнительные функции можно было бы добавить.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Пред.След.

Вернуться в Double Commander

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru
cron