0(у рекомендуемой разработчиками, по крайней мере, в целях тестирования нескомпилированной версии). В OpenSUSE приходится в /usr/lib64/ копировать символическую ссылку liblzo2.so.2 в liblzo2.so и установить пакет lzo-devel (или в /usr/include/ создать символическую ссылку на подпапку maclibs/include/lzo папки исходников), а в большинстве других дистрибутивов вообще отсутствует qmake.
Баги:
1. Отсоединённая панель Навигация после повторного запуска программы (даже свёрнутой в системный лоток: впрочем, это беда всех окон программы, что они не сворачиваются в лоток вместе с главным окном при его закрытии, правда, в отличие от панели сворачиваются в панель задач вместе с программой) открывается на всех рабочих столах поверх всех окон {СМ. РИС. на с.1} (и при этом нет возможности встроить панель на пустое место справа от меню).
2. Не работает автозапуск программы {СМ. РИС. на с.1}.
РЕШЕНИЕ (замена соответствующего кода в файле mainwindow.cc):
- Code: Select all
void MainWindow::setAutostart(bool autostart)
{
#ifdef Q_OS_WIN32
QSettings reg("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run",
QSettings::NativeFormat);
if (autostart) {
QString app_fname = QString("\"%1\"").arg( QCoreApplication::applicationFilePath() );
app_fname.replace("/", "\\");
reg.setValue(QCoreApplication::applicationName(), app_fname);
}
else {
reg.remove(QCoreApplication::applicationName());
}
reg.sync();
#else
// this is for Linux
QString app_fname = QFileInfo(QCoreApplication::applicationFilePath()).baseName();
QString lnk(QDir::homePath()+"/.config/autostart/"+"goldendict.desktop");
if (autostart) {
QFile f("/usr/share/applications/goldendict.desktop");
f.link(lnk);
} else {
QFile::remove(lnk);
}
#endif
}
3. При сохранении файлов из оболочки (например, нажатии кнопки "Экспорт" в окне Заголовков словаря или выбора "Сохранить изображение..." контекстного меню рисунка в статье словаря) программа "вылетает" (при подключённом большом количестве словарей) с ошибкой (выдаваемой на консоль в случае запуска из неё оболочки) "*** buffer overflow detected ***: /usr/bin/goldendict terminated", если не нажать предварительно кнопку Пересканировать во вкладке Источники / Файлы окна Словари (без изменения словарей).
4. После нажатия кнопки Пересканировать во вкладке Источники / Файлы окна Словари {СМ. РИС. на с.1} (даже без изменения словарей) если выбран поиск в группе "Все", то число открытых программой файлов
(проверка: в консоли запускаем команду lsof -p `pgrep goldendict` | wc -l) вырастает на число, равное 2-х кратному количеству подключённых словарей, причём максимальному количеству, т.е. первоначальному количеству - при его уменьшении или конечному - в случае увеличения, что может привести к "вылету" программы, если у пользователя установлено недостаточно большое значение параметра maximum file descriptor number that can be opened by a process*
(проверка: в консоли запускаем команду ulimit -Sn), и только после нажатия кнопки ОК оно уменьшается до итогового значения, когда как при выборе меню Файл / Пересканировать файлы Ctrl+F5, или когда поиск задан в др. группе словарей, наоборот, число резко падает, а потом по мере пересканирования достигает (в случае Ctrl+F5) итогового значения.
Пожелания:
0. Доработать механизм индексации (чтобы после прерывания процесса полнотекстового индексирования словаря из-за завершения работы приложения при возобновлении процесса индексация словаря продолжилась с того же или близкого по времени места, на котором была прервана, а также чтобы при неизменности указанного в конфигурации пути к словарям, в т.ч. сформированного при помощи символических ссылок, переиндексация данных словарей не происходила в случае изменения "реального" пути монтирования, например, как в StarDict).
1. Доработать механизм запросов при помощи шаблонов (чтобы, например, запросы "аб?в" и "аб?в*" различались).
2. Чтобы при запросе заголовков с буквой "ё" выдавались и статьи с точно такими же заголовками, только с буквой "е" (поскольку имеется огромное количество словарей, где вместо "ё" написано "е").
3. Чтобы функция выделения слова одиночным щелчком срабатывала только в случае отпускания в месте нажатия, т.е. сохранилась бы возможность выделения части слова.
4. Чтобы к XDXF словарям подгружались dict.bmp иконки.
РЕШЕНИЕ (замена соответствующего кода в файле xdxf.cc):
- Code: Select all
void XdxfDictionary::loadIcon() throw()
{
if ( dictionaryIconLoaded )
return;
QString fileName =
QDir::fromNativeSeparators( FsEncoding::decode( getDictionaryFilenames()[ 0 ].c_str() ) );
QFileInfo baseInfo( fileName );
fileName = baseInfo.absoluteDir().absoluteFilePath( "icon32.png" );
QFileInfo info( fileName );
if( !info.isFile() )
{
fileName = baseInfo.absoluteDir().absoluteFilePath( "icon16.png" );
info = QFileInfo( fileName );
}
if( !info.isFile() )
{
fileName = baseInfo.absoluteDir().absoluteFilePath( "dict.bmp" );
info = QFileInfo( fileName );
}
if ( info.isFile() )
loadIconFromFile( fileName, true );
if ( dictionaryIcon.isNull() )
{
// Load failed -- use default icons
dictionaryIcon = QIcon(":/icons/icon32_xdxf.png");
dictionaryNativeIcon = QIcon(":/icons/icon32_xdxf.png");
}
dictionaryIconLoaded = true;
}
5. Изменить перевод закладок Панели поиска и Панели навигации по переводу (чтобы их названия отображались целиком, как, например, название Панели журнала). {СМ. РИС. на с.1}
РЕШЕНИЕ:
удаление в файле locale/ru_RU.ts из переводов соответствующих заголовков акселератор & (&).
6. Чтобы при выборе в Параметрах Интерфейса Дополнительного стиля прибавилась бы возможность изменения (за счёт появления рядом нового списка и|или контекстного меню при щелчке правой кнопкой мыши на соответствующей панели) таких параметров, как цвет фона, размер шрифта Панели навигации по переводу и т.п.,
а для начала, если всё это сложно, хотя бы добавить возможность изменения размера шрифта Панели навигации по переводу (пусть и вместе со всеми остальными списками, кроме списка слов), как это сделано для Панели поиска (т.е. списка слов) и содержания статей.
7. Добавить в Пути для поиска файлов словарей что-то вроде "Включён/Отключён", чтобы не приходилось делать лишнюю подпапку для использования в этих целях "Рекурсивно". {СМ. РИС. на с.1}
8. ОЧЕНЬ ЖЕЛАТЕЛЬНО, чтобы в окне Порядка словарей в первой строке контекстного меню находилось бы безобидное "Заголовки словаря",
поскольку из-за срабатывания выбора первой строки контекстного меню при нечаянном смещении мыши во время щелчка правой кнопкой происходит пересортировка словарей, что можно и не заметить из-за отсутствия смещения находящегося в центре внимания выбранного словаря (особенно при включённой фильтрации) и нажать кнопку "ОК", что, в свою очередь, для восстановления нужного пользователю порядка словарей при отсутствии резервной копии файла конфигурации приводит к необходимости ручной пересортировки всех словарей (которых может быть и тысячи)!
РЕШЕНИЕ (замена соответствующего кода в файле orderandprops.cc):
- Code: Select all
void OrderAndProps::contextMenuRequested( const QPoint & pos )
{
QMenu menu( this );
QModelIndex idx = ui.searchLine->mapToSource( ui.dictionaryOrder->indexAt( pos ) );
sptr< Dictionary::Class > dict;
if( idx.isValid() && (unsigned)idx.row() < ui.dictionaryOrder->getCurrentDictionaries().size() )
dict = ui.dictionaryOrder->getCurrentDictionaries()[ idx.row() ];
QAction * showHeadwordsAction = NULL;
if ( dict && dict->getWordCount() > 0 )
{
showHeadwordsAction = new QAction( tr( "Dictionary headwords" ), &menu );
menu.addAction( showHeadwordsAction );
}
QAction * sortNameAction = new QAction( tr( "Sort by name" ), &menu );
menu.addAction( sortNameAction );
QAction * sortLangAction = new QAction( tr( "Sort by languages" ), &menu );
menu.addAction( sortLangAction );
QAction * result = menu.exec( ui.dictionaryOrder->mapToGlobal( pos ) );
if( result && result == showHeadwordsAction )
{
emit showDictionaryHeadwords( QString::fromUtf8( dict->getId().c_str() ) );
}
if( result == sortNameAction || result == sortLangAction )
{
vector< sptr< Dictionary::Class > > sortedDicts = ui.dictionaryOrder->getCurrentDictionaries();
if( result == sortNameAction )
sort( sortedDicts.begin(), sortedDicts.end(), dictNameLessThan );
else
sort( sortedDicts.begin(), sortedDicts.end(), dictLessThan );
ui.dictionaryOrder->populate( sortedDicts );
}
}
9. В окне Файлов, из которых состоит словарь, при их количестве 3 (а при не умещении в окне полного пути файла - и при 2) появляется справа полоса прокрутки с возможностью прокрутки на 1 строку (а при 4 файлах или 3 файлах с неумещением - на 2 строки), когда как имеется место для отображения 4 файлов.
РЕШЕНИЕ:
замена в файле orderandprops.ui в свойствах minimumSize и maximumSize значений 65 на 70, т.е.:
- Code: Select all
<property name="minimumSize">
<size>
<width>0</width>
<height>70</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>70</height>
</size>
</property>
Непонятно, почему файл описания, например, ifo присутствует в данном списке, а ann - нет (при том, что бывают DSL словари как с файлом аннотации *.ann, так и без него, т.е. точно также, как в случае присутствующего в упомянутом списке файла аббревиатур)...
*Имея права суперпользователя (root), увеличить данное значение можно путём редактирования значений параметров:
1) в старых системах - HARDFDLIMITS и SOFTFDLIMITS в файле /etc/sysconfig/ulimit
(а, например, в OpenSUSE это можно сделать также в Центре управления Yast2: Система/"Редактор /etc/sysconfig": System/Limits),
где можно установить указанные значения равными 4096, 8192, 16384, 32768, 65536, ..., при этом значение SOFTFDLIMITS не должно превышать таковое для HARDFDLIMITS,
а в файле /etc/initscript присваивание значения HARDFDLIMITS обязательно ДОЛЖНО ВЕЗДЕ ПРЕДШЕСТВОВАТЬ таковому для SOFTFDLIMITS, например:
- Code: Select all
test -z "$HARGS" || ulimit $HARGS
test -z "$SARGS" || ulimit $SARGS
,
но не наоборот (тогда необходимо поменять их местами)!
2) в новых системах - DefaultLimitNOFILE в файле /etc/systemd/system.conf (можно установить и =infinity - будут тогда равными 65536 и ulimit -Hn, и ulimit -Sn)
Если же прав суперпользователя нет, а значение ulimit -Hn больше ulimit -Sn,
то программу можно запускать через скрипт (т.е., например, созданный в файловом менеджере текстовый файл с установленными в его свойствах правами на выполнение) следующего содержания:
- Code: Select all
#! /bin/sh
#
ulimit -Sn 8192
ulimit -Sn
goldendict
где при необходимости изменяем 8192, чтобы было не больше значения, выдаваемого командой ulimit -Hn, а если программа не установлена (например, просто скомпилирована без make install), то перед исполняемым файлом goldendict указываем полный путь к нему.